From 0fafedc7062e51b43f603c626a0f148ba4ca954e Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 1 Jul 2023 13:40:57 +0800 Subject: [PATCH 001/612] add error message judgement to set_force_relay Signed-off-by: 21pages --- src/client.rs | 16 +++++++++------- src/client/io_loop.rs | 2 +- src/port_forward.rs | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/client.rs b/src/client.rs index d726b713b..a0a5e6cc0 100644 --- a/src/client.rs +++ b/src/client.rs @@ -55,11 +55,11 @@ use scrap::{ use crate::is_keyboard_mode_supported; -#[cfg(not(any(target_os = "android", target_os = "ios")))] -use crate::{check_clipboard, ClipboardContext, CLIPBOARD_INTERVAL}; #[cfg(not(feature = "flutter"))] #[cfg(not(any(target_os = "android", target_os = "ios")))] use crate::ui_session_interface::SessionPermissionConfig; +#[cfg(not(any(target_os = "android", target_os = "ios")))] +use crate::{check_clipboard, ClipboardContext, CLIPBOARD_INTERVAL}; pub use super::lang::*; @@ -535,7 +535,7 @@ impl Client { let bytes = match res { Ok(bytes) => bytes, Err(err) => { - interface.set_force_relay(direct, false); + interface.set_force_relay(direct, false, err.to_string()); bail!("{}", err); } }; @@ -1760,12 +1760,14 @@ impl LoginConfigHandler { msg_out } - pub fn set_force_relay(&mut self, direct: bool, received: bool) { + pub fn set_force_relay(&mut self, direct: bool, received: bool, err: String) { self.force_relay = false; if direct && !received { let errno = errno::errno().0; // TODO: check mac and ios - if cfg!(windows) && errno == 10054 || !cfg!(windows) && errno == 104 { + if cfg!(windows) && (errno == 10054 || err.contains("10054")) + || !cfg!(windows) && (errno == 104 || err.contains("104")) + { self.force_relay = true; self.set_option("force-always-relay".to_owned(), "Y".to_owned()); } @@ -2315,11 +2317,11 @@ pub trait Interface: Send + Clone + 'static + Sized { async fn handle_test_delay(&mut self, t: TestDelay, peer: &mut Stream); fn get_login_config_handler(&self) -> Arc>; - fn set_force_relay(&self, direct: bool, received: bool) { + fn set_force_relay(&self, direct: bool, received: bool, err: String) { self.get_login_config_handler() .write() .unwrap() - .set_force_relay(direct, received); + .set_force_relay(direct, received, err); } fn is_force_relay(&self) -> bool { self.get_login_config_handler().read().unwrap().force_relay diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index ff1387dd0..3a7c906c6 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -161,7 +161,7 @@ impl Remote { match res { Err(err) => { log::error!("Connection closed: {}", err); - self.handler.set_force_relay(direct, received); + self.handler.set_force_relay(direct, received, err.to_string()); let msgtype = "error"; let title = "Connection Error"; let text = err.to_string(); diff --git a/src/port_forward.rs b/src/port_forward.rs index 62ba7b41c..d1450f09e 100644 --- a/src/port_forward.rs +++ b/src/port_forward.rs @@ -192,7 +192,7 @@ async fn connect_and_login_2( } Ok(Some(Err(err))) => { log::error!("Connection closed: {}", err); - interface.set_force_relay(direct, received); + interface.set_force_relay(direct, received, err.to_string()); bail!("Connection closed: {}", err); } _ => { From fe7bbdee2bd0198db52e3c2559b5b8ba2b81189d Mon Sep 17 00:00:00 2001 From: dignow Date: Sat, 1 Jul 2023 13:57:29 +0800 Subject: [PATCH 002/612] login dialog, add button style for close button Signed-off-by: dignow --- flutter/lib/common/widgets/login.dart | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index d5e2a9ba3..bfc62825a 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -507,13 +507,31 @@ Future loginDialog() async { translate('Login'), ).marginOnly(top: MyTheme.dialogPadding), TextButton( + style: ButtonStyle( + overlayColor: MaterialStateProperty.resolveWith( + (Set states) { + if (states.contains(MaterialState.hovered)) { + return Colors.red; + } + return null; + }, + ), + padding: MaterialStateProperty.all( + EdgeInsets.all(5)), + minimumSize: MaterialStateProperty.all( + Size(0, 0), + ), + shape: MaterialStateProperty.all(RoundedRectangleBorder( + side: BorderSide.none, + borderRadius: BorderRadius.all(Radius.circular(5)))), + ), child: Icon( Icons.close, - size: 20, + size: 22, color: Colors.black54, ), onPressed: onDialogCancel, - ).marginOnly(top: 5), + ).marginOnly(top: 5, right: 5), ], ); final titlePadding = EdgeInsets.fromLTRB(MyTheme.dialogPadding, 0, 0, 0); From 588168f63863f0a495c2c04d1f8840e6af718bd6 Mon Sep 17 00:00:00 2001 From: dignow Date: Sat, 1 Jul 2023 14:43:00 +0800 Subject: [PATCH 003/612] replace close button to inkwell Signed-off-by: dignow --- flutter/lib/common/widgets/login.dart | 24 ++++-------------------- libs/hbb_common/src/config.rs | 2 +- src/flutter_ffi.rs | 2 +- src/ipc.rs | 2 +- 4 files changed, 7 insertions(+), 23 deletions(-) diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index bfc62825a..0fbd506f2 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -506,31 +506,15 @@ Future loginDialog() async { Text( translate('Login'), ).marginOnly(top: MyTheme.dialogPadding), - TextButton( - style: ButtonStyle( - overlayColor: MaterialStateProperty.resolveWith( - (Set states) { - if (states.contains(MaterialState.hovered)) { - return Colors.red; - } - return null; - }, - ), - padding: MaterialStateProperty.all( - EdgeInsets.all(5)), - minimumSize: MaterialStateProperty.all( - Size(0, 0), - ), - shape: MaterialStateProperty.all(RoundedRectangleBorder( - side: BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(5)))), - ), + InkWell( child: Icon( Icons.close, size: 22, color: Colors.black54, ), - onPressed: onDialogCancel, + onTap: onDialogCancel, + hoverColor: Colors.red, + borderRadius: BorderRadius.circular(5), ).marginOnly(top: 5, right: 5), ], ); diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 785be96ee..39b40046e 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -310,7 +310,7 @@ pub struct TransferSerde { } #[inline] -pub fn get_online_statue() -> i64 { +pub fn get_online_state() -> i64 { *ONLINE.lock().unwrap().values().max().unwrap_or(&0) } diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index cc0a4f59a..e54168249 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -685,7 +685,7 @@ pub fn main_get_connect_status() -> String { } #[cfg(any(target_os = "android", target_os = "ios"))] { - let mut state = hbb_common::config::get_online_statue(); + let mut state = hbb_common::config::get_online_state(); if state > 0 { state = 1; } diff --git a/src/ipc.rs b/src/ipc.rs index 6a426e37d..526761c8b 100644 --- a/src/ipc.rs +++ b/src/ipc.rs @@ -347,7 +347,7 @@ async fn handle(data: Data, stream: &mut Connection) { } } Data::OnlineStatus(_) => { - let x = config::get_online_statue(); + let x = config::get_online_state(); let confirmed = Config::get_key_confirmed(); allow_err!(stream.send(&Data::OnlineStatus(Some((x, confirmed)))).await); } From b5bd62848818f99b65e65836bd1f9c5742bf2853 Mon Sep 17 00:00:00 2001 From: dignow Date: Sat, 1 Jul 2023 15:06:56 +0800 Subject: [PATCH 004/612] apply current theme mode Signed-off-by: dignow --- flutter/lib/common/widgets/login.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 0fbd506f2..5cffd9f6f 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -510,7 +510,9 @@ Future loginDialog() async { child: Icon( Icons.close, size: 22, - color: Colors.black54, + color: MyTheme.currentThemeMode() == ThemeMode.dark + ? Colors.white70 + : Colors.black54, ), onTap: onDialogCancel, hoverColor: Colors.red, From 8ab2a79fa231fddfcc2f6c9080105e5b38abc23f Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 1 Jul 2023 16:21:36 +0800 Subject: [PATCH 005/612] refactoring conn audit, add session_id (both session_id and conn_id on sever side), use session_id instead of conn_id for client id, and remove conn_id in protobuf --- libs/hbb_common/protos/message.proto | 1 - src/client.rs | 10 ++++++---- src/client/io_loop.rs | 7 ++----- src/common.rs | 2 -- src/server.rs | 2 +- src/server/connection.rs | 13 +++++++++++-- src/server/video_service.rs | 1 - src/tray.rs | 2 +- src/ui_session_interface.rs | 13 ++++++------- 9 files changed, 27 insertions(+), 24 deletions(-) diff --git a/libs/hbb_common/protos/message.proto b/libs/hbb_common/protos/message.proto index d89370cc7..e67a5d3b1 100644 --- a/libs/hbb_common/protos/message.proto +++ b/libs/hbb_common/protos/message.proto @@ -97,7 +97,6 @@ message PeerInfo { int32 current_display = 5; bool sas_enabled = 6; string version = 7; - int32 conn_id = 8; Features features = 9; SupportedEncoding encoding = 10; SupportedResolutions resolutions = 11; diff --git a/src/client.rs b/src/client.rs index a0a5e6cc0..cce681925 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1073,9 +1073,8 @@ pub struct LoginConfigHandler { config: PeerConfig, pub port_forward: (String, i32), pub version: i64, - pub conn_id: i32, features: Option, - session_id: u64, + pub session_id: u64, // used for local <-> server communication pub supported_encoding: SupportedEncoding, pub restarting_remote_device: bool, pub force_relay: bool, @@ -1123,7 +1122,11 @@ impl LoginConfigHandler { let config = self.load_config(); self.remember = !config.password.is_empty(); self.config = config; - self.session_id = rand::random(); + let mut sid = rand::random(); + if sid == 0 { // you won the lottery + sid = 1; + } + self.session_id = sid; self.supported_encoding = Default::default(); self.restarting_remote_device = false; self.force_relay = !self.get_option("force-always-relay").is_empty() || force_relay; @@ -1669,7 +1672,6 @@ impl LoginConfigHandler { config.keyboard_mode = KeyboardMode::Legacy.to_string(); } } - self.conn_id = pi.conn_id; // no matter if change, for update file time self.save_config(config); self.supported_encoding = pi.encoding.clone().unwrap_or_default(); diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 3a7c906c6..c5690c9aa 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1415,11 +1415,8 @@ impl Remote { } } } - Some(message::Union::PeerInfo(pi)) => match pi.conn_id { - crate::SYNC_PEER_INFO_DISPLAYS => { - self.handler.set_displays(&pi.displays); - } - _ => {} + Some(message::Union::PeerInfo(pi)) => { + self.handler.set_displays(&pi.displays); }, _ => {} } diff --git a/src/common.rs b/src/common.rs index ab3e087a3..ef96f0a37 100644 --- a/src/common.rs +++ b/src/common.rs @@ -39,8 +39,6 @@ pub type NotifyMessageBox = fn(String, String, String, String) -> dyn Future ServerPtr { let mut server = Server { connections: HashMap::new(), services: HashMap::new(), - id_count: 0, + id_count: hbb_common::rand::random::() % 1000, }; server.add_service(Box::new(audio_service::new())); server.add_service(Box::new(video_service::new())); diff --git a/src/server/connection.rs b/src/server/connection.rs index f747e47c1..f276be439 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -192,6 +192,7 @@ pub struct Connection { #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] tx_desktop_ready: mpsc::Sender<()>, + closed: bool, } impl ConnInner { @@ -320,8 +321,10 @@ impl Connection { #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] tx_desktop_ready: _tx_desktop_ready, + closed: false, }; if !conn.on_open(addr).await { + conn.closed = true; // sleep to ensure msg got received. sleep(1.).await; return; @@ -563,7 +566,7 @@ impl Connection { match &m.union { Some(misc::Union::StopService(_)) => { conn.send_close_reason_no_retry("").await; - conn.on_close("stop service", true).await; + conn.on_close("stop service", false).await; break; } _ => {}, @@ -634,6 +637,7 @@ impl Connection { #[cfg(not(any(target_os = "android", target_os = "ios")))] try_stop_record_cursor_pos(); } + conn.on_close("End", true).await; log::info!("#{} connection loop exited", id); } @@ -867,6 +871,7 @@ impl Connection { v["id"] = json!(Config::get_id()); v["uuid"] = json!(crate::encode64(hbb_common::get_uuid())); v["conn_id"] = json!(self.inner.id); + v["session_id"] = json!(self.lr.session_id); tokio::spawn(async move { allow_err!(Self::post_audit_async(url, v).await); }); @@ -948,7 +953,6 @@ impl Connection { let mut res = LoginResponse::new(); let mut pi = PeerInfo { username: username.clone(), - conn_id: self.inner.id, version: VERSION.to_owned(), ..Default::default() }; @@ -1228,6 +1232,7 @@ impl Connection { .lock() .unwrap() .retain(|_, s| s.last_recv_time.lock().unwrap().elapsed() < SESSION_TIMEOUT); + // last_recv_time is a mutex variable shared with connection, can be updated lively. if let Some(session) = session { if session.name == self.lr.my_name && session.session_id == self.lr.session_id @@ -2179,6 +2184,10 @@ impl Connection { } async fn on_close(&mut self, reason: &str, lock: bool) { + if self.closed { + return; + } + self.closed = true; log::info!("#{} Connection closed: {}", self.inner.id(), reason); if lock && self.lock_after_session_end && self.keyboard { #[cfg(not(any(target_os = "android", target_os = "ios")))] diff --git a/src/server/video_service.rs b/src/server/video_service.rs index ada41e266..9478a19f0 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -484,7 +484,6 @@ fn check_get_displays_changed_msg() -> Option { let displays = check_displays_new()?; let (current, displays) = get_displays_2(&displays); let mut pi = PeerInfo { - conn_id: crate::SYNC_PEER_INFO_DISPLAYS, ..Default::default() }; pi.displays = displays.clone(); diff --git a/src/tray.rs b/src/tray.rs index 23b7e9b0c..a3926d3ad 100644 --- a/src/tray.rs +++ b/src/tray.rs @@ -61,7 +61,7 @@ pub fn make_tray() -> hbb_common::ResultType<()> { let mut docker_hiden = false; let open_func = move || { - #[cfg(not(feature = "flutter"))] + if cfg!(not(feature = "flutter")) { crate::run_me::<&str>(vec![]).ok(); return; diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index e821b71dd..79544939e 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -49,7 +49,7 @@ const CHANGE_RESOLUTION_VALID_TIMEOUT_SECS: u64 = 15; #[derive(Clone, Default)] pub struct Session { - pub session_id: SessionID, + pub session_id: SessionID, // different from the one in LoginConfigHandler, used for flutter UI message pass pub id: String, // peer id pub password: String, pub args: Vec, @@ -312,8 +312,7 @@ impl Session { } pub fn get_audit_server(&self, typ: String) -> String { - if self.lc.read().unwrap().conn_id <= 0 - || LocalConfig::get_option("access_token").is_empty() + if LocalConfig::get_option("access_token").is_empty() { return "".to_owned(); } @@ -327,9 +326,9 @@ impl Session { pub fn send_note(&self, note: String) { let url = self.get_audit_server("conn".to_string()); let id = self.id.clone(); - let conn_id = self.lc.read().unwrap().conn_id; + let session_id = self.lc.read().unwrap().session_id; std::thread::spawn(move || { - send_note(url, id, conn_id, note); + send_note(url, id, session_id, note); }); } @@ -1347,7 +1346,7 @@ async fn start_one_port_forward( } #[tokio::main(flavor = "current_thread")] -async fn send_note(url: String, id: String, conn_id: i32, note: String) { - let body = serde_json::json!({ "id": id, "conn_id": conn_id, "note": note }); +async fn send_note(url: String, id: String, sid: u64, note: String) { + let body = serde_json::json!({ "id": id, "session_id": sid, "note": note }); allow_err!(crate::post_request(url, body.to_string(), "").await); } From 06638337bfbdcbd29a7e48f657cd43155fd6e051 Mon Sep 17 00:00:00 2001 From: dignow Date: Sat, 1 Jul 2023 16:28:46 +0800 Subject: [PATCH 006/612] refact close inkwell on login dialog Signed-off-by: dignow --- flutter/lib/common/widgets/login.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 5cffd9f6f..499a734d6 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -509,15 +509,15 @@ Future loginDialog() async { InkWell( child: Icon( Icons.close, - size: 22, - color: MyTheme.currentThemeMode() == ThemeMode.dark - ? Colors.white70 - : Colors.black54, + size: 25, + // No need to handle the branch of null. + // Because we can ensure the color is not null when debug. + color: Theme.of(context).textTheme.titleLarge?.color?.withOpacity(0.55), ), onTap: onDialogCancel, hoverColor: Colors.red, borderRadius: BorderRadius.circular(5), - ).marginOnly(top: 5, right: 5), + ).marginOnly(top: 10, right: 15), ], ); final titlePadding = EdgeInsets.fromLTRB(MyTheme.dialogPadding, 0, 0, 0); From f0ca66164c0eb5ce938937ed0afe43bf747b6f90 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 1 Jul 2023 16:36:43 +0800 Subject: [PATCH 007/612] update_session_id --- src/server/connection.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/server/connection.rs b/src/server/connection.rs index f276be439..c75450983 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1269,7 +1269,13 @@ impl Connection { } async fn handle_login_request_without_validation(&mut self, lr: &LoginRequest) { + let changed = lr.session_id != self.lr.session_id; self.lr = lr.clone(); + if changed { + self.post_conn_audit(json!({ + "action": "update_session_id", + })); + } if let Some(o) = lr.option.as_ref() { self.options_in_login = Some(o.clone()); if let Some(q) = o.supported_decoding.clone().take() { From 5995c363795535fa029b620f0b727eac75b92f42 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 1 Jul 2023 21:14:48 +0800 Subject: [PATCH 008/612] new specific update_session_id action --- src/server/connection.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/server/connection.rs b/src/server/connection.rs index c75450983..f276be439 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1269,13 +1269,7 @@ impl Connection { } async fn handle_login_request_without_validation(&mut self, lr: &LoginRequest) { - let changed = lr.session_id != self.lr.session_id; self.lr = lr.clone(); - if changed { - self.post_conn_audit(json!({ - "action": "update_session_id", - })); - } if let Some(o) = lr.option.as_ref() { self.options_in_login = Some(o.clone()); if let Some(q) = o.supported_decoding.clone().take() { From aede035d207aad53637772d3e0c8ce3702234fe5 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 1 Jul 2023 17:58:11 +0800 Subject: [PATCH 009/612] opt force_relay/relay_hint logic Signed-off-by: 21pages --- flutter/lib/models/model.dart | 29 ++++++----- src/client.rs | 90 ++++++++++++++++++----------------- src/client/io_loop.rs | 19 ++------ src/lang/en.rs | 2 +- src/port_forward.rs | 47 +++--------------- src/ui_session_interface.rs | 43 +---------------- 6 files changed, 73 insertions(+), 157 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 1fa3255c9..74d993a64 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -350,7 +350,7 @@ class FfiModel with ChangeNotifier { } else if (type == 'elevation-error') { showElevationError(sessionId, type, title, text, dialogManager); } else if (type == 'relay-hint') { - showRelayHintDialog(sessionId, type, title, text, dialogManager); + showRelayHintDialog(sessionId, type, title, text, dialogManager, peerId); } else { var hasRetry = evt['hasRetry'] == 'true'; showMsgBox(sessionId, type, title, text, link, hasRetry, dialogManager); @@ -383,7 +383,7 @@ class FfiModel with ChangeNotifier { } void showRelayHintDialog(SessionID sessionId, String type, String title, - String text, OverlayDialogManager dialogManager) { + String text, OverlayDialogManager dialogManager, String peerId) { dialogManager.show(tag: '$sessionId-$type', (setState, close, context) { onClose() { closeConnection(); @@ -392,25 +392,24 @@ class FfiModel with ChangeNotifier { final style = ElevatedButton.styleFrom(backgroundColor: Colors.green[700]); + var hint = "\n\n${translate('relay_hint_tip')}"; + if (text.contains("10054") || text.contains("104")) { + hint = ""; + } + final alreadyForceAlwaysRelay = bind + .mainGetPeerOptionSync(id: peerId, key: 'force-always-relay') + .isNotEmpty; return CustomAlertDialog( title: null, - content: msgboxContent(type, title, - "${translate(text)}\n\n${translate('relay_hint_tip')}"), + content: msgboxContent(type, title, "${translate(text)}$hint"), actions: [ dialogButton('Close', onPressed: onClose, isOutline: true), dialogButton('Retry', onPressed: () => reconnect(dialogManager, sessionId, false)), - dialogButton('Connect via relay', - onPressed: () => reconnect(dialogManager, sessionId, true), - buttonStyle: style), - dialogButton('Always connect via relay', onPressed: () { - const option = 'force-always-relay'; - bind.sessionPeerOption( - sessionId: sessionId, - name: option, - value: bool2option(option, true)); - reconnect(dialogManager, sessionId, true); - }, buttonStyle: style), + if (!alreadyForceAlwaysRelay) + dialogButton('Connect via relay', + onPressed: () => reconnect(dialogManager, sessionId, true), + buttonStyle: style), ], onCancel: onClose, ); diff --git a/src/client.rs b/src/client.rs index a0a5e6cc0..281f1bb63 100644 --- a/src/client.rs +++ b/src/client.rs @@ -213,6 +213,8 @@ impl Client { conn_type: ConnType, interface: impl Interface, ) -> ResultType<(Stream, bool, Option>)> { + interface.update_direct(None); + interface.update_received(false); match Self::_start(peer, key, token, conn_type, interface).await { Err(err) => { let err_str = err.to_string(); @@ -353,15 +355,8 @@ impl Client { my_addr.is_ipv4(), ) .await?; - let pk = Self::secure_connection( - peer, - signed_id_pk, - key, - &mut conn, - false, - interface, - ) - .await?; + let pk = + Self::secure_connection(peer, signed_id_pk, key, &mut conn).await?; return Ok((conn, false, pk)); } _ => { @@ -459,6 +454,7 @@ impl Client { let mut conn = socket_client::connect_tcp_local(peer, Some(local_addr), connect_timeout).await; let mut direct = !conn.is_err(); + interface.update_direct(Some(direct)); if interface.is_force_relay() || conn.is_err() { if !relay_server.is_empty() { conn = Self::request_relay( @@ -471,6 +467,7 @@ impl Client { conn_type, ) .await; + interface.update_direct(Some(false)); if conn.is_err() { bail!( "Failed to connect via relay server: {}", @@ -490,8 +487,7 @@ impl Client { } let mut conn = conn?; log::info!("{:?} used to establish connection", start.elapsed()); - let pk = Self::secure_connection(peer_id, signed_id_pk, key, &mut conn, direct, interface) - .await?; + let pk = Self::secure_connection(peer_id, signed_id_pk, key, &mut conn).await?; Ok((conn, direct, pk)) } @@ -501,8 +497,6 @@ impl Client { signed_id_pk: Vec, key: &str, conn: &mut Stream, - direct: bool, - interface: impl Interface, ) -> ResultType>> { let rs_pk = get_rs_pk(if key.is_empty() { hbb_common::config::RS_PUB_KEY @@ -532,13 +526,7 @@ impl Client { }; match timeout(READ_TIMEOUT, conn.next()).await? { Some(res) => { - let bytes = match res { - Ok(bytes) => bytes, - Err(err) => { - interface.set_force_relay(direct, false, err.to_string()); - bail!("{}", err); - } - }; + let bytes = res?; if let Ok(msg_in) = Message::parse_from_bytes(&bytes) { if let Some(message::Union::SignedId(si)) = msg_in.union { if let Ok((id, their_pk_b)) = decode_id_pk(&si.id, &sign_pk) { @@ -1082,8 +1070,6 @@ pub struct LoginConfigHandler { pub direct: Option, pub received: bool, switch_uuid: Option, - pub success_time: Option, - pub direct_error_counter: usize, } impl Deref for LoginConfigHandler { @@ -1130,8 +1116,6 @@ impl LoginConfigHandler { self.direct = None; self.received = false; self.switch_uuid = switch_uuid; - self.success_time = None; - self.direct_error_counter = 0; } /// Check if the client should auto login. @@ -1759,20 +1743,6 @@ impl LoginConfigHandler { msg_out.set_misc(misc); msg_out } - - pub fn set_force_relay(&mut self, direct: bool, received: bool, err: String) { - self.force_relay = false; - if direct && !received { - let errno = errno::errno().0; - // TODO: check mac and ios - if cfg!(windows) && (errno == 10054 || err.contains("10054")) - || !cfg!(windows) && (errno == 104 || err.contains("104")) - { - self.force_relay = true; - self.set_option("force-always-relay".to_owned(), "Y".to_owned()); - } - } - } } /// Media data. @@ -2317,16 +2287,48 @@ pub trait Interface: Send + Clone + 'static + Sized { async fn handle_test_delay(&mut self, t: TestDelay, peer: &mut Stream); fn get_login_config_handler(&self) -> Arc>; - fn set_force_relay(&self, direct: bool, received: bool, err: String) { - self.get_login_config_handler() - .write() - .unwrap() - .set_force_relay(direct, received, err); - } + fn is_force_relay(&self) -> bool { self.get_login_config_handler().read().unwrap().force_relay } fn swap_modifier_mouse(&self, _msg: &mut hbb_common::protos::message::MouseEvent) {} + + fn update_direct(&self, direct: Option) { + self.get_login_config_handler().write().unwrap().direct = direct; + } + + fn update_received(&self, received: bool) { + self.get_login_config_handler().write().unwrap().received = received; + } + + fn on_establish_connection_error(&self, err: String) { + log::error!("Connection closed: {}", err); + let title = "Connection Error"; + let text = err.to_string(); + let lc = self.get_login_config_handler(); + let direct = lc.read().unwrap().direct; + let received = lc.read().unwrap().received; + let relay_condition = direct == Some(true) && !received; + + // force relay + let errno = errno::errno().0; + if relay_condition + && (cfg!(windows) && (errno == 10054 || err.contains("10054")) + || !cfg!(windows) && (errno == 104 || err.contains("104"))) + { + lc.write().unwrap().force_relay = true; + lc.write() + .unwrap() + .set_option("force-always-relay".to_owned(), "Y".to_owned()); + } + + // relay-hint + if cfg!(feature = "flutter") && relay_condition { + self.msgbox("relay-hint", title, &text, ""); + } else { + self.msgbox("error", title, &text, ""); + } + } } /// Data used by the client interface. diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 3a7c906c6..056f49190 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -124,7 +124,7 @@ impl Remote { { Ok((mut peer, direct, pk)) => { self.handler.set_connection_type(peer.is_secured(), direct); // flutter -> connection_ready - self.handler.set_connection_info(direct, false); + self.handler.update_direct(Some(direct)); if conn_type == ConnType::DEFAULT_CONN { self.handler .set_fingerprint(crate::common::pk_to_fingerprint(pk.unwrap_or_default())); @@ -160,24 +160,14 @@ impl Remote { if let Some(res) = res { match res { Err(err) => { - log::error!("Connection closed: {}", err); - self.handler.set_force_relay(direct, received, err.to_string()); - let msgtype = "error"; - let title = "Connection Error"; - let text = err.to_string(); - let show_relay_hint = self.handler.show_relay_hint(last_recv_time, msgtype, title, &text); - if show_relay_hint{ - self.handler.msgbox("relay-hint", title, &text, ""); - } else { - self.handler.msgbox(msgtype, title, &text, ""); - } + self.handler.on_establish_connection_error(err.to_string()); break; } Ok(ref bytes) => { last_recv_time = Instant::now(); if !received { received = true; - self.handler.set_connection_info(direct, true); + self.handler.update_received(true); } self.data_count.fetch_add(bytes.len(), Ordering::Relaxed); if !self.handle_msg_from_peer(bytes, &mut peer).await { @@ -271,8 +261,7 @@ impl Remote { } } Err(err) => { - self.handler - .msgbox("error", "Connection Error", &err.to_string(), ""); + self.handler.on_establish_connection_error(err.to_string()); } } #[cfg(not(any(target_os = "android", target_os = "ios")))] diff --git a/src/lang/en.rs b/src/lang/en.rs index 9d759ada4..53d325450 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -44,7 +44,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("wait_accept_uac_tip", "Please wait for the remote user to accept the UAC dialog."), ("still_click_uac_tip", "Still requires the remote user to click OK on the UAC window of running RustDesk."), ("config_microphone", "In order to speak remotely, you need to grant RustDesk \"Record Audio\" permissions."), - ("relay_hint_tip", "It may not be possible to connect directly, you can try to connect via relay. \nIn addition, if you want to use relay on your first try, you can add the \"/r\" suffix to the ID, or select the option \"Always connect via relay\" in the peer card."), + ("relay_hint_tip", "It may not be possible to connect directly; you can try connecting via relay. Additionally, if you want to use a relay on your first attempt, you can add the \"/r\" suffix to the ID or select the option \"Always connect via relay\" in the card of recent sessions."), ("No transfers in progress", ""), ("idd_driver_tip", "Install virtual display driver which is used when you have no physical displays."), ("confirm_idd_driver_tip", "The option to install the virtual display driver is checked. Note that a test certificate will be installed to trust the virtual display driver. This test certificate will only be used to trust Rustdesk drivers."), diff --git a/src/port_forward.rs b/src/port_forward.rs index d1450f09e..6a087abe2 100644 --- a/src/port_forward.rs +++ b/src/port_forward.rs @@ -81,7 +81,7 @@ pub async fn listen( }); } Err(err) => { - interface.msgbox("error", "Error", &err.to_string(), ""); + interface.on_establish_connection_error(err.to_string()); } _ => {} } @@ -112,43 +112,6 @@ async fn connect_and_login( key: &str, token: &str, is_rdp: bool, -) -> ResultType> { - let mut res = connect_and_login_2( - id, - password, - ui_receiver, - interface.clone(), - forward, - key, - token, - is_rdp, - ) - .await; - if res.is_err() && interface.is_force_relay() { - res = connect_and_login_2( - id, - password, - ui_receiver, - interface, - forward, - key, - token, - is_rdp, - ) - .await; - } - res -} - -async fn connect_and_login_2( - id: &str, - password: &str, - ui_receiver: &mut mpsc::UnboundedReceiver, - interface: impl Interface, - forward: &mut Framed, - key: &str, - token: &str, - is_rdp: bool, ) -> ResultType> { let conn_type = if is_rdp { ConnType::RDP @@ -157,6 +120,7 @@ async fn connect_and_login_2( }; let (mut stream, direct, _pk) = Client::start(id, key, token, conn_type, interface.clone()).await?; + interface.update_direct(Some(direct)); let mut interface = interface; let mut buffer = Vec::new(); let mut received = false; @@ -167,7 +131,10 @@ async fn connect_and_login_2( bail!("Timeout"); } Ok(Some(Ok(bytes))) => { - received = true; + if !received { + received = true; + interface.update_received(true); + } let msg_in = Message::parse_from_bytes(&bytes)?; match msg_in.union { Some(message::Union::Hash(hash)) => { @@ -191,8 +158,6 @@ async fn connect_and_login_2( } } Ok(Some(Err(err))) => { - log::error!("Connection closed: {}", err); - interface.set_force_relay(direct, received, err.to_string()); bail!("Connection closed: {}", err); } _ => { diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index e821b71dd..a22bc70d5 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -146,12 +146,6 @@ impl Session { self.lc.read().unwrap().conn_type.eq(&ConnType::RDP) } - pub fn set_connection_info(&mut self, direct: bool, received: bool) { - let mut lc = self.lc.write().unwrap(); - lc.direct = Some(direct); - lc.received = received; - } - pub fn get_view_style(&self) -> String { self.lc.read().unwrap().view_style.clone() } @@ -941,38 +935,6 @@ impl Session { pub fn close_voice_call(&self) { self.send(Data::CloseVoiceCall); } - - pub fn show_relay_hint( - &mut self, - last_recv_time: tokio::time::Instant, - msgtype: &str, - title: &str, - text: &str, - ) -> bool { - let duration = Duration::from_secs(3); - let counter_interval = 3; - let lock = self.lc.read().unwrap(); - let success_time = lock.success_time; - let direct = lock.direct.unwrap_or(false); - let received = lock.received; - drop(lock); - if let Some(success_time) = success_time { - if direct && last_recv_time.duration_since(success_time) < duration { - let retry_for_relay = direct && !received; - let retry = check_if_retry(msgtype, title, text, retry_for_relay); - if retry && !retry_for_relay { - self.lc.write().unwrap().direct_error_counter += 1; - if self.lc.read().unwrap().direct_error_counter % counter_interval == 0 { - #[cfg(feature = "flutter")] - return true; - } - } - } else { - self.lc.write().unwrap().direct_error_counter = 0; - } - } - false - } } pub trait InvokeUiSession: Send + Sync + Clone + 'static + Sized + Default { @@ -1060,9 +1022,9 @@ impl Interface for Session { } fn msgbox(&self, msgtype: &str, title: &str, text: &str, link: &str) { - let direct = self.lc.read().unwrap().direct.unwrap_or_default(); + let direct = self.lc.read().unwrap().direct; let received = self.lc.read().unwrap().received; - let retry_for_relay = direct && !received; + let retry_for_relay = direct == Some(true) && !received; let retry = check_if_retry(msgtype, title, text, retry_for_relay); self.ui_handler.msgbox(msgtype, title, text, link, retry); } @@ -1119,7 +1081,6 @@ impl Interface for Session { "Connected, waiting for image...", "", ); - self.lc.write().unwrap().success_time = Some(tokio::time::Instant::now()); } self.on_connected(self.lc.read().unwrap().conn_type); #[cfg(windows)] From ffb11dce619caade619682e51efcc50413b7c44d Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 2 Jul 2023 01:27:34 +0800 Subject: [PATCH 010/612] make sure conn_id > 0 --- src/server.rs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/server.rs b/src/server.rs index 19e45068e..8a2cf6178 100644 --- a/src/server.rs +++ b/src/server.rs @@ -72,6 +72,7 @@ lazy_static::lazy_static! { // for all initiative connections. // // [Note] + // ugly // Now we use this [`CLIENT_SERVER`] to do following operations: // - record local audio, and send to remote pub static ref CLIENT_SERVER: ServerPtr = new(); @@ -90,7 +91,7 @@ pub fn new() -> ServerPtr { let mut server = Server { connections: HashMap::new(), services: HashMap::new(), - id_count: hbb_common::rand::random::() % 1000, + id_count: hbb_common::rand::random::() % 1000 + 1000, // ensure positive }; server.add_service(Box::new(audio_service::new())); server.add_service(Box::new(video_service::new())); @@ -128,11 +129,7 @@ pub async fn create_tcp_connection( secure: bool, ) -> ResultType<()> { let mut stream = stream; - let id = { - let mut w = server.write().unwrap(); - w.id_count += 1; - w.id_count - }; + let id = server.write().unwrap().get_new_id(); let (sk, pk) = Config::get_key_pair(); if secure && pk.len() == sign::PUBLICKEYBYTES && sk.len() == sign::SECRETKEYBYTES { let mut sk_ = [0u8; sign::SECRETKEYBYTES]; @@ -305,9 +302,8 @@ impl Server { // get a new unique id pub fn get_new_id(&mut self) -> i32 { - let new_id = self.id_count; self.id_count += 1; - new_id + self.id_count } } From 2f16d4c66209f9e395d9a23aab4085cd1a5cf00b Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 2 Jul 2023 10:15:15 +0800 Subject: [PATCH 011/612] downgrade win manager, new one introduce api-ms-win-shcore-scaling-l1-1-1.dll, and seems slow --- flutter/pubspec.lock | 2 +- src/ui_session_interface.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index 127e72993..a01a5a02b 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -1495,7 +1495,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: "0728bd25ba1d625181573c26d3868efe21122190" + resolved-ref: "2c4b242e668acf4e652b09b13f650bcfbbaa3871" url: "https://github.com/rustdesk-org/window_manager" source: git version: "0.3.4" diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index bbbc48f3d..ed6052d39 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -7,7 +7,7 @@ use std::{ atomic::{AtomicUsize, Ordering}, Arc, Mutex, RwLock, }, - time::{Duration, SystemTime}, + time::SystemTime, }; use async_trait::async_trait; From d9f58ed4df9a91a6767fb0ef4720f8b76f792428 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 2 Jul 2023 11:22:52 +0800 Subject: [PATCH 012/612] workaround of exit tray in windows --- src/tray.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tray.rs b/src/tray.rs index a3926d3ad..8618e0f78 100644 --- a/src/tray.rs +++ b/src/tray.rs @@ -101,10 +101,12 @@ pub fn make_tray() -> hbb_common::ResultType<()> { if let Ok(event) = menu_channel.try_recv() { if event.id == quit_i.id() { + /* failed in windows, seems no permission to check system process if !crate::check_process("--server", false) { *control_flow = ControlFlow::Exit; return; } + */ crate::platform::uninstall_service(false); } else if event.id == open_i.id() { open_func(); From 0764d375ec62f32446112d1506f1773a540f6478 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Sun, 2 Jul 2023 12:25:03 +0200 Subject: [PATCH 013/612] Update italian language --- src/lang/it.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index edc2eb9a8..e77c4d0f0 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -511,6 +511,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Collapse toolbar", "Comprimi barra strumenti"), ("Accept and Elevate", "Accetta ed eleva"), ("accept_and_elevate_btn_tooltip", "Accetta la connessione ed eleva le autorizzazioni UAC."), - ("clipboard_wait_response_timeout_tip", ""), + ("clipboard_wait_response_timeout_tip", "Timeout attesa risposta della copia."), ].iter().cloned().collect(); } From b5cf9592067562a9ff4651524d186d02c880bd04 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 2 Jul 2023 10:34:51 +0800 Subject: [PATCH 014/612] remove peers platform filter for failed connections Signed-off-by: 21pages --- libs/hbb_common/src/config.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 39b40046e..33d462028 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -1031,12 +1031,8 @@ impl PeerConfig { }; let c = PeerConfig::load(&id_decoded_string); - if c.info.platform.is_empty() { - fs::remove_file(p).ok(); - } (id_decoded_string, t, c) }) - .filter(|p| !p.2.info.platform.is_empty()) .collect(); peers.sort_unstable_by(|a, b| b.1.cmp(&a.1)); return peers; From 6f3123bf0215c6db64b69698c2a551e98027f617 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 2 Jul 2023 17:09:59 +0800 Subject: [PATCH 015/612] workaround: set the max encryption input length to 128 to avoid big encryped data Signed-off-by: 21pages --- libs/hbb_common/src/password_security.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/hbb_common/src/password_security.rs b/libs/hbb_common/src/password_security.rs index ddfe28baa..5aca2c85a 100644 --- a/libs/hbb_common/src/password_security.rs +++ b/libs/hbb_common/src/password_security.rs @@ -149,7 +149,7 @@ pub fn decrypt_vec_or_original(v: &[u8], current_version: &str) -> (Vec, boo } fn encrypt(v: &[u8]) -> Result { - if !v.is_empty() { + if !v.is_empty() && v.len() <= 128 { symmetric_crypt(v, true).map(|v| base64::encode(v, base64::Variant::Original)) } else { Err(()) From c42fbe3d45a4285f5252aa03011ca6a09473f352 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 2 Jul 2023 17:13:23 +0800 Subject: [PATCH 016/612] update machine-uid for x86 sciter access x64 machine id Signed-off-by: 21pages --- Cargo.lock | 6 +++--- Cargo.toml | 1 - libs/hbb_common/Cargo.toml | 2 +- libs/hbb_common/src/lib.rs | 2 ++ src/ui.rs | 2 +- src/ui_interface.rs | 7 ++++++- 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2cf7ddf15..c999d7c6d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3598,9 +3598,10 @@ dependencies = [ [[package]] name = "machine-uid" version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26141aceb9f046065617266f41a4a652e4583da643472a10a89b4b3664d99eb6" +source = "git+https://github.com/21pages/machine-uid#381ff579c1dc3a6c54db9dfec47c44bcb0246542" dependencies = [ + "bindgen 0.59.2", + "cc", "winreg 0.11.0", ] @@ -5191,7 +5192,6 @@ dependencies = [ "libpulse-binding", "libpulse-simple-binding", "mac_address", - "machine-uid", "magnum-opus", "mouce", "num_cpus", diff --git a/Cargo.toml b/Cargo.toml index 6f7e8c08f..67d2440f0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -80,7 +80,6 @@ cpal = "0.15" ringbuf = "0.3" [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] -machine-uid = "0.3" mac_address = "1.1" sciter-rs = { git = "https://github.com/open-trade/rust-sciter", branch = "dyn" } sys-locale = "0.3" diff --git a/libs/hbb_common/Cargo.toml b/libs/hbb_common/Cargo.toml index 864bdded0..74a2d40cc 100644 --- a/libs/hbb_common/Cargo.toml +++ b/libs/hbb_common/Cargo.toml @@ -40,7 +40,7 @@ uuid = { version = "1.3", features = ["v4"] } [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] mac_address = "1.1" -machine-uid = "0.3" +machine-uid = { git = "https://github.com/21pages/machine-uid" } sysinfo = "0.29" [features] diff --git a/libs/hbb_common/src/lib.rs b/libs/hbb_common/src/lib.rs index 192ee8a65..22347840c 100644 --- a/libs/hbb_common/src/lib.rs +++ b/libs/hbb_common/src/lib.rs @@ -45,6 +45,8 @@ pub mod keyboard; #[cfg(not(any(target_os = "android", target_os = "ios")))] pub use dlopen; #[cfg(not(any(target_os = "android", target_os = "ios")))] +pub use machine_uid; +#[cfg(not(any(target_os = "android", target_os = "ios")))] pub use sysinfo; pub use toml; pub use uuid; diff --git a/src/ui.rs b/src/ui.rs index baa7fef4c..8f075b7de 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -552,7 +552,7 @@ impl UI { } fn is_ok_change_id(&self) -> bool { - machine_uid::get().is_ok() + hbb_common::machine_uid::get().is_ok() } fn get_async_job_status(&self) -> String { diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 2232f3c42..982436b53 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -1037,7 +1037,12 @@ pub async fn change_id_shared_(id: String, old_id: String) -> &'static str { } #[cfg(not(any(target_os = "android", target_os = "ios")))] - let uuid = Bytes::from(machine_uid::get().unwrap_or("".to_owned()).as_bytes().to_vec()); + let uuid = Bytes::from( + hbb_common::machine_uid::get() + .unwrap_or("".to_owned()) + .as_bytes() + .to_vec(), + ); #[cfg(any(target_os = "android", target_os = "ios"))] let uuid = Bytes::from(hbb_common::get_uuid()); From 28518520f79b2baf3ca656f604b3941920b2c496 Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Mon, 3 Jul 2023 14:35:18 +0800 Subject: [PATCH 017/612] Create delete-artifacts.yml --- .../delete-artifacts.yml | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/workflows/name: Delete Artifacts on: workflow_dispatch: jobs: delete-artifacts: runs-on: ubuntu-latest steps: - name: Delete Old Artifacts uses: actions/delete-artifacts.yml diff --git a/.github/workflows/name: Delete Artifacts on: workflow_dispatch: jobs: delete-artifacts: runs-on: ubuntu-latest steps: - name: Delete Old Artifacts uses: actions/delete-artifacts.yml b/.github/workflows/name: Delete Artifacts on: workflow_dispatch: jobs: delete-artifacts: runs-on: ubuntu-latest steps: - name: Delete Old Artifacts uses: actions/delete-artifacts.yml new file mode 100644 index 000000000..ac1cd2360 --- /dev/null +++ b/.github/workflows/name: Delete Artifacts on: workflow_dispatch: jobs: delete-artifacts: runs-on: ubuntu-latest steps: - name: Delete Old Artifacts uses: actions/delete-artifacts.yml @@ -0,0 +1,25 @@ +name: Delete Artifacts +on: + workflow_dispatch: + +jobs: + delete-artifacts: + runs-on: ubuntu-latest + steps: + - name: Delete Old Artifacts + uses: actions/github-script@v6 + id: artifact + with: + script: | + const res = await github.rest.actions.listArtifactsForRepo({ + owner: context.repo.owner, + repo: context.repo.repo, + }) + res.data.artifacts + .forEach(({ id }) => { + github.rest.actions.deleteArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: id, + }) + }) From 358ccb70a4d27e61401de1fd637aed64fcf6b98e Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 3 Jul 2023 14:36:18 +0800 Subject: [PATCH 018/612] fix my stupid --- .../delete-artifacts.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{name: Delete Artifacts on: workflow_dispatch: jobs: delete-artifacts: runs-on: ubuntu-latest steps: - name: Delete Old Artifacts uses: actions => }/delete-artifacts.yml (100%) diff --git a/.github/workflows/name: Delete Artifacts on: workflow_dispatch: jobs: delete-artifacts: runs-on: ubuntu-latest steps: - name: Delete Old Artifacts uses: actions/delete-artifacts.yml b/.github/workflows/delete-artifacts.yml similarity index 100% rename from .github/workflows/name: Delete Artifacts on: workflow_dispatch: jobs: delete-artifacts: runs-on: ubuntu-latest steps: - name: Delete Old Artifacts uses: actions/delete-artifacts.yml rename to .github/workflows/delete-artifacts.yml From a490d7944fb2cd079de13d1c3269983d6e0ee84a Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 3 Jul 2023 14:43:03 +0800 Subject: [PATCH 019/612] stupid action --- .github/workflows/delete-artifacts.yml | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 .github/workflows/delete-artifacts.yml diff --git a/.github/workflows/delete-artifacts.yml b/.github/workflows/delete-artifacts.yml deleted file mode 100644 index ac1cd2360..000000000 --- a/.github/workflows/delete-artifacts.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Delete Artifacts -on: - workflow_dispatch: - -jobs: - delete-artifacts: - runs-on: ubuntu-latest - steps: - - name: Delete Old Artifacts - uses: actions/github-script@v6 - id: artifact - with: - script: | - const res = await github.rest.actions.listArtifactsForRepo({ - owner: context.repo.owner, - repo: context.repo.repo, - }) - res.data.artifacts - .forEach(({ id }) => { - github.rest.actions.deleteArtifact({ - owner: context.repo.owner, - repo: context.repo.repo, - artifact_id: id, - }) - }) From 86a2ace904c0bc0a5aa775fa728c3aeaafd7e1ac Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 3 Jul 2023 16:00:15 +0800 Subject: [PATCH 020/612] disable arm build in pr --- .github/workflows/flutter-build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 5042cc97e..36daf28b0 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -782,6 +782,7 @@ jobs: needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} + if: env.UPLOAD_ARTIFACT == 'true' strategy: fail-fast: false matrix: @@ -944,6 +945,7 @@ jobs: needs: [build-vcpkg-deps-linux] name: build-rustdesk(sciter) ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} + if: env.UPLOAD_ARTIFACT == 'true' strategy: fail-fast: false matrix: @@ -1102,6 +1104,7 @@ jobs: needs: [build-rustdesk-lib-linux-arm] name: build-rustdesk ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ubuntu-20.04 # 20.04 has more performance on arm build + if: env.UPLOAD_ARTIFACT == 'true' strategy: fail-fast: false matrix: From d594588c812bcf80d763afeb59919c4d7619400e Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 3 Jul 2023 16:34:23 +0800 Subject: [PATCH 021/612] win, install cert, add cert store and add cert cache Signed-off-by: dignow --- src/platform/windows.rs | 147 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 135 insertions(+), 12 deletions(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index df783b781..a99ce7c44 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1923,18 +1923,24 @@ pub fn uninstall_cert() -> ResultType<()> { mod cert { use hbb_common::{allow_err, bail, log, ResultType}; use std::{path::Path, str::from_utf8}; - use winapi::shared::{ - minwindef::{BYTE, DWORD, TRUE}, - ntdef::NULL, - }; - use winapi::um::{ - errhandlingapi::GetLastError, - wincrypt::{ - CertCloseStore, CertEnumCertificatesInStore, CertNameToStrA, CertOpenSystemStoreA, - CryptHashCertificate, ALG_ID, CALG_SHA1, CERT_ID_SHA1_HASH, CERT_X500_NAME_STR, - PCCERT_CONTEXT, + use winapi::{ + shared::{ + minwindef::{BYTE, DWORD, FALSE, TRUE}, + ntdef::NULL, + }, + um::{ + errhandlingapi::GetLastError, + wincrypt::{ + CertAddEncodedCertificateToStore, CertCloseStore, CertEnumCertificatesInStore, + CertFindCertificateInStore, CertFreeCertificateContext, CertNameToStrA, + CertOpenSystemStoreA, CryptAcquireContextA, CryptDestroyKey, CryptHashCertificate, + CryptImportPublicKeyInfo, CryptReleaseContext, CryptSetKeyParam, ALG_ID, CALG_SHA1, + CERT_FIND_ISSUER_STR_A, CERT_ID_SHA1_HASH, CERT_STORE_ADD_REPLACE_EXISTING, + CERT_X500_NAME_STR, CRYPT_VERIFYCONTEXT, HCRYPTKEY, HCRYPTPROV, KP_CERTIFICATE, + PCCERT_CONTEXT, PKCS_7_ASN_ENCODING, PROV_RSA_FULL, X509_ASN_ENCODING, + }, + winreg::HKEY_LOCAL_MACHINE, }, - winreg::HKEY_LOCAL_MACHINE, }; use winreg::{ enums::{KEY_WRITE, REG_BINARY}, @@ -2000,6 +2006,13 @@ mod cert { pub fn install_cert>(path: P) -> ResultType<()> { let mut cert_bytes = std::fs::read(path)?; + install_cert_reg(&mut cert_bytes)?; + install_cert_add_cert_store(&mut cert_bytes)?; + install_cert_add_cache()?; + Ok(()) + } + + fn install_cert_reg(cert_bytes: &mut [u8]) -> ResultType<()> { unsafe { let thumbprint = compute_thumbprint(cert_bytes.as_mut_ptr(), cert_bytes.len() as _); log::debug!("Thumbprint of cert {}", &thumbprint.1); @@ -2008,13 +2021,123 @@ mod cert { let (cert_key, _) = reg_cert_key.create_subkey(&thumbprint.1)?; let data = winreg::RegValue { vtype: REG_BINARY, - bytes: create_cert_blob(thumbprint.0, cert_bytes), + bytes: create_cert_blob(thumbprint.0, cert_bytes.to_vec()), }; cert_key.set_raw_value("Blob", &data)?; } Ok(()) } + fn install_cert_add_cert_store(cert_bytes: &mut [u8]) -> ResultType<()> { + unsafe { + let store_handle = CertOpenSystemStoreA(0 as _, "ROOT\0".as_ptr() as _); + if store_handle.is_null() { + bail!("Error opening certificate store: {}", GetLastError()); + } + let mut cert_ctx: PCCERT_CONTEXT = std::ptr::null_mut(); + if FALSE + == CertAddEncodedCertificateToStore( + store_handle, + X509_ASN_ENCODING, + cert_bytes.as_mut_ptr(), + cert_bytes.len() as _, + CERT_STORE_ADD_REPLACE_EXISTING, + &mut cert_ctx as _, + ) + { + log::error!( + "Failed to call CertAddEncodedCertificateToStore: {}", + GetLastError() + ); + } + + CertCloseStore(store_handle, 0); + } + Ok(()) + } + + fn install_cert_add_cache() -> ResultType<()> { + unsafe { + let store_handle = CertOpenSystemStoreA(0 as _, "ROOT\0".as_ptr() as _); + if store_handle.is_null() { + bail!("Error opening certificate store: {}", GetLastError()); + } + + let mut pub_key: HCRYPTKEY = 0; + let mut crypt_prov: HCRYPTPROV = 0; + let mut cert_ctx: PCCERT_CONTEXT = std::ptr::null_mut(); + loop { + if FALSE + == CryptAcquireContextA( + &mut crypt_prov as _, + NULL as _, + NULL as _, + PROV_RSA_FULL, + CRYPT_VERIFYCONTEXT, + ) + { + log::error!("Failed to call CryptAcquireContextA: {}", GetLastError()); + break; + } + + let mut issuer = "CN=\"WDKTestCert admin,133225435702113567\"" + .as_bytes() + .to_vec(); + issuer.push(0); + cert_ctx = CertFindCertificateInStore( + store_handle, + X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, + 0, + CERT_FIND_ISSUER_STR_A, + issuer.as_mut_ptr() as _, + NULL as _, + ); + if cert_ctx.is_null() { + log::error!( + "Failed to call CertFindCertificateInStore: {}", + GetLastError() + ); + break; + } + + if FALSE + == CryptImportPublicKeyInfo( + crypt_prov, + X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, + &mut (*(*cert_ctx).pCertInfo).SubjectPublicKeyInfo as _, + &mut pub_key as _, + ) + { + log::error!( + "Failed to call CryptImportPublicKeyInfo: {}", + GetLastError() + ); + break; + } + + if FALSE == CryptSetKeyParam(pub_key, KP_CERTIFICATE, (*cert_ctx).pbCertEncoded, 0) + { + log::error!("Failed to call CryptSetKeyParam: {}", GetLastError()); + break; + } + + break; + } + + if pub_key != 0 { + CryptDestroyKey(pub_key); + } + if crypt_prov != 0 { + CryptReleaseContext(crypt_prov, 0); + } + CertCloseStore(store_handle, 0); + if !cert_ctx.is_null() { + CertFreeCertificateContext(cert_ctx); + } + } + Ok(()) + } + fn get_thumbprints_to_rm() -> ResultType> { let issuers_to_rm = ["CN=\"WDKTestCert admin,133225435702113567\""]; From 82219775e3ebc63e6d71cb5da961110aae9326de Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 3 Jul 2023 16:43:39 +0800 Subject: [PATCH 022/612] change download page to https://rustdesk.com/download --- flutter/lib/desktop/pages/desktop_home_page.dart | 2 +- flutter/lib/mobile/pages/connection_page.dart | 2 +- src/ui/index.tis | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index e074f7598..5b03b39ef 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -319,7 +319,7 @@ class _DesktopHomePageState extends State "Status", "There is a newer version of ${bind.mainGetAppNameSync()} ${bind.mainGetNewVersion()} available.", "Click to download", () async { - final Uri url = Uri.parse('https://rustdesk.com'); + final Uri url = Uri.parse('https://rustdesk.com/download'); await launchUrl(url); }); } diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart index 3f8fdd32e..2118b2b2f 100644 --- a/flutter/lib/mobile/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -94,7 +94,7 @@ class _ConnectionPageState extends State { ? const SizedBox(height: 0) : InkWell( onTap: () async { - final url = '$_updateUrl.apk'; + final url = 'https://rustdesk.com/download'; if (await canLaunchUrl(Uri.parse(url))) { await launchUrl(Uri.parse(url)); } diff --git a/src/ui/index.tis b/src/ui/index.tis index ecbf3ceac..2d8eba498 100644 --- a/src/ui/index.tis +++ b/src/ui/index.tis @@ -659,7 +659,7 @@ class UpdateMe: Reactor.Component { } event click $(#install-me) { - handler.open_url("https://rustdesk.com"); + handler.open_url("https://rustdesk.com/download"); return; if (!is_win) { handler.open_url("https://rustdesk.com"); From 0c9dccaa0192479f552e830c8495b3de2af9415c Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 3 Jul 2023 16:53:50 +0800 Subject: [PATCH 023/612] fix ci --- .github/workflows/flutter-build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 36daf28b0..79b27d581 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -782,7 +782,7 @@ jobs: needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} - if: env.UPLOAD_ARTIFACT == 'true' + if: {{ env.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: @@ -945,7 +945,7 @@ jobs: needs: [build-vcpkg-deps-linux] name: build-rustdesk(sciter) ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} - if: env.UPLOAD_ARTIFACT == 'true' + if: {{ env.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: @@ -1104,7 +1104,7 @@ jobs: needs: [build-rustdesk-lib-linux-arm] name: build-rustdesk ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ubuntu-20.04 # 20.04 has more performance on arm build - if: env.UPLOAD_ARTIFACT == 'true' + if: {{ env.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: From 1f6753976b84a309f5b93b95187dad069964e437 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 3 Jul 2023 16:55:41 +0800 Subject: [PATCH 024/612] fix ci --- .github/workflows/flutter-build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 79b27d581..663eb5ac5 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -782,7 +782,7 @@ jobs: needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} - if: {{ env.UPLOAD_ARTIFACT == 'true' }} + if: ${{ env.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: @@ -945,7 +945,7 @@ jobs: needs: [build-vcpkg-deps-linux] name: build-rustdesk(sciter) ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} - if: {{ env.UPLOAD_ARTIFACT == 'true' }} + if: ${{ env.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: @@ -1104,7 +1104,7 @@ jobs: needs: [build-rustdesk-lib-linux-arm] name: build-rustdesk ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ubuntu-20.04 # 20.04 has more performance on arm build - if: {{ env.UPLOAD_ARTIFACT == 'true' }} + if: ${{ env.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: From 40252b9817510500d6e84388ec79a67fed6dafdf Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 3 Jul 2023 17:05:21 +0800 Subject: [PATCH 025/612] last try --- .github/workflows/flutter-build.yml | 52 +++++++++++++++-------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 663eb5ac5..6b74288d1 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -27,6 +27,8 @@ env: # To make a custom build with your own servers set the below secret values RS_PUB_KEY: '${{ secrets.RS_PUB_KEY }}' RENDEZVOUS_SERVER: '${{ secrets.RENDEZVOUS_SERVER }}' + +vars: UPLOAD_ARTIFACT: "${{ inputs.upload-artifact }}" jobs: @@ -95,7 +97,7 @@ jobs: - name: Sign rustdesk files uses: GermanBluefox/code-sign-action@v7 - if: env.UPLOAD_ARTIFACT == 'true' + if: vars.UPLOAD_ARTIFACT == 'true' with: certificate: '${{ secrets.WINDOWS_PFX_BASE64 }}' password: '${{ secrets.WINDOWS_PFX_PASSWORD }}' @@ -106,7 +108,7 @@ jobs: - name: Build self-extracted executable shell: bash - if: env.UPLOAD_ARTIFACT == 'true' + if: vars.UPLOAD_ARTIFACT == 'true' run: | pushd ./libs/portable python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe @@ -116,7 +118,7 @@ jobs: - name: Sign rustdesk self-extracted file uses: GermanBluefox/code-sign-action@v7 - if: env.UPLOAD_ARTIFACT == 'true' + if: vars.UPLOAD_ARTIFACT == 'true' with: certificate: '${{ secrets.WINDOWS_PFX_BASE64 }}' password: '${{ secrets.WINDOWS_PFX_PASSWORD }}' @@ -127,7 +129,7 @@ jobs: - name: Publish Release uses: softprops/action-gh-release@v1 - if: env.UPLOAD_ARTIFACT == 'true' + if: vars.UPLOAD_ARTIFACT == 'true' with: prerelease: true tag_name: ${{ env.TAG_NAME }} @@ -197,7 +199,7 @@ jobs: - name: Sign rustdesk files uses: GermanBluefox/code-sign-action@v7 - if: env.UPLOAD_ARTIFACT == 'true' + if: vars.UPLOAD_ARTIFACT == 'true' with: certificate: '${{ secrets.WINDOWS_PFX_BASE64 }}' password: '${{ secrets.WINDOWS_PFX_PASSWORD }}' @@ -228,7 +230,7 @@ jobs: - name: Publish Release uses: softprops/action-gh-release@v1 - if: env.UPLOAD_ARTIFACT == 'true' + if: vars.UPLOAD_ARTIFACT == 'true' with: prerelease: true tag_name: ${{ env.TAG_NAME }} @@ -359,7 +361,7 @@ jobs: done - name: Publish DMG package - if: env.UPLOAD_ARTIFACT == 'true' + if: vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -438,14 +440,14 @@ jobs: flutter build ipa --release --obfuscate --split-debug-info=./split-debug-info --no-codesign # - name: Upload Artifacts - # # if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' + # # if: env.ANDROID_SIGNING_KEY != null && vars.UPLOAD_ARTIFACT == 'true' # uses: actions/upload-artifact@master # with: # name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk # path: flutter/build/ios/ipa/*.ipa # - name: Publish ipa package - # # if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' + # # if: env.ANDROID_SIGNING_KEY != null && vars.UPLOAD_ARTIFACT == 'true' # uses: softprops/action-gh-release@v1 # with: # prerelease: true @@ -586,14 +588,14 @@ jobs: BUILD_TOOLS_VERSION: "30.0.2" - name: Upload Artifacts - if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' + if: env.ANDROID_SIGNING_KEY != null && vars.UPLOAD_ARTIFACT == 'true' uses: actions/upload-artifact@master with: name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk path: ${{steps.sign-rustdesk.outputs.signedReleaseFile}} - name: Publish signed apk package - if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' + if: env.ANDROID_SIGNING_KEY != null && vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -602,7 +604,7 @@ jobs: ${{steps.sign-rustdesk.outputs.signedReleaseFile}} - name: Publish unsigned apk package - if: env.ANDROID_SIGNING_KEY == null && env.UPLOAD_ARTIFACT == 'true' + if: env.ANDROID_SIGNING_KEY == null && vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -782,7 +784,7 @@ jobs: needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} - if: ${{ env.UPLOAD_ARTIFACT == 'true' }} + if: ${{ vars.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: @@ -945,7 +947,7 @@ jobs: needs: [build-vcpkg-deps-linux] name: build-rustdesk(sciter) ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} - if: ${{ env.UPLOAD_ARTIFACT == 'true' }} + if: ${{ vars.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: @@ -1085,7 +1087,7 @@ jobs: done - name: Publish debian package - if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1104,7 +1106,7 @@ jobs: needs: [build-rustdesk-lib-linux-arm] name: build-rustdesk ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ubuntu-20.04 # 20.04 has more performance on arm build - if: ${{ env.UPLOAD_ARTIFACT == 'true' }} + if: ${{ vars.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: @@ -1258,7 +1260,7 @@ jobs: done - name: Publish debian package - if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1281,7 +1283,7 @@ jobs: sudo appimage-builder --skip-tests --recipe ./AppImageBuilder-${{ matrix.job.arch }}.yml - name: Publish appimage package - if: matrix.job.extra-build-features == 'appimage' && env.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == 'appimage' && vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1355,7 +1357,7 @@ jobs: # res/rustdesk*.zst - name: Publish fedora28/centos8 package - if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1478,7 +1480,7 @@ jobs: done - name: Publish debian package - if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1537,7 +1539,7 @@ jobs: cd res && HBB=`pwd`/.. FLUTTER=1 makepkg -f - name: Publish archlinux package - if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1546,7 +1548,7 @@ jobs: res/rustdesk*.zst - name: Build appimage package - if: matrix.job.extra-build-features == 'appimage' && env.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == 'appimage' && vars.UPLOAD_ARTIFACT == 'true' shell: bash run: | # set-up appimage-builder @@ -1560,7 +1562,7 @@ jobs: sudo appimage-builder --skip-tests --recipe ./AppImageBuilder-x86_64.yml - name: Publish appimage package - if: matrix.job.extra-build-features == 'appimage' && env.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == 'appimage' && vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1569,7 +1571,7 @@ jobs: ./appimage/rustdesk-${{ env.VERSION }}-*.AppImage - name: Publish fedora28/centos8 package - if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1698,7 +1700,7 @@ jobs: - name: Publish flatpak package uses: softprops/action-gh-release@v1 - if: env.UPLOAD_ARTIFACT == 'true' + if: vars.UPLOAD_ARTIFACT == 'true' with: prerelease: true tag_name: ${{ env.TAG_NAME }} From b3a44ef87278c4b0a0c0e9375fb601d8fa5060d6 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 3 Jul 2023 17:08:50 +0800 Subject: [PATCH 026/612] change back to original ci --- .github/workflows/flutter-build.yml | 49 +++++++++++++---------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 6b74288d1..5042cc97e 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -27,8 +27,6 @@ env: # To make a custom build with your own servers set the below secret values RS_PUB_KEY: '${{ secrets.RS_PUB_KEY }}' RENDEZVOUS_SERVER: '${{ secrets.RENDEZVOUS_SERVER }}' - -vars: UPLOAD_ARTIFACT: "${{ inputs.upload-artifact }}" jobs: @@ -97,7 +95,7 @@ jobs: - name: Sign rustdesk files uses: GermanBluefox/code-sign-action@v7 - if: vars.UPLOAD_ARTIFACT == 'true' + if: env.UPLOAD_ARTIFACT == 'true' with: certificate: '${{ secrets.WINDOWS_PFX_BASE64 }}' password: '${{ secrets.WINDOWS_PFX_PASSWORD }}' @@ -108,7 +106,7 @@ jobs: - name: Build self-extracted executable shell: bash - if: vars.UPLOAD_ARTIFACT == 'true' + if: env.UPLOAD_ARTIFACT == 'true' run: | pushd ./libs/portable python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe @@ -118,7 +116,7 @@ jobs: - name: Sign rustdesk self-extracted file uses: GermanBluefox/code-sign-action@v7 - if: vars.UPLOAD_ARTIFACT == 'true' + if: env.UPLOAD_ARTIFACT == 'true' with: certificate: '${{ secrets.WINDOWS_PFX_BASE64 }}' password: '${{ secrets.WINDOWS_PFX_PASSWORD }}' @@ -129,7 +127,7 @@ jobs: - name: Publish Release uses: softprops/action-gh-release@v1 - if: vars.UPLOAD_ARTIFACT == 'true' + if: env.UPLOAD_ARTIFACT == 'true' with: prerelease: true tag_name: ${{ env.TAG_NAME }} @@ -199,7 +197,7 @@ jobs: - name: Sign rustdesk files uses: GermanBluefox/code-sign-action@v7 - if: vars.UPLOAD_ARTIFACT == 'true' + if: env.UPLOAD_ARTIFACT == 'true' with: certificate: '${{ secrets.WINDOWS_PFX_BASE64 }}' password: '${{ secrets.WINDOWS_PFX_PASSWORD }}' @@ -230,7 +228,7 @@ jobs: - name: Publish Release uses: softprops/action-gh-release@v1 - if: vars.UPLOAD_ARTIFACT == 'true' + if: env.UPLOAD_ARTIFACT == 'true' with: prerelease: true tag_name: ${{ env.TAG_NAME }} @@ -361,7 +359,7 @@ jobs: done - name: Publish DMG package - if: vars.UPLOAD_ARTIFACT == 'true' + if: env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -440,14 +438,14 @@ jobs: flutter build ipa --release --obfuscate --split-debug-info=./split-debug-info --no-codesign # - name: Upload Artifacts - # # if: env.ANDROID_SIGNING_KEY != null && vars.UPLOAD_ARTIFACT == 'true' + # # if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' # uses: actions/upload-artifact@master # with: # name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk # path: flutter/build/ios/ipa/*.ipa # - name: Publish ipa package - # # if: env.ANDROID_SIGNING_KEY != null && vars.UPLOAD_ARTIFACT == 'true' + # # if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' # uses: softprops/action-gh-release@v1 # with: # prerelease: true @@ -588,14 +586,14 @@ jobs: BUILD_TOOLS_VERSION: "30.0.2" - name: Upload Artifacts - if: env.ANDROID_SIGNING_KEY != null && vars.UPLOAD_ARTIFACT == 'true' + if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' uses: actions/upload-artifact@master with: name: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}.apk path: ${{steps.sign-rustdesk.outputs.signedReleaseFile}} - name: Publish signed apk package - if: env.ANDROID_SIGNING_KEY != null && vars.UPLOAD_ARTIFACT == 'true' + if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -604,7 +602,7 @@ jobs: ${{steps.sign-rustdesk.outputs.signedReleaseFile}} - name: Publish unsigned apk package - if: env.ANDROID_SIGNING_KEY == null && vars.UPLOAD_ARTIFACT == 'true' + if: env.ANDROID_SIGNING_KEY == null && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -784,7 +782,6 @@ jobs: needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} - if: ${{ vars.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: @@ -947,7 +944,6 @@ jobs: needs: [build-vcpkg-deps-linux] name: build-rustdesk(sciter) ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} - if: ${{ vars.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: @@ -1087,7 +1083,7 @@ jobs: done - name: Publish debian package - if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1106,7 +1102,6 @@ jobs: needs: [build-rustdesk-lib-linux-arm] name: build-rustdesk ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ubuntu-20.04 # 20.04 has more performance on arm build - if: ${{ vars.UPLOAD_ARTIFACT == 'true' }} strategy: fail-fast: false matrix: @@ -1260,7 +1255,7 @@ jobs: done - name: Publish debian package - if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1283,7 +1278,7 @@ jobs: sudo appimage-builder --skip-tests --recipe ./AppImageBuilder-${{ matrix.job.arch }}.yml - name: Publish appimage package - if: matrix.job.extra-build-features == 'appimage' && vars.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == 'appimage' && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1357,7 +1352,7 @@ jobs: # res/rustdesk*.zst - name: Publish fedora28/centos8 package - if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1480,7 +1475,7 @@ jobs: done - name: Publish debian package - if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1539,7 +1534,7 @@ jobs: cd res && HBB=`pwd`/.. FLUTTER=1 makepkg -f - name: Publish archlinux package - if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1548,7 +1543,7 @@ jobs: res/rustdesk*.zst - name: Build appimage package - if: matrix.job.extra-build-features == 'appimage' && vars.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == 'appimage' && env.UPLOAD_ARTIFACT == 'true' shell: bash run: | # set-up appimage-builder @@ -1562,7 +1557,7 @@ jobs: sudo appimage-builder --skip-tests --recipe ./AppImageBuilder-x86_64.yml - name: Publish appimage package - if: matrix.job.extra-build-features == 'appimage' && vars.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == 'appimage' && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1571,7 +1566,7 @@ jobs: ./appimage/rustdesk-${{ env.VERSION }}-*.AppImage - name: Publish fedora28/centos8 package - if: matrix.job.extra-build-features == '' && vars.UPLOAD_ARTIFACT == 'true' + if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: prerelease: true @@ -1700,7 +1695,7 @@ jobs: - name: Publish flatpak package uses: softprops/action-gh-release@v1 - if: vars.UPLOAD_ARTIFACT == 'true' + if: env.UPLOAD_ARTIFACT == 'true' with: prerelease: true tag_name: ${{ env.TAG_NAME }} From 648e47e4bfedb57a14d4c194866429e73396ca5e Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 3 Jul 2023 20:39:27 +0800 Subject: [PATCH 027/612] debug, install cert Signed-off-by: dignow --- src/platform/windows.rs | 117 ++++++++-------------------------------- 1 file changed, 23 insertions(+), 94 deletions(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index a99ce7c44..d58598f2a 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1931,13 +1931,11 @@ mod cert { um::{ errhandlingapi::GetLastError, wincrypt::{ - CertAddEncodedCertificateToStore, CertCloseStore, CertEnumCertificatesInStore, - CertFindCertificateInStore, CertFreeCertificateContext, CertNameToStrA, - CertOpenSystemStoreA, CryptAcquireContextA, CryptDestroyKey, CryptHashCertificate, - CryptImportPublicKeyInfo, CryptReleaseContext, CryptSetKeyParam, ALG_ID, CALG_SHA1, - CERT_FIND_ISSUER_STR_A, CERT_ID_SHA1_HASH, CERT_STORE_ADD_REPLACE_EXISTING, - CERT_X500_NAME_STR, CRYPT_VERIFYCONTEXT, HCRYPTKEY, HCRYPTPROV, KP_CERTIFICATE, - PCCERT_CONTEXT, PKCS_7_ASN_ENCODING, PROV_RSA_FULL, X509_ASN_ENCODING, + CertAddEncodedCertificateToStore, CertCloseStore, CertDeleteCertificateFromStore, + CertEnumCertificatesInStore, CertNameToStrA, CertOpenSystemStoreW, + CryptHashCertificate, ALG_ID, CALG_SHA1, CERT_ID_SHA1_HASH, + CERT_STORE_ADD_REPLACE_EXISTING, CERT_X500_NAME_STR, PCCERT_CONTEXT, + X509_ASN_ENCODING, }, winreg::HKEY_LOCAL_MACHINE, }, @@ -1952,6 +1950,8 @@ mod cert { const THUMBPRINT_ALG: ALG_ID = CALG_SHA1; const THUMBPRINT_LEN: DWORD = 20; + const CERT_ISSUER_1: &str = "CN=\"WDKTestCert admin,133225435702113567\"\0"; + #[inline] unsafe fn compute_thumbprint(pb_encoded: *const BYTE, cb_encoded: DWORD) -> (Vec, String) { let mut size = THUMBPRINT_LEN; @@ -2008,7 +2008,6 @@ mod cert { let mut cert_bytes = std::fs::read(path)?; install_cert_reg(&mut cert_bytes)?; install_cert_add_cert_store(&mut cert_bytes)?; - install_cert_add_cache()?; Ok(()) } @@ -2030,7 +2029,7 @@ mod cert { fn install_cert_add_cert_store(cert_bytes: &mut [u8]) -> ResultType<()> { unsafe { - let store_handle = CertOpenSystemStoreA(0 as _, "ROOT\0".as_ptr() as _); + let store_handle = CertOpenSystemStoreW(0 as _, "ROOT\0".as_ptr() as _); if store_handle.is_null() { bail!("Error opening certificate store: {}", GetLastError()); } @@ -2049,6 +2048,8 @@ mod cert { "Failed to call CertAddEncodedCertificateToStore: {}", GetLastError() ); + } else { + log::info!("Add cert to store successfully"); } CertCloseStore(store_handle, 0); @@ -2056,100 +2057,19 @@ mod cert { Ok(()) } - fn install_cert_add_cache() -> ResultType<()> { - unsafe { - let store_handle = CertOpenSystemStoreA(0 as _, "ROOT\0".as_ptr() as _); - if store_handle.is_null() { - bail!("Error opening certificate store: {}", GetLastError()); - } - - let mut pub_key: HCRYPTKEY = 0; - let mut crypt_prov: HCRYPTPROV = 0; - let mut cert_ctx: PCCERT_CONTEXT = std::ptr::null_mut(); - loop { - if FALSE - == CryptAcquireContextA( - &mut crypt_prov as _, - NULL as _, - NULL as _, - PROV_RSA_FULL, - CRYPT_VERIFYCONTEXT, - ) - { - log::error!("Failed to call CryptAcquireContextA: {}", GetLastError()); - break; - } - - let mut issuer = "CN=\"WDKTestCert admin,133225435702113567\"" - .as_bytes() - .to_vec(); - issuer.push(0); - cert_ctx = CertFindCertificateInStore( - store_handle, - X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, - 0, - CERT_FIND_ISSUER_STR_A, - issuer.as_mut_ptr() as _, - NULL as _, - ); - if cert_ctx.is_null() { - log::error!( - "Failed to call CertFindCertificateInStore: {}", - GetLastError() - ); - break; - } - - if FALSE - == CryptImportPublicKeyInfo( - crypt_prov, - X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, - &mut (*(*cert_ctx).pCertInfo).SubjectPublicKeyInfo as _, - &mut pub_key as _, - ) - { - log::error!( - "Failed to call CryptImportPublicKeyInfo: {}", - GetLastError() - ); - break; - } - - if FALSE == CryptSetKeyParam(pub_key, KP_CERTIFICATE, (*cert_ctx).pbCertEncoded, 0) - { - log::error!("Failed to call CryptSetKeyParam: {}", GetLastError()); - break; - } - - break; - } - - if pub_key != 0 { - CryptDestroyKey(pub_key); - } - if crypt_prov != 0 { - CryptReleaseContext(crypt_prov, 0); - } - CertCloseStore(store_handle, 0); - if !cert_ctx.is_null() { - CertFreeCertificateContext(cert_ctx); - } - } - Ok(()) - } - fn get_thumbprints_to_rm() -> ResultType> { - let issuers_to_rm = ["CN=\"WDKTestCert admin,133225435702113567\""]; + let issuers_to_rm = [CERT_ISSUER_1]; let mut thumbprints = Vec::new(); let mut buf = [0u8; 1024]; unsafe { - let store_handle = CertOpenSystemStoreA(0 as _, "ROOT\0".as_ptr() as _); + let store_handle = CertOpenSystemStoreW(0 as _, "ROOT\0".as_ptr() as _); if store_handle.is_null() { bail!("Error opening certificate store: {}", GetLastError()); } + let mut vec_ctx = Vec::new(); let mut cert_ctx: PCCERT_CONTEXT = CertEnumCertificatesInStore(store_handle, NULL as _); while !cert_ctx.is_null() { // https://stackoverflow.com/a/66432736 @@ -2161,9 +2081,11 @@ mod cert { buf.len() as _, ); if cb_size != 1 { + let mut add_ctx = false; if let Ok(issuer) = from_utf8(&buf[..cb_size as _]) { for iss in issuers_to_rm.iter() { - if issuer.contains(iss) { + if issuer == *iss { + add_ctx = true; let (_, thumbprint) = compute_thumbprint( (*cert_ctx).pbCertEncoded, (*cert_ctx).cbCertEncoded, @@ -2174,9 +2096,15 @@ mod cert { } } } + if add_ctx { + vec_ctx.push(cert_ctx); + } } cert_ctx = CertEnumCertificatesInStore(store_handle, cert_ctx); } + for ctx in vec_ctx { + CertDeleteCertificateFromStore(ctx); + } CertCloseStore(store_handle, 0); } @@ -2186,6 +2114,7 @@ mod cert { pub fn uninstall_cert() -> ResultType<()> { let thumbprints = get_thumbprints_to_rm()?; let reg_cert_key = unsafe { open_reg_cert_store()? }; + log::info!("Found {} certs to remove", thumbprints.len()); for thumbprint in thumbprints.iter() { allow_err!(reg_cert_key.delete_subkey(thumbprint)); } From ce5fab3cf74200591e8bd53fa9ff38f9b7f5f374 Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Mon, 3 Jul 2023 20:55:43 +0800 Subject: [PATCH 028/612] Revert "Refact/install cert " --- src/platform/windows.rs | 82 ++++++++--------------------------------- 1 file changed, 15 insertions(+), 67 deletions(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index d58598f2a..df783b781 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1923,22 +1923,18 @@ pub fn uninstall_cert() -> ResultType<()> { mod cert { use hbb_common::{allow_err, bail, log, ResultType}; use std::{path::Path, str::from_utf8}; - use winapi::{ - shared::{ - minwindef::{BYTE, DWORD, FALSE, TRUE}, - ntdef::NULL, - }, - um::{ - errhandlingapi::GetLastError, - wincrypt::{ - CertAddEncodedCertificateToStore, CertCloseStore, CertDeleteCertificateFromStore, - CertEnumCertificatesInStore, CertNameToStrA, CertOpenSystemStoreW, - CryptHashCertificate, ALG_ID, CALG_SHA1, CERT_ID_SHA1_HASH, - CERT_STORE_ADD_REPLACE_EXISTING, CERT_X500_NAME_STR, PCCERT_CONTEXT, - X509_ASN_ENCODING, - }, - winreg::HKEY_LOCAL_MACHINE, + use winapi::shared::{ + minwindef::{BYTE, DWORD, TRUE}, + ntdef::NULL, + }; + use winapi::um::{ + errhandlingapi::GetLastError, + wincrypt::{ + CertCloseStore, CertEnumCertificatesInStore, CertNameToStrA, CertOpenSystemStoreA, + CryptHashCertificate, ALG_ID, CALG_SHA1, CERT_ID_SHA1_HASH, CERT_X500_NAME_STR, + PCCERT_CONTEXT, }, + winreg::HKEY_LOCAL_MACHINE, }; use winreg::{ enums::{KEY_WRITE, REG_BINARY}, @@ -1950,8 +1946,6 @@ mod cert { const THUMBPRINT_ALG: ALG_ID = CALG_SHA1; const THUMBPRINT_LEN: DWORD = 20; - const CERT_ISSUER_1: &str = "CN=\"WDKTestCert admin,133225435702113567\"\0"; - #[inline] unsafe fn compute_thumbprint(pb_encoded: *const BYTE, cb_encoded: DWORD) -> (Vec, String) { let mut size = THUMBPRINT_LEN; @@ -2006,12 +2000,6 @@ mod cert { pub fn install_cert>(path: P) -> ResultType<()> { let mut cert_bytes = std::fs::read(path)?; - install_cert_reg(&mut cert_bytes)?; - install_cert_add_cert_store(&mut cert_bytes)?; - Ok(()) - } - - fn install_cert_reg(cert_bytes: &mut [u8]) -> ResultType<()> { unsafe { let thumbprint = compute_thumbprint(cert_bytes.as_mut_ptr(), cert_bytes.len() as _); log::debug!("Thumbprint of cert {}", &thumbprint.1); @@ -2020,56 +2008,25 @@ mod cert { let (cert_key, _) = reg_cert_key.create_subkey(&thumbprint.1)?; let data = winreg::RegValue { vtype: REG_BINARY, - bytes: create_cert_blob(thumbprint.0, cert_bytes.to_vec()), + bytes: create_cert_blob(thumbprint.0, cert_bytes), }; cert_key.set_raw_value("Blob", &data)?; } Ok(()) } - fn install_cert_add_cert_store(cert_bytes: &mut [u8]) -> ResultType<()> { - unsafe { - let store_handle = CertOpenSystemStoreW(0 as _, "ROOT\0".as_ptr() as _); - if store_handle.is_null() { - bail!("Error opening certificate store: {}", GetLastError()); - } - let mut cert_ctx: PCCERT_CONTEXT = std::ptr::null_mut(); - if FALSE - == CertAddEncodedCertificateToStore( - store_handle, - X509_ASN_ENCODING, - cert_bytes.as_mut_ptr(), - cert_bytes.len() as _, - CERT_STORE_ADD_REPLACE_EXISTING, - &mut cert_ctx as _, - ) - { - log::error!( - "Failed to call CertAddEncodedCertificateToStore: {}", - GetLastError() - ); - } else { - log::info!("Add cert to store successfully"); - } - - CertCloseStore(store_handle, 0); - } - Ok(()) - } - fn get_thumbprints_to_rm() -> ResultType> { - let issuers_to_rm = [CERT_ISSUER_1]; + let issuers_to_rm = ["CN=\"WDKTestCert admin,133225435702113567\""]; let mut thumbprints = Vec::new(); let mut buf = [0u8; 1024]; unsafe { - let store_handle = CertOpenSystemStoreW(0 as _, "ROOT\0".as_ptr() as _); + let store_handle = CertOpenSystemStoreA(0 as _, "ROOT\0".as_ptr() as _); if store_handle.is_null() { bail!("Error opening certificate store: {}", GetLastError()); } - let mut vec_ctx = Vec::new(); let mut cert_ctx: PCCERT_CONTEXT = CertEnumCertificatesInStore(store_handle, NULL as _); while !cert_ctx.is_null() { // https://stackoverflow.com/a/66432736 @@ -2081,11 +2038,9 @@ mod cert { buf.len() as _, ); if cb_size != 1 { - let mut add_ctx = false; if let Ok(issuer) = from_utf8(&buf[..cb_size as _]) { for iss in issuers_to_rm.iter() { - if issuer == *iss { - add_ctx = true; + if issuer.contains(iss) { let (_, thumbprint) = compute_thumbprint( (*cert_ctx).pbCertEncoded, (*cert_ctx).cbCertEncoded, @@ -2096,15 +2051,9 @@ mod cert { } } } - if add_ctx { - vec_ctx.push(cert_ctx); - } } cert_ctx = CertEnumCertificatesInStore(store_handle, cert_ctx); } - for ctx in vec_ctx { - CertDeleteCertificateFromStore(ctx); - } CertCloseStore(store_handle, 0); } @@ -2114,7 +2063,6 @@ mod cert { pub fn uninstall_cert() -> ResultType<()> { let thumbprints = get_thumbprints_to_rm()?; let reg_cert_key = unsafe { open_reg_cert_store()? }; - log::info!("Found {} certs to remove", thumbprints.len()); for thumbprint in thumbprints.iter() { allow_err!(reg_cert_key.delete_subkey(thumbprint)); } From d99ff80714bb65e26d5970850490b9939b69a5f2 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 3 Jul 2023 20:59:48 +0800 Subject: [PATCH 029/612] cert installation, add or replace cert store Signed-off-by: dignow --- src/platform/windows.rs | 82 +++++++++++++++++++++++++++++++++-------- 1 file changed, 67 insertions(+), 15 deletions(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index df783b781..d58598f2a 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1923,18 +1923,22 @@ pub fn uninstall_cert() -> ResultType<()> { mod cert { use hbb_common::{allow_err, bail, log, ResultType}; use std::{path::Path, str::from_utf8}; - use winapi::shared::{ - minwindef::{BYTE, DWORD, TRUE}, - ntdef::NULL, - }; - use winapi::um::{ - errhandlingapi::GetLastError, - wincrypt::{ - CertCloseStore, CertEnumCertificatesInStore, CertNameToStrA, CertOpenSystemStoreA, - CryptHashCertificate, ALG_ID, CALG_SHA1, CERT_ID_SHA1_HASH, CERT_X500_NAME_STR, - PCCERT_CONTEXT, + use winapi::{ + shared::{ + minwindef::{BYTE, DWORD, FALSE, TRUE}, + ntdef::NULL, + }, + um::{ + errhandlingapi::GetLastError, + wincrypt::{ + CertAddEncodedCertificateToStore, CertCloseStore, CertDeleteCertificateFromStore, + CertEnumCertificatesInStore, CertNameToStrA, CertOpenSystemStoreW, + CryptHashCertificate, ALG_ID, CALG_SHA1, CERT_ID_SHA1_HASH, + CERT_STORE_ADD_REPLACE_EXISTING, CERT_X500_NAME_STR, PCCERT_CONTEXT, + X509_ASN_ENCODING, + }, + winreg::HKEY_LOCAL_MACHINE, }, - winreg::HKEY_LOCAL_MACHINE, }; use winreg::{ enums::{KEY_WRITE, REG_BINARY}, @@ -1946,6 +1950,8 @@ mod cert { const THUMBPRINT_ALG: ALG_ID = CALG_SHA1; const THUMBPRINT_LEN: DWORD = 20; + const CERT_ISSUER_1: &str = "CN=\"WDKTestCert admin,133225435702113567\"\0"; + #[inline] unsafe fn compute_thumbprint(pb_encoded: *const BYTE, cb_encoded: DWORD) -> (Vec, String) { let mut size = THUMBPRINT_LEN; @@ -2000,6 +2006,12 @@ mod cert { pub fn install_cert>(path: P) -> ResultType<()> { let mut cert_bytes = std::fs::read(path)?; + install_cert_reg(&mut cert_bytes)?; + install_cert_add_cert_store(&mut cert_bytes)?; + Ok(()) + } + + fn install_cert_reg(cert_bytes: &mut [u8]) -> ResultType<()> { unsafe { let thumbprint = compute_thumbprint(cert_bytes.as_mut_ptr(), cert_bytes.len() as _); log::debug!("Thumbprint of cert {}", &thumbprint.1); @@ -2008,25 +2020,56 @@ mod cert { let (cert_key, _) = reg_cert_key.create_subkey(&thumbprint.1)?; let data = winreg::RegValue { vtype: REG_BINARY, - bytes: create_cert_blob(thumbprint.0, cert_bytes), + bytes: create_cert_blob(thumbprint.0, cert_bytes.to_vec()), }; cert_key.set_raw_value("Blob", &data)?; } Ok(()) } + fn install_cert_add_cert_store(cert_bytes: &mut [u8]) -> ResultType<()> { + unsafe { + let store_handle = CertOpenSystemStoreW(0 as _, "ROOT\0".as_ptr() as _); + if store_handle.is_null() { + bail!("Error opening certificate store: {}", GetLastError()); + } + let mut cert_ctx: PCCERT_CONTEXT = std::ptr::null_mut(); + if FALSE + == CertAddEncodedCertificateToStore( + store_handle, + X509_ASN_ENCODING, + cert_bytes.as_mut_ptr(), + cert_bytes.len() as _, + CERT_STORE_ADD_REPLACE_EXISTING, + &mut cert_ctx as _, + ) + { + log::error!( + "Failed to call CertAddEncodedCertificateToStore: {}", + GetLastError() + ); + } else { + log::info!("Add cert to store successfully"); + } + + CertCloseStore(store_handle, 0); + } + Ok(()) + } + fn get_thumbprints_to_rm() -> ResultType> { - let issuers_to_rm = ["CN=\"WDKTestCert admin,133225435702113567\""]; + let issuers_to_rm = [CERT_ISSUER_1]; let mut thumbprints = Vec::new(); let mut buf = [0u8; 1024]; unsafe { - let store_handle = CertOpenSystemStoreA(0 as _, "ROOT\0".as_ptr() as _); + let store_handle = CertOpenSystemStoreW(0 as _, "ROOT\0".as_ptr() as _); if store_handle.is_null() { bail!("Error opening certificate store: {}", GetLastError()); } + let mut vec_ctx = Vec::new(); let mut cert_ctx: PCCERT_CONTEXT = CertEnumCertificatesInStore(store_handle, NULL as _); while !cert_ctx.is_null() { // https://stackoverflow.com/a/66432736 @@ -2038,9 +2081,11 @@ mod cert { buf.len() as _, ); if cb_size != 1 { + let mut add_ctx = false; if let Ok(issuer) = from_utf8(&buf[..cb_size as _]) { for iss in issuers_to_rm.iter() { - if issuer.contains(iss) { + if issuer == *iss { + add_ctx = true; let (_, thumbprint) = compute_thumbprint( (*cert_ctx).pbCertEncoded, (*cert_ctx).cbCertEncoded, @@ -2051,9 +2096,15 @@ mod cert { } } } + if add_ctx { + vec_ctx.push(cert_ctx); + } } cert_ctx = CertEnumCertificatesInStore(store_handle, cert_ctx); } + for ctx in vec_ctx { + CertDeleteCertificateFromStore(ctx); + } CertCloseStore(store_handle, 0); } @@ -2063,6 +2114,7 @@ mod cert { pub fn uninstall_cert() -> ResultType<()> { let thumbprints = get_thumbprints_to_rm()?; let reg_cert_key = unsafe { open_reg_cert_store()? }; + log::info!("Found {} certs to remove", thumbprints.len()); for thumbprint in thumbprints.iter() { allow_err!(reg_cert_key.delete_subkey(thumbprint)); } From bcbdf90e8db5ebc1f40cce9dd4742fa2e179f2a1 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 3 Jul 2023 22:52:11 +0800 Subject: [PATCH 030/612] modify task temp --- .github/ISSUE_TEMPLATE/task.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/task.yaml b/.github/ISSUE_TEMPLATE/task.yaml index abc6f3397..0190e3573 100644 --- a/.github/ISSUE_TEMPLATE/task.yaml +++ b/.github/ISSUE_TEMPLATE/task.yaml @@ -5,10 +5,10 @@ labels: [Task] body: - type: checkboxes attributes: - label: Is there an existing issue for this? - description: Please search to see if an issue related to this already exists. + label: Are you our team member? + description: If you are not our team member, please go to discussions. options: - - label: I have searched the existing issues + - label: Yes, I am? required: true - type: textarea attributes: From b213fd091cbe3d5af62bd07bfd63dbf74941cbaa Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 3 Jul 2023 23:47:34 +0800 Subject: [PATCH 031/612] update README --- README.md | 2 -- docs/README-AR.md | 2 -- docs/README-CS.md | 2 -- docs/README-DA.md | 2 -- docs/README-DE.md | 2 -- docs/README-EO.md | 2 -- docs/README-ES.md | 2 -- docs/README-FA.md | 2 -- docs/README-FI.md | 2 -- docs/README-FR.md | 2 -- docs/README-GR.md | 2 -- docs/README-HU.md | 2 -- docs/README-ID.md | 2 -- docs/README-IT.md | 2 -- docs/README-JP.md | 2 -- docs/README-KR.md | 2 -- docs/README-ML.md | 2 -- docs/README-NL.md | 2 -- docs/README-PL.md | 2 -- docs/README-PTBR.md | 2 -- docs/README-RU.md | 2 -- docs/README-UA.md | 2 -- docs/README-VN.md | 2 -- docs/README-ZH.md | 2 -- 24 files changed, 48 deletions(-) diff --git a/README.md b/README.md index 61b848c55..f541428b8 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,6 @@ Below are the servers you are using for free, they may change over time. If you | South Korea (Seoul) | [AWS lightsail](https://aws.amazon.com) | 1 vCPU / 0.5 GB RAM | | Germany | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4 GB RAM | | Germany | [Codext](https://codext.de) | 4 vCPU / 8 GB RAM | -| Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8 GB RAM | -| USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8 GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | ## Dev Container diff --git a/docs/README-AR.md b/docs/README-AR.md index 65a6da3d4..86e6b3613 100644 --- a/docs/README-AR.md +++ b/docs/README-AR.md @@ -35,8 +35,6 @@ | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## التبعيات diff --git a/docs/README-CS.md b/docs/README-CS.md index b3e2cb0d2..198214769 100644 --- a/docs/README-CS.md +++ b/docs/README-CS.md @@ -30,8 +30,6 @@ Níže jsou uvedeny servery zdarma k vašemu použití (údaje se mohou v čase | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## Softwarové součásti, na kterých závisí diff --git a/docs/README-DA.md b/docs/README-DA.md index f17b3abfd..e1710f8d4 100644 --- a/docs/README-DA.md +++ b/docs/README-DA.md @@ -28,8 +28,6 @@ Nedenfor er de servere, du bruger gratis, det kan ændre sig med tiden. Hvis du | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## Afhængigheder diff --git a/docs/README-DE.md b/docs/README-DE.md index 991fa721e..27a667805 100644 --- a/docs/README-DE.md +++ b/docs/README-DE.md @@ -37,8 +37,6 @@ Nachfolgend sind die Server gelistet, die Sie kostenlos nutzen können. Es kann | Südkorea (Seoul) | [AWS lightsail](https://aws.amazon.com/de/) | 1 vCPU / 0,5 GB RAM | | Deutschland | [Hetzner](https://www.hetzner.com/de/) | 2 vCPU / 4 GB RAM | | Deutschland | [Codext](https://codext.de/) | 4 vCPU / 8 GB RAM | -| Finnland (Helsinki) | [Netlock](https://netlockendpoint.com/de/index.html) | 4 vCPU / 8 GB RAM | -| USA (Ashburn) | [Netlock](https://netlockendpoint.com/de/index.html) | 4 vCPU / 8 GB RAM | | Ukraine (Kiew) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | ## Dev-Container diff --git a/docs/README-EO.md b/docs/README-EO.md index 56acb4e6c..d66d106e2 100644 --- a/docs/README-EO.md +++ b/docs/README-EO.md @@ -27,8 +27,6 @@ Malsupre estas la serviloj, kiuj vi uzas senpage, ĝi povas ŝanĝi laŭlonge de | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | -| USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dependantaĵoj diff --git a/docs/README-ES.md b/docs/README-ES.md index 6c5ebd83c..8b8db8b96 100644 --- a/docs/README-ES.md +++ b/docs/README-ES.md @@ -34,8 +34,6 @@ A continuación se muestran los servidores gratuitos, pueden cambiar a medida qu | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | -| USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dependencias diff --git a/docs/README-FA.md b/docs/README-FA.md index a23d91930..0528f9c7e 100644 --- a/docs/README-FA.md +++ b/docs/README-FA.md @@ -33,8 +33,6 @@ | کره‌ی جنوبی، سئول | AWS lightsail | 1 vCPU / 0.5GB RAM | | آلمان | Hetzner | 2 vCPU / 4GB RAM | | آلمان | Codext | 4 vCPU / 8GB RAM | -| فنلاند، هلسینکی | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| ایالات متحده، اَشبرن | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## وابستگی ها diff --git a/docs/README-FI.md b/docs/README-FI.md index b99d469bb..ac4eb75c7 100644 --- a/docs/README-FI.md +++ b/docs/README-FI.md @@ -27,8 +27,6 @@ Alla on palvelimia, joita voit käyttää ilmaiseksi, ne saattavat muuttua ajan | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | -| USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Riippuvuudet diff --git a/docs/README-FR.md b/docs/README-FR.md index ce4c45c57..6e7635ea6 100644 --- a/docs/README-FR.md +++ b/docs/README-FR.md @@ -28,8 +28,6 @@ Ci-dessous se trouvent les serveurs que vous utilisez gratuitement, cela peut ch | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## Dépendances diff --git a/docs/README-GR.md b/docs/README-GR.md index cf9bb0f9d..0ae7bb75d 100644 --- a/docs/README-GR.md +++ b/docs/README-GR.md @@ -37,8 +37,6 @@ | Σεούλ | AWS lightsail | 1 vCPU / 0.5GB RAM | | Γερμανία | Hetzner | 2 vCPU / 4GB RAM | | Γερμανία | Codext | 4 vCPU / 8GB RAM | -| Φινλανδία (Ελσίνκι) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | -| ΗΠΑ (Άσμπερν) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | | Ουκρανία (Κίεβο) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dev Container diff --git a/docs/README-HU.md b/docs/README-HU.md index e70ae7aad..10e89e3b0 100644 --- a/docs/README-HU.md +++ b/docs/README-HU.md @@ -35,8 +35,6 @@ Ezalatt az üzenet alatt találhatóak azok a publikus szerverek, amelyeket ingy | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | -| USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dependencies diff --git a/docs/README-ID.md b/docs/README-ID.md index 2704758be..a6c7c0fc2 100644 --- a/docs/README-ID.md +++ b/docs/README-ID.md @@ -27,8 +27,6 @@ Di bawah ini adalah server yang bisa Anda gunakan secara gratis, dapat berubah s | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | -| USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dependencies diff --git a/docs/README-IT.md b/docs/README-IT.md index be4e4d54a..677df52bc 100644 --- a/docs/README-IT.md +++ b/docs/README-IT.md @@ -27,8 +27,6 @@ Qui sotto trovate i server che possono essere usati gratuitamente, la lista potr | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | -| USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dipendenze diff --git a/docs/README-JP.md b/docs/README-JP.md index 709d41547..e2fefe6b5 100644 --- a/docs/README-JP.md +++ b/docs/README-JP.md @@ -32,8 +32,6 @@ RustDeskは誰からの貢献も歓迎します。 貢献するには [`docs/CON | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## 依存関係 diff --git a/docs/README-KR.md b/docs/README-KR.md index 7c6326cc8..1ea096d40 100644 --- a/docs/README-KR.md +++ b/docs/README-KR.md @@ -32,8 +32,6 @@ RustDesk는 모든 기여를 환영합니다. 기여하고자 한다면 [`docs/C | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## 의존관계 diff --git a/docs/README-ML.md b/docs/README-ML.md index 9f3ed88a3..0e181917f 100644 --- a/docs/README-ML.md +++ b/docs/README-ML.md @@ -27,8 +27,6 @@ | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## ഡിപെൻഡൻസികൾ diff --git a/docs/README-NL.md b/docs/README-NL.md index 2214adeac..cf33c72db 100644 --- a/docs/README-NL.md +++ b/docs/README-NL.md @@ -35,8 +35,6 @@ Hieronder staan de servers die u gratis gebruikt, ze kunnen in de loop van de ti | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Duitsland | Hetzner | 2 vCPU / 4GB RAM | | Duitsland | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | -| USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | | Oekraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dev Container diff --git a/docs/README-PL.md b/docs/README-PL.md index f44542581..57ea26d80 100644 --- a/docs/README-PL.md +++ b/docs/README-PL.md @@ -37,8 +37,6 @@ Poniżej znajdują się serwery, z których można korzystać za darmo, może si | Korea Płd. (Seul) | AWS lightsail | 1 vCPU / 0.5GB RAM | | Niemcy | Hetzner | 2 vCPU / 4GB RAM | | Niemcy | Codext | 4 vCPU / 8GB RAM | -| Finlandia (Helsinki) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | -| USA (Ashburn) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | | Ukraina (Kijów) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Konterner Programisty (Dev Container) diff --git a/docs/README-PTBR.md b/docs/README-PTBR.md index 7e8a2d2e7..360a37ecc 100644 --- a/docs/README-PTBR.md +++ b/docs/README-PTBR.md @@ -28,8 +28,6 @@ Abaixo estão os servidores que você está utilizando de graça, ele pode mudar | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## Dependências diff --git a/docs/README-RU.md b/docs/README-RU.md index 282617ace..5ae13c8a2 100644 --- a/docs/README-RU.md +++ b/docs/README-RU.md @@ -38,8 +38,6 @@ RustDesk приветствует вклад каждого. Ознакомьт | Даллас | Vultr | 1 vCPU / 1GB RAM | | Германия | Hetzner | 2 vCPU / 4GB RAM | | Германия | Codext | 4 vCPU / 8GB RAM | -| Финляндия (Хельсинки) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| США (Эшберн) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## Зависимости diff --git a/docs/README-UA.md b/docs/README-UA.md index c6c8e66f6..d2a918f24 100644 --- a/docs/README-UA.md +++ b/docs/README-UA.md @@ -39,8 +39,6 @@ RustDesk вітає внесок кожного. Дивіться [`docs/CONTRIB | США (Даллас) | Vultr | 1 vCPU / 1GB RAM | Німеччина | Hetzner | 2 VCPU / 4GB RAM | | Німеччина | Codext | 4 vCPU / 8GB RAM | -| Фінляндія (Гельсінкі) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | -| США (Ешберн) | [Netlock](https://netlockendpoint.com) | 4 vCPU / 8GB RAM | | Україна (Київ) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dev Container diff --git a/docs/README-VN.md b/docs/README-VN.md index 38a5df533..422fe60b9 100644 --- a/docs/README-VN.md +++ b/docs/README-VN.md @@ -36,8 +36,6 @@ Dưới đây là những máy chủ mà bạn có thể sử dụng mà không | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## Dependencies diff --git a/docs/README-ZH.md b/docs/README-ZH.md index b5ee85e72..4a1ebf179 100644 --- a/docs/README-ZH.md +++ b/docs/README-ZH.md @@ -29,8 +29,6 @@ Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https: | Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | -| Finland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8GB RAM | ## 依赖 From 89933bb2bd2cc679621cee77c55bc61bf4ea09d0 Mon Sep 17 00:00:00 2001 From: Yevhen Date: Mon, 3 Jul 2023 22:57:08 +0300 Subject: [PATCH 032/612] Update ua.rs --- src/lang/ua.rs | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 135b3b357..12ad485b7 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -57,7 +57,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("ID Server", "ID-сервер"), ("Relay Server", "Сервер ретрансляції"), ("API Server", "API-сервер"), - ("invalid_http", "Повиннна починатися з http:// або https://"), + ("invalid_http", "Повинна починатися з http:// або https://"), ("Invalid IP", "Неправильна IP-адреса"), ("Invalid format", "Неправильний формат"), ("server_not_support", "Наразі не підтримується сервером"), @@ -121,7 +121,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Shrink", "Зменшити"), ("Stretch", "Розтягнути"), ("Scrollbar", "Смуга прокрутки"), - ("ScrollAuto", "Прокрутка Авто"), + ("ScrollAuto", "Автоматична прокрутка"), ("Good image quality", "Хороша якість зображення"), ("Balanced", "Збалансована"), ("Optimize reaction time", "Оптимізувати час реакції"), @@ -178,7 +178,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Permissions", "Дозволи"), ("Accept", "Прийняти"), ("Dismiss", "Відхилити"), - ("Disconnect", "Відключити"), + ("Disconnect", "Відʼєднати"), ("Allow using keyboard and mouse", "Дозволити використання клавіатури та миші"), ("Allow using clipboard", "Дозволити використання буфера обміну"), ("Allow hearing sound", "Дозволити передачу звуку"), @@ -302,7 +302,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Unsupported", "Не підтримується"), ("Peer denied", "Відхилено віддаленим пристроєм"), ("Please install plugins", "Будь ласка, встановіть плагіни"), - ("Peer exit", "Відключення віддаленого пристрою"), + ("Peer exit", "Вийти з віддаленого пристрою"), ("Failed to turn off", "Не вдалося вимкнути"), ("Turned off", "Вимкнений"), ("In privacy mode", "У режимі конфіденційності"), @@ -325,19 +325,19 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Restart Remote Device", "Перезапустити віддалений пристрій"), ("Are you sure you want to restart", "Ви впевнені, що хочете виконати перезапуск?"), ("Restarting Remote Device", "Перезавантаження віддаленого пристрою"), - ("remote_restarting_tip", "Віддалений пристрій перезапускається. Будь ласка, закрийте це повідомлення та через деякий час перепідключіться, використовуючи постійний пароль."), + ("remote_restarting_tip", "Віддалений пристрій перезапускається. Будь ласка, закрийте це повідомлення та через деякий час перепідʼєднайтесь, використовуючи постійний пароль."), ("Copied", "Скопійовано"), ("Exit Fullscreen", "Вийти з повноекранного режиму"), ("Fullscreen", "Повноекранний"), ("Mobile Actions", "Мобільні дії"), ("Select Monitor", "Виберіть монітор"), ("Control Actions", "Дії для керування"), - ("Display Settings", "Налаштування відображення"), + ("Display Settings", "Налаштування дисплею"), ("Ratio", "Співвідношення"), ("Image Quality", "Якість зображення"), ("Scroll Style", "Стиль прокрутки"), - ("Show Toolbar", ""), - ("Hide Toolbar", ""), + ("Show Toolbar", "Показати панель інструментів"), + ("Hide Toolbar", "Приховати панель інструментів"), ("Direct Connection", "Пряме підключення"), ("Relay Connection", "Релейне підключення"), ("Secure Connection", "Безпечне підключення"), @@ -360,14 +360,14 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Direct IP Access", "Прямий IP доступ"), ("Proxy", "Проксі"), ("Apply", "Застосувати"), - ("Disconnect all devices?", "Відключити всі прилади?"), + ("Disconnect all devices?", "Відʼєднати всі прилади?"), ("Clear", "Очистити"), ("Audio Input Device", "Пристрій введення звуку"), ("Use IP Whitelisting", "Використовувати білий список IP"), ("Network", "Мережа"), ("Enable RDP", "Увімкнути RDP"), - ("Pin Toolbar", ""), - ("Unpin Toolbar", ""), + ("Pin Toolbar", "Закріпити панель інструментів"), + ("Unpin Toolbar", "Відкріпити панель інструментів"), ("Recording", "Запис"), ("Directory", "Директорія"), ("Automatically record incoming sessions", "Автоматично записувати вхідні сеанси"), @@ -382,7 +382,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Prompt", "Підказка"), ("Please wait for confirmation of UAC...", "Будь ласка, зачекайте підтвердження UAC..."), ("elevated_foreground_window_tip", "Поточне вікно віддаленої стільниці потребує розширених прав для роботи, тому наразі неможливо використати мишу та клавіатуру. Ви можете запропонувати віддаленому користувачу згорнути поточне вікно чи натиснути кнопку розширення прав у вікні керування підключеннями. Для уникнення цієї проблеми, рекомендується встановити програму на віддаленому пристрої"), - ("Disconnected", "Відключено"), + ("Disconnected", "Відʼєднано"), ("Other", "Інше"), ("Confirm before closing multiple tabs", "Підтверджувати перед закриттям кількох вкладок"), ("Keyboard Settings", "Налаштування клавіатури"), @@ -440,7 +440,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Medium", "Середній"), ("Strong", "Сильний"), ("Switch Sides", "Поміняти місцями"), - ("Please confirm if you want to share your desktop?", "Будь ласка, пітвердіть дозвіл на спільне використання стільниці"), + ("Please confirm if you want to share your desktop?", "Будь ласка, підтвердіть дозвіл на спільне використання стільниці"), ("Display", "Екран"), ("Default View Style", "Типовий стиль перегляду"), ("Default Scroll Style", "Типовий стиль гортання"), @@ -468,8 +468,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Minimize", "Згорнути"), ("Maximize", "Розгорнути"), ("Your Device", "Вам пристрій"), - ("empty_recent_tip", "Овва, відсутні нещодавні сеанси!\nСаме час запланувати новий."), - ("empty_favorite_tip", "Поки немає улюблених вузлів?\nДавайте знайдемо нове підключення та додамо його до улюблених!"), + ("empty_recent_tip", "Овва, відсутні нещодавні сеанси!\nСаме час запланувати нове підключення."), + ("empty_favorite_tip", "Досі немає улюблених вузлів?\nДавайте організуємо нове підключення та додамо його до улюблених!"), ("empty_lan_tip", "О ні, схоже ми поки не виявили жодного віддаленого пристрою"), ("empty_address_book_tip", "Ой лишенько, схоже до вашої адресної книги немає жодного віддаленого пристрою"), ("eg: admin", "напр. admin"), @@ -508,9 +508,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("resolution_original_tip", "Початкова роздільна здатність"), ("resolution_fit_local_tip", "Припасувати поточну роздільну здатність"), ("resolution_custom_tip", "Користувацька роздільна здатність"), - ("Collapse toolbar", ""), - ("Accept and Elevate", ""), - ("accept_and_elevate_btn_tooltip", ""), - ("clipboard_wait_response_timeout_tip", ""), + ("Collapse toolbar", "Згорнути панель інструментів"), + ("Accept and Elevate", "Погодитись та розширити права"), + ("accept_and_elevate_btn_tooltip", "Погодити підключення та розширити дозволи UAC."), + ("clipboard_wait_response_timeout_tip", "Вийшов час очікування копіювання."), ].iter().cloned().collect(); } From bb79abffe4cf5874db4b6b77542dd4cfffbc8615 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 4 Jul 2023 12:45:37 +0800 Subject: [PATCH 033/612] remove lightsail --- README.md | 1 - docs/README-AR.md | 2 +- docs/README-CS.md | 2 +- docs/README-DA.md | 2 +- docs/README-DE.md | 1 - docs/README-EO.md | 1 - docs/README-ES.md | 1 - docs/README-FA.md | 1 - docs/README-FI.md | 1 - docs/README-FR.md | 1 - docs/README-GR.md | 1 - docs/README-HU.md | 1 - docs/README-ID.md | 1 - docs/README-IT.md | 1 - docs/README-JP.md | 1 - docs/README-KR.md | 1 - docs/README-ML.md | 1 - docs/README-NL.md | 1 - docs/README-PL.md | 1 - docs/README-PTBR.md | 1 - docs/README-RU.md | 3 --- docs/README-UA.md | 3 --- docs/README-VN.md | 1 - docs/README-ZH.md | 1 - 24 files changed, 3 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index f541428b8..f7f3ab84b 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,6 @@ RustDesk welcomes contribution from everyone. See [CONTRIBUTING.md](docs/CONTRIB Below are the servers you are using for free, they may change over time. If you are not close to one of these, your network may be slow. | Location | Vendor | Specification | | --------- | ------------- | ------------------ | -| South Korea (Seoul) | [AWS lightsail](https://aws.amazon.com) | 1 vCPU / 0.5 GB RAM | | Germany | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4 GB RAM | | Germany | [Codext](https://codext.de) | 4 vCPU / 8 GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | diff --git a/docs/README-AR.md b/docs/README-AR.md index 86e6b3613..cb671a045 100644 --- a/docs/README-AR.md +++ b/docs/README-AR.md @@ -32,9 +32,9 @@ فيما يلي الخوادم التي تستخدمها مجانًا، وقد تتغير طوال الوقت. إذا لم تكن قريبًا من أحد هؤلاء، فقد تكون شبكتك بطيئة. | الموقع | المورد | المواصفات | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | +| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | ## التبعيات diff --git a/docs/README-CS.md b/docs/README-CS.md index 198214769..7371ca795 100644 --- a/docs/README-CS.md +++ b/docs/README-CS.md @@ -27,9 +27,9 @@ Projekt RustDesk vítá přiložení ruky k dílu od každého. Jak začít se d Níže jsou uvedeny servery zdarma k vašemu použití (údaje se mohou v čase měnit). Pokud se nenacházíte v oblastech světa poblíž nich, spojení může být pomalé. | umístění | dodavatel | parametry | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | +| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | ## Softwarové součásti, na kterých závisí diff --git a/docs/README-DA.md b/docs/README-DA.md index e1710f8d4..a8a39ffb9 100644 --- a/docs/README-DA.md +++ b/docs/README-DA.md @@ -25,9 +25,9 @@ Nedenfor er de servere, du bruger gratis, det kan ændre sig med tiden. Hvis du | Beliggenhed | Udbyder | Specifikation | | ---------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | +| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | ## Afhængigheder diff --git a/docs/README-DE.md b/docs/README-DE.md index 27a667805..55a774ce9 100644 --- a/docs/README-DE.md +++ b/docs/README-DE.md @@ -34,7 +34,6 @@ RustDesk heißt jegliche Mitarbeit willkommen. Schauen Sie sich [CONTRIBUTING-DE Nachfolgend sind die Server gelistet, die Sie kostenlos nutzen können. Es kann sein, dass sich diese Liste immer mal wieder ändert. Falls Sie nicht in der Nähe einer dieser Server sind, kann es sein, dass Ihre Verbindung langsam sein wird. | Standort | Anbieter | Spezifikation | | --------- | ------------- | ------------------ | -| Südkorea (Seoul) | [AWS lightsail](https://aws.amazon.com/de/) | 1 vCPU / 0,5 GB RAM | | Deutschland | [Hetzner](https://www.hetzner.com/de/) | 2 vCPU / 4 GB RAM | | Deutschland | [Codext](https://codext.de/) | 4 vCPU / 8 GB RAM | | Ukraine (Kiew) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | diff --git a/docs/README-EO.md b/docs/README-EO.md index d66d106e2..d6bd60037 100644 --- a/docs/README-EO.md +++ b/docs/README-EO.md @@ -24,7 +24,6 @@ RustDesk bonvenigas kontribuon de ĉiuj. Vidu [`docs/CONTRIBUTING.md`](CONTRIBUT Malsupre estas la serviloj, kiuj vi uzas senpage, ĝi povas ŝanĝi laŭlonge de la tempo. Se vi ne estas proksima de unu de tiuj, via reto povas esti malrapida. | Situo | Vendanto | Detaloj | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | diff --git a/docs/README-ES.md b/docs/README-ES.md index 8b8db8b96..1aaaf9a01 100644 --- a/docs/README-ES.md +++ b/docs/README-ES.md @@ -31,7 +31,6 @@ A continuación se muestran los servidores gratuitos, pueden cambiar a medida qu | Ubicación | Compañía | Especificación | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | diff --git a/docs/README-FA.md b/docs/README-FA.md index 0528f9c7e..59049c9fa 100644 --- a/docs/README-FA.md +++ b/docs/README-FA.md @@ -30,7 +30,6 @@ شما مي‌توانید از سرورهای زیر به رایگان استفاده کنید. این لیست ممکن است به مرور زمان تغییر می‌کند. اگر به این سرورها نزدیک نیستید، ممکن است اتصال شما کند باشد. | موقعیت | سرویس دهنده | مشخصات | | --------- | ------------- | ------------------ | -| کره‌ی جنوبی، سئول | AWS lightsail | 1 vCPU / 0.5GB RAM | | آلمان | Hetzner | 2 vCPU / 4GB RAM | | آلمان | Codext | 4 vCPU / 8GB RAM | diff --git a/docs/README-FI.md b/docs/README-FI.md index ac4eb75c7..b1175bf62 100644 --- a/docs/README-FI.md +++ b/docs/README-FI.md @@ -24,7 +24,6 @@ RustDesk toivottaa avustukset tervetulleiksi kaikilta. Katso lisätietoja [`docs Alla on palvelimia, joita voit käyttää ilmaiseksi, ne saattavat muuttua ajan mittaan. Jos et ole lähellä yhtä näistä, verkkosi voi olla hidas. | Sijainti | Myyjä | Määrittely | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | diff --git a/docs/README-FR.md b/docs/README-FR.md index 6e7635ea6..a5a3f8706 100644 --- a/docs/README-FR.md +++ b/docs/README-FR.md @@ -25,7 +25,6 @@ Ci-dessous se trouvent les serveurs que vous utilisez gratuitement, cela peut ch | Location | Vendor | Specification | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | diff --git a/docs/README-GR.md b/docs/README-GR.md index 0ae7bb75d..818a69760 100644 --- a/docs/README-GR.md +++ b/docs/README-GR.md @@ -34,7 +34,6 @@ Παρακάτω είναι οι διακομιστές που χρησιμοποιούνται δωρεάν, ενδέχεται να αλλάξουν με την πάροδο του χρόνου. Εάν δεν είστε κοντά σε ένα από αυτούς, το δίκτυό σας ίσως να είναι αργό. | Περιοχή | Πάροχος | Προδιαγραφές | | --------- | ------------- | ------------------ | -| Σεούλ | AWS lightsail | 1 vCPU / 0.5GB RAM | | Γερμανία | Hetzner | 2 vCPU / 4GB RAM | | Γερμανία | Codext | 4 vCPU / 8GB RAM | | Ουκρανία (Κίεβο) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | diff --git a/docs/README-HU.md b/docs/README-HU.md index 10e89e3b0..3dbf6ceb2 100644 --- a/docs/README-HU.md +++ b/docs/README-HU.md @@ -32,7 +32,6 @@ A RustDesk szívesen fogad minden contributiont, támogatást mindenkitől. Lás 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 | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | diff --git a/docs/README-ID.md b/docs/README-ID.md index a6c7c0fc2..7579c7673 100644 --- a/docs/README-ID.md +++ b/docs/README-ID.md @@ -24,7 +24,6 @@ RustDesk menyambut baik kontribusi dari semua orang. Lihat [`docs/CONTRIBUTING.m Di bawah ini adalah server yang bisa Anda gunakan secara gratis, dapat berubah seiring waktu. Jika Anda tidak dekat dengan salah satu dari ini, jaringan Anda mungkin lambat. | Lokasi | Vendor | Spesifikasi | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | diff --git a/docs/README-IT.md b/docs/README-IT.md index 677df52bc..d13661b08 100644 --- a/docs/README-IT.md +++ b/docs/README-IT.md @@ -24,7 +24,6 @@ RustDesk accoglie il contributo di tutti. Per ulteriori informazioni su come ini Qui sotto trovate i server che possono essere usati gratuitamente, la lista potrebbe cambiare nel tempo. Se non si è vicini a uno di questi server, la vostra connessione potrebbe essere lenta. | Posizione | Vendor | Specifiche | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | diff --git a/docs/README-JP.md b/docs/README-JP.md index e2fefe6b5..fc67ac11e 100644 --- a/docs/README-JP.md +++ b/docs/README-JP.md @@ -29,7 +29,6 @@ RustDeskは誰からの貢献も歓迎します。 貢献するには [`docs/CON 下記のサーバーは、無料で使用できますが、後々変更されることがあります。これらのサーバーから遠い場合、接続が遅い可能性があります。 | Location | Vendor | Specification | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | diff --git a/docs/README-KR.md b/docs/README-KR.md index 1ea096d40..08a2a1708 100644 --- a/docs/README-KR.md +++ b/docs/README-KR.md @@ -29,7 +29,6 @@ RustDesk는 모든 기여를 환영합니다. 기여하고자 한다면 [`docs/C 표에 있는 서버는 무료로 사용할 수 있지만 추후 변경될 수도 있습니다. 이 서버에서 멀다면, 네트워크가 느려질 가능성도 있습니다. | Location | Vendor | Specification | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | diff --git a/docs/README-ML.md b/docs/README-ML.md index 0e181917f..1c1f60146 100644 --- a/docs/README-ML.md +++ b/docs/README-ML.md @@ -24,7 +24,6 @@ നിങ്ങൾ സൗജന്യമായി ഉപയോഗിക്കുന്ന സെർവറുകൾ ചുവടെയുണ്ട്, അത് സമയത്തിനനുസരിച്ച് മാറിയേക്കാം. നിങ്ങൾ ഇവയിലൊന്നിനോട് അടുത്തല്ലെങ്കിൽ, നിങ്ങളുടെ നെറ്റ്‌വർക്ക് സ്ലോ ആയേക്കാം. | സ്ഥാനം | കച്ചവടക്കാരൻ | വിവരണം | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | diff --git a/docs/README-NL.md b/docs/README-NL.md index cf33c72db..60b9a7e2d 100644 --- a/docs/README-NL.md +++ b/docs/README-NL.md @@ -32,7 +32,6 @@ RustDesk verwelkomt bijdragen van iedereen. Zie [`docs/CONTRIBUTING.md`](CONTRIB Hieronder staan de servers die u gratis gebruikt, ze kunnen in de loop van de tijd veranderen. Als u niet in de buurt van een van deze servers bevindt, kan uw vervinding langzamer zijn. | Locatie | Aanbieder | Specificaties | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Duitsland | Hetzner | 2 vCPU / 4GB RAM | | Duitsland | Codext | 4 vCPU / 8GB RAM | | Oekraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | diff --git a/docs/README-PL.md b/docs/README-PL.md index 57ea26d80..57f2772f9 100644 --- a/docs/README-PL.md +++ b/docs/README-PL.md @@ -34,7 +34,6 @@ RustDesk zaprasza do współpracy każdego. Zobacz [`docs/CONTRIBUTING-PL.md`](C Poniżej znajdują się serwery, z których można korzystać za darmo, może się to zmienić z upływem czasu. Jeśli nie znajdujesz się w pobliżu jednego z nich, Twoja prędkość połączenia może być niska. | Lokalizacja | Dostawca | Specyfikacja | | --------- | ------------- | ------------------ | -| Korea Płd. (Seul) | AWS lightsail | 1 vCPU / 0.5GB RAM | | Niemcy | Hetzner | 2 vCPU / 4GB RAM | | Niemcy | Codext | 4 vCPU / 8GB RAM | | Ukraina (Kijów) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | diff --git a/docs/README-PTBR.md b/docs/README-PTBR.md index 360a37ecc..08604110a 100644 --- a/docs/README-PTBR.md +++ b/docs/README-PTBR.md @@ -25,7 +25,6 @@ Abaixo estão os servidores que você está utilizando de graça, ele pode mudar | Localização | Fornecedor | Especificações | | ----------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | diff --git a/docs/README-RU.md b/docs/README-RU.md index 5ae13c8a2..503cb68d2 100644 --- a/docs/README-RU.md +++ b/docs/README-RU.md @@ -33,9 +33,6 @@ RustDesk приветствует вклад каждого. Ознакомьт Ниже приведены бесплатные публичные сервера, используемые по умолчанию. Имейте ввиду, они могут меняться со временем. Также стоит отметить, что скорость работы сети зависит от вашего местоположения и расстояния до серверов. Подключение происходит к ближайшему доступному. | Расположение | Поставщик | Технические характеристики | | --------- | ------------- | ------------------ | -| Сеул | AWS lightsail | 1 vCPU / 0.5GB RAM | -| Сингапур | Vultr | 1 vCPU / 1GB RAM | -| Даллас | Vultr | 1 vCPU / 1GB RAM | | Германия | Hetzner | 2 vCPU / 4GB RAM | | Германия | Codext | 4 vCPU / 8GB RAM | diff --git a/docs/README-UA.md b/docs/README-UA.md index d2a918f24..2d3121430 100644 --- a/docs/README-UA.md +++ b/docs/README-UA.md @@ -34,9 +34,6 @@ RustDesk вітає внесок кожного. Дивіться [`docs/CONTRIB Нижче наведені сервери, для безкоштовного використання, вони можуть змінюватися з часом. Якщо ви не перебуваєте поруч з одним із них, ваша мережа може працювати повільно. | Місцезнаходження | Постачальник | Технічні характеристики | | --------- | ------------- | ------------------ | -| Південна Корея (Сеул) | AWS lightsail | 1 vCPU / 0.5GB RAM | -| Сінгапур | Vultr | 1 vCPU / 1GB RAM | -| США (Даллас) | Vultr | 1 vCPU / 1GB RAM | Німеччина | Hetzner | 2 VCPU / 4GB RAM | | Німеччина | Codext | 4 vCPU / 8GB RAM | | Україна (Київ) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | diff --git a/docs/README-VN.md b/docs/README-VN.md index 422fe60b9..58a0aaf9b 100644 --- a/docs/README-VN.md +++ b/docs/README-VN.md @@ -33,7 +33,6 @@ Dưới đây là những máy chủ mà bạn có thể sử dụng mà không | Địa điểm | Nhà cung cấp | Cấu hình | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | diff --git a/docs/README-ZH.md b/docs/README-ZH.md index 4a1ebf179..d6d7d214e 100644 --- a/docs/README-ZH.md +++ b/docs/README-ZH.md @@ -26,7 +26,6 @@ Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https: | Location | Vendor | Specification | | --------- | ------------- | ------------------ | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | | Germany | Hetzner | 2 vCPU / 4GB RAM | | Germany | Codext | 4 vCPU / 8GB RAM | From b75edd9710de0c89af3c9cd754d3922e3635902f Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 4 Jul 2023 19:43:39 +0800 Subject: [PATCH 034/612] fix os password Signed-off-by: dignow --- flutter/lib/common/widgets/dialog.dart | 7 +++---- flutter/lib/common/widgets/toolbar.dart | 27 ++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index 2e60304be..ff1372039 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -943,15 +943,14 @@ showSetOSPassword( SessionID sessionId, bool login, OverlayDialogManager dialogManager, + String? osPassword, ) async { final controller = TextEditingController(); - var password = - await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ?? - ''; + osPassword ??= await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ?? ''; var autoLogin = await bind.sessionGetOption(sessionId: sessionId, arg: 'auto-login') != ''; - controller.text = password; + controller.text = osPassword; dialogManager.show((setState, close, context) { submit() { var text = controller.text.trim(); diff --git a/flutter/lib/common/widgets/toolbar.dart b/flutter/lib/common/widgets/toolbar.dart index 98621a87e..3c36bd1a8 100644 --- a/flutter/lib/common/widgets/toolbar.dart +++ b/flutter/lib/common/widgets/toolbar.dart @@ -11,6 +11,8 @@ import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:get/get.dart'; +bool isEditOsPassword = false; + class TTextMenu { final Widget child; final VoidCallback onPressed; @@ -66,14 +68,33 @@ List toolbarControls(BuildContext context, String id, FFI ffi) { child: Row(children: [ Text(translate(pi.is_headless ? 'OS Account' : 'OS Password')), Offstage( - offstage: isDesktop, + offstage: isDesktop, + child: InkWell( + onTap: () => + showSetOSPassword(sessionId, false, ffi.dialogManager, null), child: - Icon(Icons.edit, color: MyTheme.accent).marginOnly(left: 12)) + Icon(Icons.edit, color: MyTheme.accent).marginOnly(left: 12), + ), + ) ]), trailingIcon: Transform.scale(scale: 0.8, child: Icon(Icons.edit)), onPressed: () => pi.is_headless ? showSetOSAccount(sessionId, ffi.dialogManager) - : showSetOSPassword(sessionId, false, ffi.dialogManager)), + : () async { + if (isEditOsPassword) { + isEditOsPassword = false; + return; + } + final password = await bind.sessionGetOption( + sessionId: sessionId, arg: 'os-password') ?? + ''; + if (password.isEmpty) { + showSetOSPassword(sessionId, true, ffi.dialogManager, password); + } else { + bind.sessionInputOsPassword( + sessionId: sessionId, value: password); + } + }), ); // paste if (isMobile && perms['keyboard'] != false && perms['clipboard'] != false) { From 437b5f2ca31fbcb4788d0e58604537b472048368 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 4 Jul 2023 20:26:43 +0800 Subject: [PATCH 035/612] debug Signed-off-by: dignow --- flutter/lib/common/widgets/dialog.dart | 11 ++-- flutter/lib/common/widgets/toolbar.dart | 72 ++++++++++++++----------- 2 files changed, 50 insertions(+), 33 deletions(-) diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index ff1372039..9f4eb1427 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -944,6 +944,7 @@ showSetOSPassword( bool login, OverlayDialogManager dialogManager, String? osPassword, + Function()? closeCallback, ) async { final controller = TextEditingController(); osPassword ??= await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ?? ''; @@ -952,6 +953,10 @@ showSetOSPassword( ''; controller.text = osPassword; dialogManager.show((setState, close, context) { + closeWithCallback([dynamic]) { + close(); + if (closeCallback != null) closeCallback(); + } submit() { var text = controller.text.trim(); bind.sessionPeerOption( @@ -963,7 +968,7 @@ showSetOSPassword( if (text != '' && login) { bind.sessionInputOsPassword(sessionId: sessionId, value: text); } - close(); + closeWithCallback(); } return CustomAlertDialog( @@ -997,7 +1002,7 @@ showSetOSPassword( dialogButton( "Cancel", icon: Icon(Icons.close_rounded), - onPressed: close, + onPressed: closeWithCallback, isOutline: true, ), dialogButton( @@ -1007,7 +1012,7 @@ showSetOSPassword( ), ], onSubmit: submit, - onCancel: close, + onCancel: closeWithCallback, ); }); } diff --git a/flutter/lib/common/widgets/toolbar.dart b/flutter/lib/common/widgets/toolbar.dart index 3c36bd1a8..4cf6fd3ea 100644 --- a/flutter/lib/common/widgets/toolbar.dart +++ b/flutter/lib/common/widgets/toolbar.dart @@ -46,6 +46,28 @@ class TToggleMenu { {required this.child, required this.value, required this.onChanged}); } +handleOsPasswordEditIcon( + SessionID sessionId, OverlayDialogManager dialogManager) { + isEditOsPassword = true; + showSetOSPassword(sessionId, false, dialogManager, null, () => isEditOsPassword = false); +} + +handleOsPasswordAction( + SessionID sessionId, OverlayDialogManager dialogManager) async { + if (isEditOsPassword) { + isEditOsPassword = false; + return; + } + final password = + await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ?? + ''; + if (password.isEmpty) { + showSetOSPassword(sessionId, true, dialogManager, password, () => isEditOsPassword = false); + } else { + bind.sessionInputOsPassword(sessionId: sessionId, value: password); + } +} + List toolbarControls(BuildContext context, String id, FFI ffi) { final ffiModel = ffi.ffiModel; final pi = ffiModel.pi; @@ -65,36 +87,26 @@ List toolbarControls(BuildContext context, String id, FFI ffi) { // osAccount / osPassword v.add( TTextMenu( - child: Row(children: [ - Text(translate(pi.is_headless ? 'OS Account' : 'OS Password')), - Offstage( - offstage: isDesktop, - child: InkWell( - onTap: () => - showSetOSPassword(sessionId, false, ffi.dialogManager, null), - child: - Icon(Icons.edit, color: MyTheme.accent).marginOnly(left: 12), - ), - ) - ]), - trailingIcon: Transform.scale(scale: 0.8, child: Icon(Icons.edit)), - onPressed: () => pi.is_headless - ? showSetOSAccount(sessionId, ffi.dialogManager) - : () async { - if (isEditOsPassword) { - isEditOsPassword = false; - return; - } - final password = await bind.sessionGetOption( - sessionId: sessionId, arg: 'os-password') ?? - ''; - if (password.isEmpty) { - showSetOSPassword(sessionId, true, ffi.dialogManager, password); - } else { - bind.sessionInputOsPassword( - sessionId: sessionId, value: password); - } - }), + child: Row(children: [ + Text(translate(pi.is_headless ? 'OS Account' : 'OS Password')), + Offstage( + offstage: isDesktop, + child: Icon(Icons.edit, color: MyTheme.accent).marginOnly(left: 12), + ) + ]), + trailingIcon: Transform.scale( + scale: 0.8, + child: InkWell( + onTap: () => pi.is_headless + ? showSetOSAccount(sessionId, ffi.dialogManager) + : handleOsPasswordEditIcon(sessionId, ffi.dialogManager), + child: Icon(Icons.edit), + ), + ), + onPressed: () => pi.is_headless + ? showSetOSAccount(sessionId, ffi.dialogManager) + : handleOsPasswordAction(sessionId, ffi.dialogManager), + ), ); // paste if (isMobile && perms['keyboard'] != false && perms['clipboard'] != false) { From 31a7d817da645d8a4a6e5348bfba41b61e6293ae Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 5 Jul 2023 08:12:46 +0800 Subject: [PATCH 036/612] remove cm use peer info as title Signed-off-by: 21pages --- flutter/lib/desktop/pages/server_page.dart | 5 ----- 1 file changed, 5 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 3ea735d25..d0854252e 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -101,11 +101,6 @@ class ConnectionManagerState extends State { final client_id = int.tryParse(client_id_str); if (client_id != null) { gFFI.chatModel.changeCurrentID(client_id); - final client = - gFFI.serverModel.clients.firstWhereOrNull((e) => e.id == client_id); - if (client != null) { - windowManager.setTitle(getWindowNameWithId(client.peerId)); - } } }; gFFI.chatModel.isConnManager = true; From 9ad9cb8ff206ad6e79998d4620a4e0e72fdcf0af Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 5 Jul 2023 09:58:00 +0800 Subject: [PATCH 037/612] Revert "remove peers platform filter for failed connections" This reverts commit b5cf9592067562a9ff4651524d186d02c880bd04. --- libs/hbb_common/src/config.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 33d462028..39b40046e 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -1031,8 +1031,12 @@ impl PeerConfig { }; let c = PeerConfig::load(&id_decoded_string); + if c.info.platform.is_empty() { + fs::remove_file(p).ok(); + } (id_decoded_string, t, c) }) + .filter(|p| !p.2.info.platform.is_empty()) .collect(); peers.sort_unstable_by(|a, b| b.1.cmp(&a.1)); return peers; From 533fc082bd7c0985ba69f79f1ae2548cf243f132 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 5 Jul 2023 10:11:02 +0800 Subject: [PATCH 038/612] fix relay_hint_tip Signed-off-by: 21pages --- src/lang/cn.rs | 2 +- src/lang/en.rs | 2 +- src/lang/tw.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 7fc27f687..10b9301f8 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -453,7 +453,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Voice call", "语音通话"), ("Text chat", "文字聊天"), ("Stop voice call", "停止语音通话"), - ("relay_hint_tip", "可能无法直连,可以尝试中继连接。\n另外,如果想直接使用中继连接,可以在 ID 后面添加/r,或者在卡片选项里选择强制走中继连接。"), + ("relay_hint_tip", "可能无法直连,可以尝试中继连接。\n另外,如果想直接使用中继连接,可以在 ID 后面添加/r,如果最近访问里存在该卡片,也可以在卡片选项里选择强制走中继连接。"), ("Reconnect", "重连"), ("Codec", "编解码"), ("Resolution", "分辨率"), diff --git a/src/lang/en.rs b/src/lang/en.rs index 53d325450..ded8cd145 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -44,7 +44,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("wait_accept_uac_tip", "Please wait for the remote user to accept the UAC dialog."), ("still_click_uac_tip", "Still requires the remote user to click OK on the UAC window of running RustDesk."), ("config_microphone", "In order to speak remotely, you need to grant RustDesk \"Record Audio\" permissions."), - ("relay_hint_tip", "It may not be possible to connect directly; you can try connecting via relay. Additionally, if you want to use a relay on your first attempt, you can add the \"/r\" suffix to the ID or select the option \"Always connect via relay\" in the card of recent sessions."), + ("relay_hint_tip", "It may not be possible to connect directly; you can try connecting via relay. Additionally, if you want to use a relay on your first attempt, you can add the \"/r\" suffix to the ID or select the option \"Always connect via relay\" in the card of recent sessions if it exists."), ("No transfers in progress", ""), ("idd_driver_tip", "Install virtual display driver which is used when you have no physical displays."), ("confirm_idd_driver_tip", "The option to install the virtual display driver is checked. Note that a test certificate will be installed to trust the virtual display driver. This test certificate will only be used to trust Rustdesk drivers."), diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 5f5136134..1e6a9278b 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -453,7 +453,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Voice call", "語音通話"), ("Text chat", "文字聊天"), ("Stop voice call", "停止語音通話"), - ("relay_hint_tip", "可能無法直接連線,可以嘗試中繼連線。\n另外,如果想要直接使用中繼連線,可以在 ID 後面新增/r,或者在卡片選項裡選擇強制走中繼連線。"), + ("relay_hint_tip", "可能無法直接連線,可以嘗試中繼連線。\n另外,如果想要直接使用中繼連線,可以在 ID 後面新增/r,如果最近訪問裏存在該卡片,也可以在卡片選項裏選擇強制走中繼連接。"), ("Reconnect", "重新連線"), ("Codec", "編解碼器"), ("Resolution", "解析度"), From 07c21ced7012380ff3daa167954a32dfe75023e6 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 5 Jul 2023 10:56:36 +0800 Subject: [PATCH 039/612] update confy, not create if not exist when load Signed-off-by: 21pages --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index c999d7c6d..a46da69fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1054,7 +1054,7 @@ dependencies = [ [[package]] name = "confy" version = "0.4.0-2" -source = "git+https://github.com/open-trade/confy#9f231b2039cf8a8f8cdf6b829c5ac0016e146077" +source = "git+https://github.com/open-trade/confy#7855cd3c32b1a60b44e5076ee8f6b4131da10350" dependencies = [ "directories-next", "serde 1.0.163", From b41c6be341bdbf282c84d0b40cd648df15e22293 Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Wed, 5 Jul 2023 10:56:54 +0800 Subject: [PATCH 040/612] Revert "remove cm use peer info as title" --- flutter/lib/desktop/pages/server_page.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index d0854252e..3ea735d25 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -101,6 +101,11 @@ class ConnectionManagerState extends State { final client_id = int.tryParse(client_id_str); if (client_id != null) { gFFI.chatModel.changeCurrentID(client_id); + final client = + gFFI.serverModel.clients.firstWhereOrNull((e) => e.id == client_id); + if (client != null) { + windowManager.setTitle(getWindowNameWithId(client.peerId)); + } } }; gFFI.chatModel.isConnManager = true; From 92a4d8853280bc22e10541f1913f8ef67ad4d47b Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 5 Jul 2023 14:53:29 +0800 Subject: [PATCH 041/612] dismiss login dialog before verification Signed-off-by: dignow --- flutter/lib/common/widgets/login.dart | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 499a734d6..90e80ad34 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -435,11 +435,8 @@ Future loginDialog() async { break; case HttpType.kAuthResTypeEmailCheck: setState(() => isInProgress = false); - final res = await verificationCodeDialog(resp.user); - if (res == true) { - close(true); - return; - } + close(true); + verificationCodeDialog(resp.user); break; default: passwordMsg = "Failed, bad response from server"; From a3024fdd1475d4f058f161bc8c7b1d55eb63ebc0 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 5 Jul 2023 15:48:30 +0800 Subject: [PATCH 042/612] trivial change Signed-off-by: dignow --- flutter/lib/common/widgets/login.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 90e80ad34..16f3b44ed 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -434,7 +434,6 @@ Future loginDialog() async { } break; case HttpType.kAuthResTypeEmailCheck: - setState(() => isInProgress = false); close(true); verificationCodeDialog(resp.user); break; From 1ea009ff61ed3447ae543b9ccba6664f78b1513f Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Wed, 5 Jul 2023 10:12:52 +0200 Subject: [PATCH 043/612] Update italian language --- src/lang/it.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index e77c4d0f0..3ff2320f8 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -453,7 +453,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Voice call", "Chiamata vocale"), ("Text chat", "Chat testuale"), ("Stop voice call", "Interrompi chiamata vocale"), - ("relay_hint_tip", "Se non è possibile connettersi direttamente, puoi provare a farlo tramite relay.\nInoltre, se si vuoi usare il relay al primo tentativo, è possibile aggiungere all'ID il suffisso '/r\' o selezionare nella scheda peer l'opzione 'Collegati sempre tramite relay'."), + ("relay_hint_tip", "Se non è possibile connettersi direttamente, puoi provare a farlo tramite relay.\nInoltre, se si vuoi usare il relay al primo tentativo, è possibile aggiungere all'ID il suffisso '/r\' o selezionare nella scheda se esiste l'opzione 'Collegati sempre tramite relay'."), ("Reconnect", "Riconnetti"), ("Codec", "Codec"), ("Resolution", "Risoluzione"), From 4707e0ed2eb28e5fac2fd35dee70a6e256f10371 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 5 Jul 2023 16:15:39 +0800 Subject: [PATCH 044/612] revert desktop login dialog Signed-off-by: dignow --- flutter/lib/common/widgets/login.dart | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 16f3b44ed..7fefa49b4 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -434,8 +434,17 @@ Future loginDialog() async { } break; case HttpType.kAuthResTypeEmailCheck: - close(true); - verificationCodeDialog(resp.user); + if (isMobile) { + close(true); + verificationCodeDialog(resp.user); + } else { + setState(() => isInProgress = false); + final res = await verificationCodeDialog(resp.user); + if (res == true) { + close(true); + return; + } + } break; default: passwordMsg = "Failed, bad response from server"; @@ -508,7 +517,11 @@ Future loginDialog() async { size: 25, // No need to handle the branch of null. // Because we can ensure the color is not null when debug. - color: Theme.of(context).textTheme.titleLarge?.color?.withOpacity(0.55), + color: Theme.of(context) + .textTheme + .titleLarge + ?.color + ?.withOpacity(0.55), ), onTap: onDialogCancel, hoverColor: Colors.red, From dce35ff88132675825bcd15448312093a2fb6fde Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 5 Jul 2023 17:47:10 +0800 Subject: [PATCH 045/612] flutter-tag.yml --- .github/workflows/flutter-build.yml | 2 +- .github/workflows/flutter-nightly.yml | 1 + .github/workflows/flutter-tag.yml | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/flutter-tag.yml diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 5042cc97e..3dfd1ad39 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -15,7 +15,7 @@ env: # for arm64 linux FLUTTER_ELINUX_VERSION: "3.10.5" FLUTTER_ELINUX_COMMIT_ID: "410b3ca42f2cd0c485edf517a1666652bab442d4" - TAG_NAME: "nightly" + TAG_NAME: "${{ inputs.upload-tag }}" # vcpkg version: 2023.04.15 # for multiarch gcc compatibility VCPKG_COMMIT_ID: "501db0f17ef6df184fcdbfbe0f87cde2313b6ab1" diff --git a/.github/workflows/flutter-nightly.yml b/.github/workflows/flutter-nightly.yml index c251a2b25..67dc14ae9 100644 --- a/.github/workflows/flutter-nightly.yml +++ b/.github/workflows/flutter-nightly.yml @@ -12,3 +12,4 @@ jobs: secrets: inherit with: upload-artifact: true + upload-tag: "nightly" diff --git a/.github/workflows/flutter-tag.yml b/.github/workflows/flutter-tag.yml new file mode 100644 index 000000000..1857840c1 --- /dev/null +++ b/.github/workflows/flutter-tag.yml @@ -0,0 +1,18 @@ +name: Flutter Tag Build + +on: + workflow_dispatch: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+' + - 'v[0-9]+.[0-9]+.[0-9]+-[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+-[0-9]+' + +jobs: + run-flutter-tag-build: + uses: ./.github/workflows/flutter-build.yml + secrets: inherit + with: + upload-artifact: true + upload-tag: "1.2.0" From 769e46d3e6fa978d061405de29d73612f27fc177 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 5 Jul 2023 15:51:33 +0800 Subject: [PATCH 046/612] fix cm window_on_top when behind other window Signed-off-by: 21pages --- flutter/lib/common.dart | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 41fa826b8..d40a4e899 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -545,16 +545,25 @@ closeConnection({String? id}) { } } -void window_on_top(int? id) { +void window_on_top(int? id) async { if (!isDesktop) { return; } if (id == null) { print("Bring window on top"); // main window - windowManager.restore(); - windowManager.show(); - windowManager.focus(); + if (desktopType == DesktopType.cm && + !(await windowManager.isMinimized() || + !await windowManager.isVisible())) { + await windowManager.setAlwaysOnTop(true); + Future.delayed(Duration(microseconds: 500), () async { + windowManager.setAlwaysOnTop(false); + }); + } else { + windowManager.restore(); + windowManager.show(); + windowManager.focus(); + } rustDeskWinManager.registerActiveWindow(kWindowMainId); } else { WindowController.fromWindowId(id) From 7c4c69aa75fd63a3fb176dc808bc0ae04396cc9f Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 5 Jul 2023 17:01:33 +0800 Subject: [PATCH 047/612] cm unread message count Signed-off-by: 21pages --- flutter/lib/desktop/pages/server_page.dart | 18 ++++++++++++++++-- flutter/lib/models/chat_model.dart | 2 +- flutter/lib/models/server_model.dart | 6 +++--- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 3ea735d25..62333456e 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -160,8 +160,22 @@ class ConnectionManagerState extends State { child: label), Obx(() => Offstage( offstage: - !(client?.hasUnreadChatMessage.value ?? false), - child: Icon(Icons.circle, color: Colors.red, size: 10))) + !((client?.unreadChatMessageCount.value ?? 0) > 0), + child: Container( + width: 16, + height: 16, + decoration: BoxDecoration( + color: Colors.red, + shape: BoxShape.circle, + ), + child: Center( + child: Text( + "${client?.unreadChatMessageCount.value ?? 0}", + maxLines: 1, + style: TextStyle( + color: Colors.white, fontSize: 10)), + ), + ).marginOnly(left: 4))) ], ); }, diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 8c1e0a9a4..81a240cba 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -318,7 +318,7 @@ class ChatModel with ChangeNotifier { final currentSelectedTab = session.serverModel.tabController.state.value.selectedTabInfo; if (currentSelectedTab.key != id.toString() && inputNode.hasFocus) { - client.hasUnreadChatMessage.value = true; + client.unreadChatMessageCount.value += 1; } else { parent.target?.serverModel.jumpTo(id); toId = id; diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 9a6b52e7e..cd0f52f39 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -463,8 +463,8 @@ class ServerModel with ChangeNotifier { label: client.name, closable: false, onTap: () { - if (client.hasUnreadChatMessage.value) { - client.hasUnreadChatMessage.value = false; + if (client.unreadChatMessageCount.value > 0) { + client.unreadChatMessageCount.value = 0; final chatModel = parent.target!.chatModel; chatModel.showChatPage(client.id); } @@ -643,7 +643,7 @@ class Client { bool inVoiceCall = false; bool incomingVoiceCall = false; - RxBool hasUnreadChatMessage = false.obs; + RxInt unreadChatMessageCount = 0.obs; Client(this.id, this.authorized, this.isFileTransfer, this.name, this.peerId, this.keyboard, this.clipboard, this.audio); From 87e06e974e1df1517f5066558026aaea804a1e1f Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 5 Jul 2023 17:35:37 +0800 Subject: [PATCH 048/612] desktop block remote click chat page Signed-off-by: 21pages --- flutter/lib/common.dart | 30 ++++++++++++++ flutter/lib/desktop/pages/server_page.dart | 4 +- .../lib/desktop/widgets/tabbar_widget.dart | 41 +++++-------------- 3 files changed, 43 insertions(+), 32 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index d40a4e899..38085ae8c 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -2110,3 +2110,33 @@ Future start_service(bool is_start) async { bind.mainSetOption(key: "stop-service", value: is_start ? "" : "Y"); } } + +typedef Future WhetherUseRemoteBlock(); +Widget buildRemoteBlock({required Widget child, WhetherUseRemoteBlock? use}) { + var block = false.obs; + return Obx(() => MouseRegion( + onEnter: (_) async { + if (use != null && !await use()) { + block.value = false; + return; + } + var time0 = DateTime.now().millisecondsSinceEpoch; + await bind.mainCheckMouseTime(); + Timer(const Duration(milliseconds: 120), () async { + var d = time0 - await bind.mainGetMouseTime(); + if (d < 120) { + block.value = true; + } + }); + }, + onExit: (event) => block.value = false, + child: Stack(children: [ + child, + Offstage( + offstage: !block.value, + child: Container( + color: Colors.black.withOpacity(0.5), + )), + ]), + )); +} diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 62333456e..e996de2db 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -184,7 +184,9 @@ class ConnectionManagerState extends State { Consumer( builder: (_, model, child) => model.isShowCMChatPage ? Expanded( - child: ChatPage(), + child: buildRemoteBlock( + child: ChatPage(), + ), flex: (kConnectionManagerWindowSizeOpenChat.width - kConnectionManagerWindowSizeClosedChat .width) diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index ab36728cd..975398c94 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -295,37 +295,16 @@ class DesktopTab extends StatelessWidget { if (tabType != DesktopTabType.main) { return child; } - var block = false.obs; - return Obx(() => MouseRegion( - onEnter: (_) async { - var access_mode = await bind.mainGetOption(key: 'access-mode'); - var option = option2bool( - 'allow-remote-config-modification', - await bind.mainGetOption( - key: 'allow-remote-config-modification')); - if (access_mode == 'view' || (access_mode.isEmpty && !option)) { - var time0 = DateTime.now().millisecondsSinceEpoch; - await bind.mainCheckMouseTime(); - Timer(const Duration(milliseconds: 120), () async { - var d = time0 - await bind.mainGetMouseTime(); - if (d < 120) { - block.value = true; - } - }); - } - }, - onExit: (_) => block.value = false, - child: Stack( - children: [ - child, - Offstage( - offstage: !block.value, - child: Container( - color: Colors.black.withOpacity(0.5), - )), - ], - ), - )); + return buildRemoteBlock( + child: child, + use: () async { + var access_mode = await bind.mainGetOption(key: 'access-mode'); + var option = option2bool( + 'allow-remote-config-modification', + await bind.mainGetOption( + key: 'allow-remote-config-modification')); + return access_mode == 'view' || (access_mode.isEmpty && !option); + }); } List _tabWidgets = []; From 4bde36e186fdaf5aad78fb9234069c0c96384d4e Mon Sep 17 00:00:00 2001 From: Marco Jakobs Date: Wed, 5 Jul 2023 15:24:44 +0200 Subject: [PATCH 049/612] Update flutter-build.yml --- .github/workflows/flutter-build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 3dfd1ad39..bf30c52dc 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -6,6 +6,9 @@ on: upload-artifact: type: boolean default: true + upload-tag: + type: string + default: "nightly" env: CARGO_NDK_VERSION: "3.1.2" From 3bb9417a9d66bb526261dd3bc1c44bb86d2185cd Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 5 Jul 2023 22:12:54 +0800 Subject: [PATCH 050/612] fix #4880 --- flutter/lib/desktop/pages/connection_page.dart | 1 - flutter/lib/desktop/pages/port_forward_page.dart | 8 -------- 2 files changed, 9 deletions(-) diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart index dc04b2f4d..45181c4a3 100644 --- a/flutter/lib/desktop/pages/connection_page.dart +++ b/flutter/lib/desktop/pages/connection_page.dart @@ -9,7 +9,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/desktop/widgets/scroll_wrapper.dart'; import 'package:flutter_hbb/models/state_model.dart'; -import 'package:flutter_hbb/models/user_model.dart'; import 'package:get/get.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:window_manager/window_manager.dart'; diff --git a/flutter/lib/desktop/pages/port_forward_page.dart b/flutter/lib/desktop/pages/port_forward_page.dart index 3a16ffbe1..602a93d5c 100644 --- a/flutter/lib/desktop/pages/port_forward_page.dart +++ b/flutter/lib/desktop/pages/port_forward_page.dart @@ -1,5 +1,4 @@ import 'dart:convert'; -import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -8,7 +7,6 @@ import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:get/get.dart'; -import 'package:wakelock/wakelock.dart'; const double _kColumn1Width = 30; const double _kColumn4Width = 100; @@ -60,9 +58,6 @@ class _PortForwardPageState extends State forceRelay: widget.forceRelay, isRdp: widget.isRDP); Get.put(_ffi, tag: 'pf_${widget.id}'); - if (!Platform.isLinux) { - Wakelock.enable(); - } debugPrint("Port forward page init success with id ${widget.id}"); widget.tabController.onSelected?.call(widget.id); } @@ -71,9 +66,6 @@ class _PortForwardPageState extends State void dispose() { _ffi.close(); _ffi.dialogManager.dismissAll(); - if (!Platform.isLinux) { - Wakelock.disable(); - } Get.delete(tag: 'pf_${widget.id}'); super.dispose(); } From 099a5edef3797ca3a782270aad8fda19375d7aa4 Mon Sep 17 00:00:00 2001 From: Konstantin Date: Wed, 5 Jul 2023 20:03:13 +0300 Subject: [PATCH 051/612] +free public server --- docs/README-RU.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README-RU.md b/docs/README-RU.md index 503cb68d2..97d6ecfd9 100644 --- a/docs/README-RU.md +++ b/docs/README-RU.md @@ -35,6 +35,7 @@ RustDesk приветствует вклад каждого. Ознакомьт | --------- | ------------- | ------------------ | | Германия | Hetzner | 2 vCPU / 4GB RAM | | Германия | Codext | 4 vCPU / 8GB RAM | +| Россия (Москва) | [nt-vps](https://nt-vps.ru) | 8 vCPU / 8GB RAM | ## Зависимости From a5675c06e7932a9f704287270da747412a79b525 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 6 Jul 2023 09:40:03 +0800 Subject: [PATCH 052/612] when remote page receive chat message: if minimized, top page and switch tab, otherwise add unread message count Signed-off-by: 21pages --- flutter/lib/common.dart | 17 ++++++++++++ flutter/lib/common/shared_state.dart | 25 +++++++++++++++++ .../lib/desktop/pages/remote_tab_page.dart | 6 ++--- flutter/lib/desktop/pages/server_page.dart | 19 +------------ .../lib/desktop/widgets/tabbar_widget.dart | 4 +++ flutter/lib/models/chat_model.dart | 27 +++++++++++++++++++ flutter/pubspec.lock | 2 +- 7 files changed, 78 insertions(+), 22 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 38085ae8c..d5336e2e1 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -2140,3 +2140,20 @@ Widget buildRemoteBlock({required Widget child, WhetherUseRemoteBlock? use}) { ]), )); } + +Widget unreadMessageCountBuilder(RxInt? count) { + return Obx(() => Offstage( + offstage: !((count?.value ?? 0) > 0), + child: Container( + width: 16, + height: 16, + decoration: BoxDecoration( + color: Colors.red, + shape: BoxShape.circle, + ), + child: Center( + child: Text("${count?.value ?? 0}", + maxLines: 1, style: TextStyle(color: Colors.white, fontSize: 10)), + ), + ).marginOnly(left: 4))); +} diff --git a/flutter/lib/common/shared_state.dart b/flutter/lib/common/shared_state.dart index e4711ddf8..d5ce29190 100644 --- a/flutter/lib/common/shared_state.dart +++ b/flutter/lib/common/shared_state.dart @@ -285,6 +285,29 @@ class PeerStringOption { Get.find(tag: tag(id, opt)); } +class UnreadChatCountState { + static String tag(id) => 'unread_chat_count_$id'; + + static void init(String id) { + final key = tag(id); + if (!Get.isRegistered(tag: key)) { + final RxInt state = RxInt(0); + Get.put(state, tag: key); + } else { + Get.find(tag: key).value = 0; + } + } + + static void delete(String id) { + final key = tag(id); + if (Get.isRegistered(tag: key)) { + Get.delete(tag: key); + } + } + + static RxInt find(String id) => Get.find(tag: tag(id)); +} + initSharedStates(String id) { PrivacyModeState.init(id); BlockInputState.init(id); @@ -294,6 +317,7 @@ initSharedStates(String id) { RemoteCursorMovedState.init(id); FingerprintState.init(id); PeerBoolOption.init(id, 'zoom-cursor', () => false); + UnreadChatCountState.init(id); } removeSharedStates(String id) { @@ -305,4 +329,5 @@ removeSharedStates(String id) { RemoteCursorMovedState.delete(id); FingerprintState.delete(id); PeerBoolOption.delete(id, 'zoom-cursor'); + UnreadChatCountState.delete(id); } diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 2333e343c..0b4f4094a 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -56,15 +56,14 @@ class _ConnectionTabPageState extends State { if (peerId != null) { ConnectionTypeState.init(peerId); tabController.onSelected = (id) { - final remotePage = tabController.state.value.tabs - .firstWhereOrNull((tab) => tab.key == id) - ?.page; + final remotePage = tabController.widget(id); if (remotePage is RemotePage) { final ffi = remotePage.ffi; bind.setCurSessionId(sessionId: ffi.sessionId); } WindowController.fromWindowId(windowId()) .setTitle(getWindowNameWithId(id)); + UnreadChatCountState.find(id).value = 0; }; tabController.add(TabInfo( key: peerId, @@ -206,6 +205,7 @@ class _ConnectionTabPageState extends State { ).paddingOnly(right: 5), ), label, + unreadMessageCountBuilder(UnreadChatCountState.find(key)), ], ); diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index e996de2db..51e736f7b 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -158,24 +158,7 @@ class ConnectionManagerState extends State { message: key, waitDuration: Duration(seconds: 1), child: label), - Obx(() => Offstage( - offstage: - !((client?.unreadChatMessageCount.value ?? 0) > 0), - child: Container( - width: 16, - height: 16, - decoration: BoxDecoration( - color: Colors.red, - shape: BoxShape.circle, - ), - child: Center( - child: Text( - "${client?.unreadChatMessageCount.value ?? 0}", - maxLines: 1, - style: TextStyle( - color: Colors.white, fontSize: 10)), - ), - ).marginOnly(left: 4))) + unreadMessageCountBuilder(client?.unreadChatMessageCount), ], ); }, diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 975398c94..85cf12704 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -187,6 +187,10 @@ class DesktopTabController { state.value.tabs.clear(); state.refresh(); } + + Widget? widget(String key) { + return state.value.tabs.firstWhereOrNull((tab) => tab.key == key)?.page; + } } class TabThemeConf { diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 81a240cba..d515d6706 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -1,10 +1,14 @@ import 'dart:async'; import 'package:dash_chat_2/dash_chat_2.dart'; +import 'package:desktop_multi_window/desktop_multi_window.dart'; import 'package:draggable_float_widget/draggable_float_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_hbb/common/shared_state.dart'; +import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/models/platform_model.dart'; +import 'package:flutter_hbb/models/state_model.dart'; import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:get/get.dart'; import 'package:window_manager/window_manager.dart'; @@ -309,6 +313,29 @@ class ChatModel with ChangeNotifier { id: session.id, ); toId = id; + + if (isDesktop) { + if (Get.isRegistered()) { + DesktopTabController tabController = Get.find(); + var index = tabController.state.value.tabs + .indexWhere((e) => e.key == session.id); + final notSelected = + index >= 0 && tabController.state.value.selected != index; + // minisized: top and switch tab + // not minisized: add count + if (await WindowController.fromWindowId(stateGlobal.windowId) + .isMinimized()) { + window_on_top(stateGlobal.windowId); + if (notSelected) { + tabController.jumpTo(index); + } + } else { + if (notSelected) { + UnreadChatCountState.find(session.id).value += 1; + } + } + } + } } else { final client = session.serverModel.clients.firstWhere((client) => client.id == id); diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index a01a5a02b..e14ff5046 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -319,7 +319,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: "30518303e28702bf6b8110465293c05d21bc4cd2" + resolved-ref: aee670819f5fe7e8b0f05e0239dafb5c62f7a84b url: "https://github.com/rustdesk-org/rustdesk_desktop_multi_window" source: git version: "0.1.0" From 5a9d50db46a949d487b49414f9c439ac75e1f3da Mon Sep 17 00:00:00 2001 From: "Miguel F. G" <116861809+flusheDData@users.noreply.github.com> Date: Thu, 6 Jul 2023 16:37:30 +0200 Subject: [PATCH 053/612] Update es.rs Removal of a space before text --- src/lang/es.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/es.rs b/src/lang/es.rs index 28d8832f0..da97b90ad 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -208,7 +208,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("x11 expected", "x11 necesario"), ("Port", "Puerto"), ("Settings", "Ajustes"), - ("Username", " Nombre de usuario"), + ("Username", "Nombre de usuario"), ("Invalid port", "Puerto incorrecto"), ("Closed manually by the peer", "Cerrado manualmente por el par"), ("Enable remote configuration modification", "Habilitar modificación remota de configuración"), From 1954f905af3293c0b3e7ead782978fb743af5932 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 7 Jul 2023 13:33:08 +0800 Subject: [PATCH 054/612] fix #4896 --- src/core_main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index f8741a72f..40c387722 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -43,9 +43,9 @@ pub fn core_main() -> Option> { } #[cfg(any(target_os = "linux", target_os = "windows"))] if args.is_empty() { - #[cfg(target_os = "linux")] - hbb_common::allow_err!(crate::platform::check_autostart_config()); if crate::check_process("--server", false) && !crate::check_process("--tray", true) { + #[cfg(target_os = "linux")] + hbb_common::allow_err!(crate::platform::check_autostart_config()); hbb_common::allow_err!(crate::run_me(vec!["--tray"])); } } From b85cb81d9eb80242e05ba8bdaf51c256c26df2a2 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 7 Jul 2023 15:55:51 +0800 Subject: [PATCH 055/612] maintain one id server only --- libs/hbb_common/src/config.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 39b40046e..571c73150 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -82,9 +82,7 @@ const CHARS: &[char] = &[ ]; pub const RENDEZVOUS_SERVERS: &[&str] = &[ - "rs-ny.rustdesk.com", "rs-sg.rustdesk.com", - "rs-cn.rustdesk.com", ]; pub const RS_PUB_KEY: &str = match option_env!("RS_PUB_KEY") { From 12149bf3e3a0e84069167628c684b8568902eea8 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 7 Jul 2023 15:59:03 +0800 Subject: [PATCH 056/612] let's maintain ny and sg only --- libs/hbb_common/src/config.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 571c73150..cba3c0ca3 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -82,6 +82,7 @@ const CHARS: &[char] = &[ ]; pub const RENDEZVOUS_SERVERS: &[&str] = &[ + "rs-ny.rustdesk.com", "rs-sg.rustdesk.com", ]; From 1f137b3542017e10fb4fb7a5a7022db7348e99af Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 7 Jul 2023 12:22:39 +0800 Subject: [PATCH 057/612] flutter: file-transfer/port forward/rdp support Signed-off-by: 21pages --- flutter/lib/common.dart | 206 +++++++++++------- .../lib/desktop/pages/file_manager_page.dart | 7 +- .../desktop/pages/file_manager_tab_page.dart | 2 + .../lib/desktop/pages/port_forward_page.dart | 3 + .../desktop/pages/port_forward_tab_page.dart | 2 + flutter/lib/main.dart | 2 +- flutter/lib/models/model.dart | 2 +- flutter/lib/utils/multi_window_manager.dart | 7 +- src/core_main.rs | 84 ++++--- 9 files changed, 200 insertions(+), 115 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index d5336e2e1..65bdc00f4 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1547,7 +1547,7 @@ Future initUniLinks() async { if (initialLink == null) { return false; } - return parseRustdeskUri(initialLink); + return handleUriLink(uriString: initialLink); } catch (err) { debugPrintStack(label: "$err"); return false; @@ -1568,7 +1568,7 @@ StreamSubscription? listenUniLinks({handleByFlutter = true}) { debugPrint("A uri was received: $uri."); if (uri != null) { if (handleByFlutter) { - callUniLinksUriHandler(uri); + handleUriLink(uri: uri); } else { bind.sendUrlScheme(url: uri.toString()); } @@ -1581,90 +1581,142 @@ StreamSubscription? listenUniLinks({handleByFlutter = true}) { return sub; } -/// Handle command line arguments -/// -/// * Returns true if we successfully handle the startup arguments. -bool checkArguments() { - if (kBootArgs.isNotEmpty) { - final ret = parseRustdeskUri(kBootArgs.first); - if (ret) { - return true; +enum UriLinkType { + remoteDesktop, + fileTransfer, + portForward, + rdp, +} + +// uri link handler +bool handleUriLink({List? cmdArgs, Uri? uri, String? uriString}) { + List? args; + if (cmdArgs != null) { + args = cmdArgs; + if (args.isNotEmpty && args[0].startsWith(kUniLinksPrefix)) { + final uri = Uri.tryParse(args[0]); + if (uri != null) { + args = urlLinkToCmdArgs(uri); + } + } + } else if (uri != null) { + args = urlLinkToCmdArgs(uri); + } else if (uriString != null) { + final uri = Uri.tryParse(uriString); + if (uri != null) { + args = urlLinkToCmdArgs(uri); } } - // bootArgs:[--connect, 362587269, --switch_uuid, e3d531cc-5dce-41e0-bd06-5d4a2b1eec05] - // check connect args - var connectIndex = kBootArgs.indexOf("--connect"); - if (connectIndex == -1) { - return false; - } - String? id = - kBootArgs.length <= connectIndex + 1 ? null : kBootArgs[connectIndex + 1]; - String? password = - kBootArgs.length <= connectIndex + 2 ? null : kBootArgs[connectIndex + 2]; - if (password != null && password.startsWith("--")) { - password = null; - } - final switchUuidIndex = kBootArgs.indexOf("--switch_uuid"); - String? switchUuid = kBootArgs.length <= switchUuidIndex + 1 - ? null - : kBootArgs[switchUuidIndex + 1]; - if (id != null) { - if (id.startsWith(kUniLinksPrefix)) { - return parseRustdeskUri(id); - } else { - // remove "--connect xxx" in the `bootArgs` array - kBootArgs.removeAt(connectIndex); - kBootArgs.removeAt(connectIndex); - // fallback to peer id - Future.delayed(Duration.zero, () { - rustDeskWinManager.newRemoteDesktop(id, - password: password, switch_uuid: switchUuid); - }); - return true; + if (args == null) return false; + + UriLinkType? type; + String? id; + String? password; + String? switchUuid; + bool? forceRelay; + for (int i = 0; i < args.length; i++) { + switch (args[i]) { + case '--connect': + case '--play': + type = UriLinkType.remoteDesktop; + id = args[i + 1]; + i++; + break; + case '--file-transfer': + type = UriLinkType.fileTransfer; + id = args[i + 1]; + i++; + break; + case '--port-forward': + type = UriLinkType.portForward; + id = args[i + 1]; + i++; + break; + case '--rdp': + type = UriLinkType.rdp; + id = args[i + 1]; + i++; + break; + case '--password': + password = args[i + 1]; + i++; + break; + case '--switch_uuid': + switchUuid = args[i + 1]; + i++; + break; + case '--relay': + forceRelay = true; + break; + default: + break; } } + if (type != null && id != null) { + switch (type) { + case UriLinkType.remoteDesktop: + Future.delayed(Duration.zero, () { + rustDeskWinManager.newRemoteDesktop(id!, + password: password, + switch_uuid: switchUuid, + forceRelay: forceRelay); + }); + break; + case UriLinkType.fileTransfer: + Future.delayed(Duration.zero, () { + rustDeskWinManager.newFileTransfer(id!, + password: password, forceRelay: forceRelay); + }); + break; + case UriLinkType.portForward: + Future.delayed(Duration.zero, () { + rustDeskWinManager.newPortForward(id!, false, + password: password, forceRelay: forceRelay); + }); + break; + case UriLinkType.rdp: + Future.delayed(Duration.zero, () { + rustDeskWinManager.newPortForward(id!, true, + password: password, forceRelay: forceRelay); + }); + break; + } + + return true; + } + return false; } -/// Parse `rustdesk://` unilinks -/// -/// Returns true if we successfully handle the uri provided. -/// [Functions] -/// 1. New Connection: rustdesk://connection/new/your_peer_id -bool parseRustdeskUri(String uriPath) { - final uri = Uri.tryParse(uriPath); - if (uri == null) { - debugPrint("uri is not valid: $uriPath"); - return false; - } - return callUniLinksUriHandler(uri); -} - -/// uri handler -/// -/// Returns true if we successfully handle the uri provided. -bool callUniLinksUriHandler(Uri uri) { - debugPrint("uni links called: $uri"); - // new connection - String peerId; +List? urlLinkToCmdArgs(Uri uri) { + String? command; + String? id; if (uri.authority == "connection" && uri.path.startsWith("/new/")) { - peerId = uri.path.substring("/new/".length); - } else if (uri.authority == "connect") { - peerId = uri.path.substring(1); - } else if (uri.authority.length > 2 && uri.path.length <= 1) { - // "/" or "" - peerId = uri.authority; - } else { - return false; + // For compatibility + command = '--connect'; + id = uri.path.substring("/new/".length); + } else if (['connect', "play", 'file-transfer', 'port-forward', 'rdp'] + .contains(uri.authority)) { + command = '--${uri.authority}'; + if (uri.path.length > 1) { + id = uri.path.substring(1); + } } - var param = uri.queryParameters; - String? switch_uuid = param["switch_uuid"]; - String? password = param["password"]; - Future.delayed(Duration.zero, () { - rustDeskWinManager.newRemoteDesktop(peerId, - password: password, switch_uuid: switch_uuid); - }); - return true; + + List args = List.empty(growable: true); + if (command != null && id != null) { + args.add(command); + args.add(id); + var param = uri.queryParameters; + String? password = param["password"]; + if (password != null) args.addAll(['--password', password]); + String? switch_uuid = param["switch_uuid"]; + if (switch_uuid != null) args.addAll(['--switch_uuid', switch_uuid]); + if (param["relay"] != null) args.add("--relay"); + return args; + } + + return null; } connectMainDesktop(String id, diff --git a/flutter/lib/desktop/pages/file_manager_page.dart b/flutter/lib/desktop/pages/file_manager_page.dart index eae3f1d69..73d10a957 100644 --- a/flutter/lib/desktop/pages/file_manager_page.dart +++ b/flutter/lib/desktop/pages/file_manager_page.dart @@ -52,10 +52,12 @@ class FileManagerPage extends StatefulWidget { const FileManagerPage( {Key? key, required this.id, + required this.password, required this.tabController, this.forceRelay}) : super(key: key); final String id; + final String? password; final bool? forceRelay; final DesktopTabController tabController; @@ -79,7 +81,10 @@ class _FileManagerPageState extends State void initState() { super.initState(); _ffi = FFI(); - _ffi.start(widget.id, isFileTransfer: true, forceRelay: widget.forceRelay); + _ffi.start(widget.id, + isFileTransfer: true, + password: widget.password, + forceRelay: widget.forceRelay); WidgetsBinding.instance.addPostFrameCallback((_) { _ffi.dialogManager .showLoading(translate('Connecting...'), onCancel: closeConnection); diff --git a/flutter/lib/desktop/pages/file_manager_tab_page.dart b/flutter/lib/desktop/pages/file_manager_tab_page.dart index d41397833..f994e461c 100644 --- a/flutter/lib/desktop/pages/file_manager_tab_page.dart +++ b/flutter/lib/desktop/pages/file_manager_tab_page.dart @@ -44,6 +44,7 @@ class _FileManagerTabPageState extends State { page: FileManagerPage( key: ValueKey(params['id']), id: params['id'], + password: params['password'], tabController: tabController, forceRelay: params['forceRelay'], ))); @@ -72,6 +73,7 @@ class _FileManagerTabPageState extends State { page: FileManagerPage( key: ValueKey(id), id: id, + password: args['password'], tabController: tabController, forceRelay: args['forceRelay'], ))); diff --git a/flutter/lib/desktop/pages/port_forward_page.dart b/flutter/lib/desktop/pages/port_forward_page.dart index 602a93d5c..6a3b7db13 100644 --- a/flutter/lib/desktop/pages/port_forward_page.dart +++ b/flutter/lib/desktop/pages/port_forward_page.dart @@ -28,11 +28,13 @@ class PortForwardPage extends StatefulWidget { const PortForwardPage( {Key? key, required this.id, + required this.password, required this.tabController, required this.isRDP, this.forceRelay}) : super(key: key); final String id; + final String password; final DesktopTabController tabController; final bool isRDP; final bool? forceRelay; @@ -55,6 +57,7 @@ class _PortForwardPageState extends State _ffi = FFI(); _ffi.start(widget.id, isPortForward: true, + password: widget.password, forceRelay: widget.forceRelay, isRdp: widget.isRDP); Get.put(_ffi, tag: 'pf_${widget.id}'); diff --git a/flutter/lib/desktop/pages/port_forward_tab_page.dart b/flutter/lib/desktop/pages/port_forward_tab_page.dart index 751fc696c..df824e431 100644 --- a/flutter/lib/desktop/pages/port_forward_tab_page.dart +++ b/flutter/lib/desktop/pages/port_forward_tab_page.dart @@ -43,6 +43,7 @@ class _PortForwardTabPageState extends State { page: PortForwardPage( key: ValueKey(params['id']), id: params['id'], + password: params['password'], tabController: tabController, isRDP: isRDP, forceRelay: params['forceRelay'], @@ -77,6 +78,7 @@ class _PortForwardTabPageState extends State { page: PortForwardPage( key: ValueKey(args['id']), id: id, + password: args['password'], isRDP: isRDP, tabController: tabController, forceRelay: args['forceRelay'], diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index eb4901686..6ff703f6a 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -134,7 +134,7 @@ void runMainApp(bool startService) async { // Check the startup argument, if we successfully handle the argument, we keep the main window hidden. final handledByUniLinks = await initUniLinks(); debugPrint("handled by uni links: $handledByUniLinks"); - if (handledByUniLinks || checkArguments()) { + if (handledByUniLinks || handleUriLink(cmdArgs: kBootArgs)) { windowManager.hide(); } else { windowManager.show(); diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 74d993a64..4eeb8e84f 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -248,7 +248,7 @@ class FfiModel with ChangeNotifier { onUrlSchemeReceived(Map evt) { final url = evt['url'].toString().trim(); - if (url.startsWith(kUniLinksPrefix) && parseRustdeskUri(url)) { + if (url.startsWith(kUniLinksPrefix) && handleUriLink(uriString: url)) { return; } switch (url) { diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index ccd976fa6..1b5eaf2a1 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -84,10 +84,12 @@ class RustDeskMultiWindowManager { } } - Future newFileTransfer(String remoteId, {bool? forceRelay}) async { + Future newFileTransfer(String remoteId, + {String? password, bool? forceRelay}) async { var msg = jsonEncode({ "type": WindowType.FileTransfer.index, "id": remoteId, + "password": password, "forceRelay": forceRelay, }); @@ -117,11 +119,12 @@ class RustDeskMultiWindowManager { } Future newPortForward(String remoteId, bool isRDP, - {bool? forceRelay}) async { + {String? password, bool? forceRelay}) async { final msg = jsonEncode({ "type": WindowType.PortForward.index, "id": remoteId, "isRDP": isRDP, + "password": password, "forceRelay": forceRelay, }); diff --git a/src/core_main.rs b/src/core_main.rs index f8741a72f..cf05ac951 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -19,15 +19,23 @@ pub fn core_main() -> Option> { let mut _is_elevate = false; let mut _is_run_as_system = false; let mut _is_quick_support = false; - let mut _is_flutter_connect = false; + let mut _is_flutter_invoke_new_connection = false; let mut arg_exe = Default::default(); for arg in std::env::args() { if i == 0 { arg_exe = arg; } else if i > 0 { #[cfg(feature = "flutter")] - if arg == "--connect" || arg == "--play" { - _is_flutter_connect = true; + if [ + "--connect", + "--play", + "--file-transfer", + "--port-forward", + "--rdp", + ] + .contains(&arg.as_str()) + { + _is_flutter_invoke_new_connection = true; } if arg == "--elevate" { _is_elevate = true; @@ -63,7 +71,7 @@ pub fn core_main() -> Option> { } } #[cfg(feature = "flutter")] - if _is_flutter_connect { + if _is_flutter_invoke_new_connection { return core_main_invoke_new_connection(std::env::args()); } let click_setup = cfg!(windows) && args.is_empty() && crate::common::is_setup(&arg_exe); @@ -318,38 +326,48 @@ fn import_config(path: &str) { /// If it returns [`Some`], then the process will continue, and flutter gui will be started. #[cfg(feature = "flutter")] fn core_main_invoke_new_connection(mut args: std::env::Args) -> Option> { - args.position(|element| { - return element == "--connect" || element == "--play"; - })?; - let mut peer_id = args.next().unwrap_or("".to_string()); - if peer_id.is_empty() { - eprintln!("please provide a valid peer id"); - return None; - } - let app_name = crate::get_app_name(); - let ext = format!(".{}", app_name.to_lowercase()); - if peer_id.ends_with(&ext) { - peer_id = peer_id.replace(&ext, ""); - } - let mut switch_uuid = None; - while let Some(item) = args.next() { - if item == "--switch_uuid" { - switch_uuid = args.next(); + let mut authority = None; + let mut id = None; + let mut param_array = vec![]; + while let Some(arg) = args.next() { + match arg.as_str() { + "--connect" | "--play" | "--file-transfer" | "--port-forward" | "--rdp" => { + authority = Some((&arg.to_string()[2..]).to_owned()); + id = args.next(); + } + "--password" => { + if let Some(password) = args.next() { + param_array.push(format!("password={password}")); + } + } + "--relay" => { + param_array.push(format!("relay=true")); + } + // inner + "--switch_uuid" => { + if let Some(switch_uuid) = args.next() { + param_array.push(format!("switch_uuid={switch_uuid}")); + } + } + _ => {} } } - let mut param_array = vec![]; - if switch_uuid.is_some() { - let switch_uuid = switch_uuid.map_or("".to_string(), |p| format!("switch_uuid={}", p)); - param_array.push(switch_uuid); + let mut uni_links = Default::default(); + if let Some(authority) = authority { + if let Some(mut id) = id { + let app_name = crate::get_app_name(); + let ext = format!(".{}", app_name.to_lowercase()); + if id.ends_with(&ext) { + id = id.replace(&ext, ""); + } + let params = param_array.join("&"); + let params_flag = if params.is_empty() { "" } else { "?" }; + uni_links = format!("rustdesk://{}/{}{}{}", authority, id, params_flag, params); + } + } + if uni_links.is_empty() { + return None; } - - let params = param_array.join("&"); - let params_flag = if params.is_empty() { "" } else { "?" }; - #[allow(unused)] - let uni_links = format!( - "rustdesk://connection/new/{}{}{}", - peer_id, params_flag, params - ); #[cfg(target_os = "linux")] return try_send_by_dbus(uni_links); From beb14f90b93afee908c8dd612f37e0d9b9957cbc Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 7 Jul 2023 18:35:15 +0800 Subject: [PATCH 058/612] add missing uri pattern: rustdesk:// Signed-off-by: 21pages --- flutter/lib/common.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 65bdc00f4..a4e46e9bd 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1593,6 +1593,7 @@ bool handleUriLink({List? cmdArgs, Uri? uri, String? uriString}) { List? args; if (cmdArgs != null) { args = cmdArgs; + // rustdesk if (args.isNotEmpty && args[0].startsWith(kUniLinksPrefix)) { final uri = Uri.tryParse(args[0]); if (uri != null) { @@ -1701,6 +1702,10 @@ List? urlLinkToCmdArgs(Uri uri) { if (uri.path.length > 1) { id = uri.path.substring(1); } + } else if (uri.authority.length > 2 && uri.path.length <= 1) { + // rustdesk:// + command = '--connect'; + id = uri.authority; } List args = List.empty(growable: true); From 53fdddb1a9bf3a289f5d329d270030950a74dce0 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 7 Jul 2023 21:57:52 +0800 Subject: [PATCH 059/612] new on_top not work on macos --- flutter/lib/common.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index a4e46e9bd..a3b175001 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -552,7 +552,7 @@ void window_on_top(int? id) async { if (id == null) { print("Bring window on top"); // main window - if (desktopType == DesktopType.cm && + if (!Platform.isMacOS && desktopType == DesktopType.cm && !(await windowManager.isMinimized() || !await windowManager.isVisible())) { await windowManager.setAlwaysOnTop(true); From 685d960b1e71dcaedec13741e8ddc66220f9c9db Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 7 Jul 2023 22:18:14 +0800 Subject: [PATCH 060/612] revert back to old window_on_top, it works fine in my test --- flutter/lib/common.dart | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index a3b175001..ca4969522 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -552,18 +552,9 @@ void window_on_top(int? id) async { if (id == null) { print("Bring window on top"); // main window - if (!Platform.isMacOS && desktopType == DesktopType.cm && - !(await windowManager.isMinimized() || - !await windowManager.isVisible())) { - await windowManager.setAlwaysOnTop(true); - Future.delayed(Duration(microseconds: 500), () async { - windowManager.setAlwaysOnTop(false); - }); - } else { - windowManager.restore(); - windowManager.show(); - windowManager.focus(); - } + windowManager.restore(); + windowManager.show(); + windowManager.focus(); rustDeskWinManager.registerActiveWindow(kWindowMainId); } else { WindowController.fromWindowId(id) From afd77181ff3570589a6e506c1abf2cc14fef8ffb Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 8 Jul 2023 12:34:40 +0800 Subject: [PATCH 061/612] println in winmain --- src/core_main.rs | 22 ++++++++++++++++++---- src/platform/mod.rs | 2 +- src/platform/windows.rs | 23 +++++++++++++++++++++++ 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index a4dee3fce..1f624d8c8 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -6,6 +6,18 @@ use hbb_common::log; #[cfg(not(any(target_os = "android", target_os = "ios")))] use hbb_common::platform::register_breakdown_handler; +#[macro_export] +macro_rules! my_println{ + ($($arg:tt)*) => { + #[cfg(not(windows))] + println!("{}", format_args!($($arg)*)); + #[cfg(windows)] + crate::platform::message_box( + &format!("{}", format_args!($($arg)*)) + ); + }; +} + /// shared by flutter and sciter main function /// /// [Note] @@ -83,7 +95,7 @@ pub fn core_main() -> Option> { args.clear(); } if args.len() > 0 && args[0] == "--version" { - println!("{}", crate::VERSION); + my_println!("{}", crate::VERSION); return None; } #[cfg(windows)] @@ -225,16 +237,18 @@ pub fn core_main() -> Option> { if args.len() == 2 { if crate::platform::is_root() { crate::ipc::set_permanent_password(args[1].to_owned()).unwrap(); + my_println!("Done!"); } else { - println!("Administrative privileges required!"); + my_println!("Administrative privileges required!"); } } return None; } else if args[0] == "--get-id" { + #[cfg(windows)] if crate::platform::is_root() { - println!("{}", crate::ipc::get_id()); + my_println!("{}", crate::ipc::get_id()); } else { - println!("Permission denied!"); + my_println!("Permission denied!"); } return None; } else if args[0] == "--check-hwcodec-config" { diff --git a/src/platform/mod.rs b/src/platform/mod.rs index 60ef1806b..e962ef9d5 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -48,7 +48,7 @@ pub fn breakdown_callback() { pub fn change_resolution(name: &str, width: usize, height: usize) -> ResultType<()> { let cur_resolution = current_resolution(name)?; // For MacOS - // to-do: Make sure the following comparison works. + // to-do: Make sure the following comparison works. // For Linux // Just run "xrandr", dpi may not be taken into consideration. // For Windows diff --git a/src/platform/windows.rs b/src/platform/windows.rs index df783b781..5ca069b80 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -2297,3 +2297,26 @@ mod tests { assert_eq!(chr, None) } } + +pub fn message_box(text: &str) { + let mut text = text.to_owned(); + if !text.ends_with("!") { + use arboard::Clipboard as ClipboardContext; + match ClipboardContext::new() { + Ok(mut ctx) => { + ctx.set_text(&text).ok(); + text = format!("{}\n\nAbove text has been copied to clipboard", &text); + } + _ => {} + } + } + let text = text + .encode_utf16() + .chain(std::iter::once(0)) + .collect::>(); + let caption = "RustDesk Output" + .encode_utf16() + .chain(std::iter::once(0)) + .collect::>(); + unsafe { MessageBoxW(std::ptr::null_mut(), text.as_ptr(), caption.as_ptr(), MB_OK) }; +} From 778f46bbb27db26770a03fd4671f2e94271ecd15 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 8 Jul 2023 12:43:55 +0800 Subject: [PATCH 062/612] do not use is_root, use check_super_user_permission instead, because on windows, not easy to run as system --- src/core_main.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index 1f624d8c8..64ac9f405 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -235,20 +235,23 @@ pub fn core_main() -> Option> { return None; } else if args[0] == "--password" { if args.len() == 2 { - if crate::platform::is_root() { + if crate::platform::is_installed() + && crate::platform::check_super_user_permission().unwrap_or_default() + { crate::ipc::set_permanent_password(args[1].to_owned()).unwrap(); my_println!("Done!"); } else { - my_println!("Administrative privileges required!"); + my_println!("Installation and administrative privileges required!"); } } return None; } else if args[0] == "--get-id" { - #[cfg(windows)] - if crate::platform::is_root() { + if crate::platform::is_installed() + && crate::platform::check_super_user_permission().unwrap_or_default() + { my_println!("{}", crate::ipc::get_id()); } else { - my_println!("Permission denied!"); + my_println!("Installation and administrative privileges required!"); } return None; } else if args[0] == "--check-hwcodec-config" { From b0f22d869381e41b4230f00b52f73705149639b8 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 8 Jul 2023 11:09:50 +0800 Subject: [PATCH 063/612] fix cm unread and add vertical divider Signed-off-by: 21pages --- flutter/lib/desktop/pages/server_page.dart | 14 +++++++++++++- flutter/lib/models/server_model.dart | 8 +------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 51e736f7b..f5d5fa4f4 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -104,6 +104,12 @@ class ConnectionManagerState extends State { final client = gFFI.serverModel.clients.firstWhereOrNull((e) => e.id == client_id); if (client != null) { + if (client.unreadChatMessageCount.value > 0) { + Future.delayed(Duration.zero, () { + client.unreadChatMessageCount.value = 0; + gFFI.chatModel.showChatPage(client.id); + }); + } windowManager.setTitle(getWindowNameWithId(client.peerId)); } } @@ -168,7 +174,13 @@ class ConnectionManagerState extends State { builder: (_, model, child) => model.isShowCMChatPage ? Expanded( child: buildRemoteBlock( - child: ChatPage(), + child: Container( + decoration: BoxDecoration( + border: Border( + right: BorderSide( + color: Theme.of(context) + .dividerColor))), + child: ChatPage()), ), flex: (kConnectionManagerWindowSizeOpenChat.width - kConnectionManagerWindowSizeClosedChat diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index cd0f52f39..97f0e706c 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -462,13 +462,7 @@ class ServerModel with ChangeNotifier { key: client.id.toString(), label: client.name, closable: false, - onTap: () { - if (client.unreadChatMessageCount.value > 0) { - client.unreadChatMessageCount.value = 0; - final chatModel = parent.target!.chatModel; - chatModel.showChatPage(client.id); - } - }, + onTap: () {}, page: desktop.buildConnectionCard(client))); Future.delayed(Duration.zero, () async { if (!hideCm) window_on_top(null); From 76987105c1d657f858fbdabb9f40a2ff01fa1f3a Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 8 Jul 2023 16:08:23 +0800 Subject: [PATCH 064/612] fix android show chat overly out of remote page Signed-off-by: 21pages --- flutter/lib/models/chat_model.dart | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index d515d6706..4eaf75d17 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -234,13 +234,21 @@ class ChatModel with ChangeNotifier { } showChatPage(int id) async { - if (isConnManager) { - if (!_isShowCMChatPage) { - await toggleCMChatPage(id); + if (isDesktop) { + if (isConnManager) { + if (!_isShowCMChatPage) { + await toggleCMChatPage(id); + } + } else { + if (_isChatOverlayHide()) { + await toggleChatOverlay(); + } } } else { - if (_isChatOverlayHide()) { - await toggleChatOverlay(); + if (id == clientModeID) { + if (_isChatOverlayHide()) { + await toggleChatOverlay(); + } } } } From ebe0681748026ea7855bb320213afe17331b257c Mon Sep 17 00:00:00 2001 From: Daniel Temme <3218591+dtemme@users.noreply.github.com> Date: Sat, 8 Jul 2023 10:37:56 +0200 Subject: [PATCH 065/612] Fix privacy URL --- flutter/lib/desktop/pages/desktop_setting_page.dart | 2 +- flutter/lib/desktop/pages/install_page.dart | 4 ++-- src/ui/index.tis | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index fe617140a..eb8a96e15 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -1559,7 +1559,7 @@ class _AboutState extends State<_About> { .marginSymmetric(vertical: 4.0)), InkWell( onTap: () { - launchUrlString('https://rustdesk.com/privacy'); + launchUrlString('https://rustdesk.com/privacy.html'); }, child: Text( translate('Privacy Statement'), diff --git a/flutter/lib/desktop/pages/install_page.dart b/flutter/lib/desktop/pages/install_page.dart index 74452c7ee..57f28f619 100644 --- a/flutter/lib/desktop/pages/install_page.dart +++ b/flutter/lib/desktop/pages/install_page.dart @@ -183,9 +183,9 @@ class _InstallPageBodyState extends State<_InstallPageBody> InkWell( hoverColor: Colors.transparent, onTap: () => - launchUrlString('https://rustdesk.com/privacy'), + launchUrlString('https://rustdesk.com/privacy.html'), child: Tooltip( - message: 'https://rustdesk.com/privacy', + message: 'https://rustdesk.com/privacy.html', child: Row(children: [ Icon(Icons.launch_outlined, size: 16) .marginOnly(right: 5), diff --git a/src/ui/index.tis b/src/ui/index.tis index 2d8eba498..f0bfc13d2 100644 --- a/src/ui/index.tis +++ b/src/ui/index.tis @@ -365,7 +365,7 @@ class MyIdMenu: Reactor.Component { msgbox("custom-nocancel-nook-hasclose", translate("About") + " " + name, "
\
Version: " + handler.get_version() + " \
Fingerprint: " + handler.get_fingerprint() + " \ -
" + translate("Privacy Statement") + "
\ +
" + translate("Privacy Statement") + "
\
" + translate("Website") + "
\
Copyright © 2023 Purslane Ltd.\
" + handler.get_license() + " \ From 8c186edd183a17d8b87b3bdfd2bab9bbb2ce9910 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 8 Jul 2023 17:55:55 +0800 Subject: [PATCH 066/612] new cm tab style --- flutter/lib/desktop/pages/server_page.dart | 3 +- .../lib/desktop/widgets/tabbar_widget.dart | 96 +++++++++++-------- 2 files changed, 60 insertions(+), 39 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index f5d5fa4f4..1192bec3a 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -150,10 +150,11 @@ class ConnectionManagerState extends State { showClose: true, onWindowCloseButton: handleWindowCloseButton, controller: serverModel.tabController, + selectedBorderColor: MyTheme.accent, maxLabelWidth: 100, tail: buildScrollJumper(), selectedTabBackgroundColor: - Theme.of(context).hintColor.withOpacity(0.2), + Theme.of(context).hintColor.withOpacity(0), tabBuilder: (key, icon, label, themeConf) { final client = serverModel.clients .firstWhereOrNull((client) => client.id.toString() == key); diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 85cf12704..64be7f58d 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -225,6 +225,7 @@ class DesktopTab extends StatelessWidget { final double? maxLabelWidth; final Color? selectedTabBackgroundColor; final Color? unSelectedTabBackgroundColor; + final Color? selectedBorderColor; final DesktopTabController controller; @@ -252,6 +253,7 @@ class DesktopTab extends StatelessWidget { this.maxLabelWidth, this.selectedTabBackgroundColor, this.unSelectedTabBackgroundColor, + this.selectedBorderColor, }) : super(key: key) { tabType = controller.tabType; isMainWindow = tabType == DesktopTabType.main || @@ -413,15 +415,17 @@ class DesktopTab extends StatelessWidget { } }, child: _ListView( - controller: controller, - tabBuilder: tabBuilder, - tabMenuBuilder: tabMenuBuilder, - labelGetter: labelGetter, - maxLabelWidth: maxLabelWidth, - selectedTabBackgroundColor: - selectedTabBackgroundColor, - unSelectedTabBackgroundColor: - unSelectedTabBackgroundColor))), + controller: controller, + tabBuilder: tabBuilder, + tabMenuBuilder: tabMenuBuilder, + labelGetter: labelGetter, + maxLabelWidth: maxLabelWidth, + selectedTabBackgroundColor: + selectedTabBackgroundColor, + unSelectedTabBackgroundColor: + unSelectedTabBackgroundColor, + selectedBorderColor: selectedBorderColor, + ))), ], ))), // hide simulated action buttons when we in compatible ui mode, because of reusing system title bar. @@ -724,6 +728,7 @@ class _ListView extends StatelessWidget { final LabelGetter? labelGetter; final double? maxLabelWidth; final Color? selectedTabBackgroundColor; + final Color? selectedBorderColor; final Color? unSelectedTabBackgroundColor; Rx get state => controller.state; @@ -736,6 +741,7 @@ class _ListView extends StatelessWidget { this.maxLabelWidth, this.selectedTabBackgroundColor, this.unSelectedTabBackgroundColor, + this.selectedBorderColor, }); /// Check whether to show ListView @@ -788,6 +794,7 @@ class _ListView extends StatelessWidget { selectedTabBackgroundColor: selectedTabBackgroundColor ?? MyTheme.tabbar(context).selectedTabBackgroundColor, unSelectedTabBackgroundColor: unSelectedTabBackgroundColor, + selectedBorderColor: selectedBorderColor, ); }).toList())); } @@ -808,6 +815,7 @@ class _Tab extends StatefulWidget { final double? maxLabelWidth; final Color? selectedTabBackgroundColor; final Color? unSelectedTabBackgroundColor; + final Color? selectedBorderColor; const _Tab({ Key? key, @@ -825,6 +833,7 @@ class _Tab extends StatefulWidget { this.maxLabelWidth, this.selectedTabBackgroundColor, this.unSelectedTabBackgroundColor, + this.selectedBorderColor, }) : super(key: key); @override @@ -915,35 +924,46 @@ class _TabState extends State<_Tab> with RestorationMixin { }, onTap: () => widget.onTap(), child: Container( - color: isSelected - ? widget.selectedTabBackgroundColor - : widget.unSelectedTabBackgroundColor, - child: Row( - children: [ - SizedBox( - height: _kTabBarHeight, - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - _buildTabContent(), - Obx((() => _CloseButton( - visible: hover.value && widget.closable, - tabSelected: isSelected, - onClose: () => widget.onClose(), - ))) - ])).paddingOnly(left: 10, right: 5), - Offstage( - offstage: !showDivider, - child: VerticalDivider( - width: 1, - indent: _kDividerIndent, - endIndent: _kDividerIndent, - color: MyTheme.tabbar(context).dividerColor, - ), - ) - ], - ), - ), + decoration: isSelected && widget.selectedBorderColor != null + ? BoxDecoration( + border: Border( + bottom: BorderSide( + color: widget.selectedBorderColor!, + width: 1, + ), + ), + ) + : null, + child: Container( + color: isSelected + ? widget.selectedTabBackgroundColor + : widget.unSelectedTabBackgroundColor, + child: Row( + children: [ + SizedBox( + height: _kTabBarHeight, + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + _buildTabContent(), + Obx((() => _CloseButton( + visible: hover.value && widget.closable, + tabSelected: isSelected, + onClose: () => widget.onClose(), + ))) + ])).paddingOnly(left: 10, right: 5), + Offstage( + offstage: !showDivider, + child: VerticalDivider( + width: 1, + indent: _kDividerIndent, + endIndent: _kDividerIndent, + color: MyTheme.tabbar(context).dividerColor, + ), + ) + ], + ), + )), ), ); } From 9f1d4e8ba61a603a9513429d9731d82d51d53f33 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 8 Jul 2023 18:22:30 +0800 Subject: [PATCH 067/612] fixed cm control page width and not resizable Signed-off-by: 21pages --- flutter/lib/desktop/pages/server_page.dart | 15 +++++---------- flutter/lib/main.dart | 1 + 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index f5d5fa4f4..279fd7e97 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -182,19 +182,14 @@ class ConnectionManagerState extends State { .dividerColor))), child: ChatPage()), ), - flex: (kConnectionManagerWindowSizeOpenChat.width - - kConnectionManagerWindowSizeClosedChat - .width) - .toInt(), ) : Offstage(), ), - Expanded( - child: pageView, - flex: kConnectionManagerWindowSizeClosedChat.width - .toInt() - - 4 // prevent stretch of the page view when chat is open, - ), + SizedBox( + width: kConnectionManagerWindowSizeClosedChat.width - + 10, // 10 is from overflow + child: pageView, + ) ], ), ), diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index 6ff703f6a..59ff18615 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -225,6 +225,7 @@ void runConnectionManagerScreen(bool hide) async { } else { await showCmWindow(isStartup: true); } + windowManager.setResizable(false); // Start the uni links handler and redirect links to Native, not for Flutter. listenUniLinks(handleByFlutter: false); } From 1648895156f9c36ddd0f0426dc07041802bafc57 Mon Sep 17 00:00:00 2001 From: dignow Date: Sat, 8 Jul 2023 15:26:24 +0800 Subject: [PATCH 068/612] fix, win privacy mode, broker process Signed-off-by: dignow --- flutter/lib/desktop/pages/server_page.dart | 1 + src/flutter.rs | 5 +++++ src/flutter_ffi.rs | 5 +++++ src/platform/windows.rs | 9 +++++++++ src/privacy_win_mag.rs | 10 ++++++++++ src/server.rs | 4 +++- src/ui_cm_interface.rs | 1 - 7 files changed, 33 insertions(+), 2 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 25be23142..fe6922938 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -40,6 +40,7 @@ class _DesktopServerPageState extends State @override void dispose() { + bind.cmClear(); windowManager.removeListener(this); super.dispose(); } diff --git a/src/flutter.rs b/src/flutter.rs index 4008b2420..6159a6de7 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -931,6 +931,11 @@ pub mod connection_manager { } } + #[cfg(target_os = "windows")] + pub fn cm_clear() { + crate::privacy_win_mag::stop(); + } + #[cfg(target_os = "android")] use hbb_common::tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender}; diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index e54168249..3703a0834 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1453,6 +1453,11 @@ pub fn cm_start_listen_ipc_thread() { crate::flutter::connection_manager::start_listen_ipc_thread(); } +pub fn cm_clear() { + #[cfg(target_os = "windows")] + crate::flutter::connection_manager::cm_clear(); +} + /// Start an ipc server for receiving the url scheme. /// /// * Should only be called in the main flutter window. diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 5ca069b80..67a2af676 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -2273,6 +2273,15 @@ fn run_after_run_cmds(silent: bool) { std::thread::sleep(std::time::Duration::from_millis(300)); } +#[inline] +pub fn try_kill_broker() { + allow_err!(run_cmds( + format!("taskkill /F /IM {}", WIN_MAG_INJECTED_PROCESS_EXE), + false, + "kill_broker" + )); +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/privacy_win_mag.rs b/src/privacy_win_mag.rs index fe0ee4f69..33fc0faf0 100644 --- a/src/privacy_win_mag.rs +++ b/src/privacy_win_mag.rs @@ -59,6 +59,12 @@ struct WindowHandlers { impl Drop for WindowHandlers { fn drop(&mut self) { + self.reset(); + } +} + +impl WindowHandlers { + fn reset(&mut self) { unsafe { if self.hthread != 0 { CloseHandle(self.hthread as _); @@ -257,6 +263,10 @@ pub fn start() -> ResultType<()> { Ok(()) } +pub fn stop() { + WND_HANDLERS.lock().unwrap().reset(); +} + unsafe fn inject_dll<'a>(hproc: HANDLE, hthread: HANDLE, dll_file: &'a str) -> ResultType<()> { let dll_file_utf16: Vec = dll_file.encode_utf16().chain(Some(0).into_iter()).collect(); diff --git a/src/server.rs b/src/server.rs index 8a2cf6178..b2d0b593f 100644 --- a/src/server.rs +++ b/src/server.rs @@ -303,7 +303,7 @@ impl Server { // get a new unique id pub fn get_new_id(&mut self) -> i32 { self.id_count += 1; - self.id_count + self.id_count } } @@ -389,6 +389,8 @@ pub async fn start_server(is_server: bool) { } #[cfg(any(target_os = "macos", target_os = "linux"))] tokio::spawn(async { sync_and_watch_config_dir().await }); + #[cfg(target_os = "windows")] + crate::platform::try_kill_broker(); crate::RendezvousMediator::start_all().await; } else { match crate::ipc::connect(1000, "").await { diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index e5a5c8e3b..9a7556d25 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -533,7 +533,6 @@ pub async fn start_ipc(cm: ConnectionManager) { e ); } - allow_err!(crate::privacy_win_mag::start()); }); #[cfg(target_os = "windows")] From 8bb851704a9978d5e56bd3a67055a76738a7aafc Mon Sep 17 00:00:00 2001 From: dignow Date: Sat, 8 Jul 2023 16:01:25 +0800 Subject: [PATCH 069/612] kill broker on exit service Signed-off-by: dignow --- src/platform/windows.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 67a2af676..c708650b8 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -2161,9 +2161,11 @@ pub fn uninstall_service(show_new_window: bool) -> bool { sc stop {app_name} sc delete {app_name} if exist \"%PROGRAMDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\{app_name} Tray.lnk\" del /f /q \"%PROGRAMDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\{app_name} Tray.lnk\" + taskkill /F /IM {broker_exe} taskkill /F /IM {app_name}.exe{filter} ", app_name = crate::get_app_name(), + broker_exe = WIN_MAG_INJECTED_PROCESS_EXE, ); if let Err(err) = run_cmds(cmds, false, "uninstall") { Config::set_option("stop-service".into(), "".into()); From 32c349dd8b34697c7be617c178e42c9d7f6fa948 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 9 Jul 2023 00:41:23 +0800 Subject: [PATCH 070/612] tmp commit Signed-off-by: dignow --- flutter/lib/desktop/pages/server_page.dart | 1 - flutter/lib/models/native_model.dart | 2 +- src/flutter.rs | 18 ++++++++++++++++-- src/flutter_ffi.rs | 6 +++--- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index fe6922938..25be23142 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -40,7 +40,6 @@ class _DesktopServerPageState extends State @override void dispose() { - bind.cmClear(); windowManager.removeListener(this); super.dispose(); } diff --git a/flutter/lib/models/native_model.dart b/flutter/lib/models/native_model.dart index 309c30f68..51940bb18 100644 --- a/flutter/lib/models/native_model.dart +++ b/flutter/lib/models/native_model.dart @@ -233,7 +233,7 @@ class PlatformFFI { '_appType:$_appType,info1-id:$id,info2-name:$name,dir:$_dir'); } if (desktopType == DesktopType.cm) { - await _ffiBind.cmStartListenIpcThread(); + await _ffiBind.cmInit(); } await _ffiBind.mainDeviceId(id: id); await _ffiBind.mainDeviceName(name: name); diff --git a/src/flutter.rs b/src/flutter.rs index 6159a6de7..d37e7d56c 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -910,7 +910,7 @@ pub mod connection_manager { #[inline] #[cfg(not(any(target_os = "android", target_os = "ios")))] - pub fn start_listen_ipc_thread() { + fn start_listen_ipc_thread() { start_listen_ipc(true); } @@ -931,8 +931,22 @@ pub mod connection_manager { } } - #[cfg(target_os = "windows")] + extern "C" fn cm_clear_hook() { + #[cfg(target_os = "windows")] + crate::privacy_win_mag::stop(); + } + + #[inline] + pub fn cm_init() { + #[cfg(not(any(target_os = "android", target_os = "ios")))] + start_listen_ipc_thread(); + #[cfg(target_os = "windows")] + shutdown_hooks::add_shutdown_hook(cm_clear_hook); + } + + #[inline] pub fn cm_clear() { + #[cfg(target_os = "windows")] crate::privacy_win_mag::stop(); } diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 3703a0834..3730a1b44 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1448,13 +1448,13 @@ pub fn main_use_texture_render() -> SyncReturn { } } -pub fn cm_start_listen_ipc_thread() { +pub fn cm_init() { #[cfg(not(any(target_os = "android", target_os = "ios")))] - crate::flutter::connection_manager::start_listen_ipc_thread(); + crate::flutter::connection_manager::cm_init(); } pub fn cm_clear() { - #[cfg(target_os = "windows")] + #[cfg(not(any(target_os = "android", target_os = "ios")))] crate::flutter::connection_manager::cm_clear(); } From e80da4af0d043e7e8ec87cc080156791a3a16f0d Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 9 Jul 2023 02:05:25 +0800 Subject: [PATCH 071/612] debug, win, privacy mode, broker Signed-off-by: dignow --- src/flutter.rs | 13 ------------- src/flutter_ffi.rs | 5 ----- src/privacy_win_mag.rs | 21 ++++++++++++--------- src/server/connection.rs | 4 ++++ 4 files changed, 16 insertions(+), 27 deletions(-) diff --git a/src/flutter.rs b/src/flutter.rs index d37e7d56c..397d8aa01 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -931,23 +931,10 @@ pub mod connection_manager { } } - extern "C" fn cm_clear_hook() { - #[cfg(target_os = "windows")] - crate::privacy_win_mag::stop(); - } - #[inline] pub fn cm_init() { #[cfg(not(any(target_os = "android", target_os = "ios")))] start_listen_ipc_thread(); - #[cfg(target_os = "windows")] - shutdown_hooks::add_shutdown_hook(cm_clear_hook); - } - - #[inline] - pub fn cm_clear() { - #[cfg(target_os = "windows")] - crate::privacy_win_mag::stop(); } #[cfg(target_os = "android")] diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 3730a1b44..c8de03862 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1453,11 +1453,6 @@ pub fn cm_init() { crate::flutter::connection_manager::cm_init(); } -pub fn cm_clear() { - #[cfg(not(any(target_os = "android", target_os = "ios")))] - crate::flutter::connection_manager::cm_clear(); -} - /// Start an ipc server for receiving the url scheme. /// /// * Should only be called in the main flutter window. diff --git a/src/privacy_win_mag.rs b/src/privacy_win_mag.rs index 33fc0faf0..446cba260 100644 --- a/src/privacy_win_mag.rs +++ b/src/privacy_win_mag.rs @@ -21,7 +21,7 @@ use winapi::{ libloaderapi::{GetModuleHandleA, GetModuleHandleExA, GetProcAddress}, memoryapi::{VirtualAllocEx, WriteProcessMemory}, processthreadsapi::{ - CreateProcessAsUserW, GetCurrentThreadId, QueueUserAPC, ResumeThread, + CreateProcessAsUserW, GetCurrentThreadId, QueueUserAPC, ResumeThread, TerminateProcess, PROCESS_INFORMATION, STARTUPINFOW, }, winbase::{WTSGetActiveConsoleSessionId, CREATE_SUSPENDED, DETACHED_PROCESS}, @@ -46,7 +46,6 @@ pub const GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS: u32 = 4; const WM_USER_EXIT_HOOK: u32 = WM_USER + 1; lazy_static::lazy_static! { - static ref DLL_FOUND: Mutex = Mutex::new(false); static ref CONN_ID: Mutex = Mutex::new(0); static ref CUR_HOOK_THREAD_ID: Mutex = Mutex::new(0); static ref WND_HANDLERS: Mutex = Mutex::new(WindowHandlers{hthread: 0, hprocess: 0}); @@ -66,16 +65,21 @@ impl Drop for WindowHandlers { impl WindowHandlers { fn reset(&mut self) { unsafe { + if self.hprocess != 0 { + let _res = TerminateProcess(self.hprocess as _, 0); + CloseHandle(self.hprocess as _); + } + self.hprocess = 0; if self.hthread != 0 { CloseHandle(self.hthread as _); } self.hthread = 0; - if self.hprocess != 0 { - CloseHandle(self.hprocess as _); - } - self.hprocess = 0; } } + + fn is_default(&self) -> bool { + self.hthread == 0 && self.hprocess == 0 + } } pub fn turn_on_privacy(conn_id: i32) -> ResultType { @@ -91,7 +95,7 @@ pub fn turn_on_privacy(conn_id: i32) -> ResultType { ); } - if !*DLL_FOUND.lock().unwrap() { + if WND_HANDLERS.lock().unwrap().is_default() { log::info!("turn_on_privacy, dll not found when started, try start"); start()?; std::thread::sleep(std::time::Duration::from_millis(1_000)); @@ -162,8 +166,6 @@ pub fn start() -> ResultType<()> { ); } - *DLL_FOUND.lock().unwrap() = true; - let hwnd = wait_find_privacy_hwnd(1_000)?; if !hwnd.is_null() { log::info!("Privacy window is ready"); @@ -263,6 +265,7 @@ pub fn start() -> ResultType<()> { Ok(()) } +#[inline] pub fn stop() { WND_HANDLERS.lock().unwrap().reset(); } diff --git a/src/server/connection.rs b/src/server/connection.rs index f276be439..4224d670a 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -2559,6 +2559,10 @@ mod raii { if active_conns_lock.is_empty() { video_service::try_plug_out_virtual_display(); } + #[cfg(all(windows))] + if active_conns_lock.is_empty() { + crate::privacy_win_mag::stop(); + } } } } From 89b3e68788f34d47931c6b0c09b8721e321e77a3 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 9 Jul 2023 10:35:10 +0800 Subject: [PATCH 072/612] add chatbox border Signed-off-by: 21pages --- flutter/lib/common/widgets/overlay.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common/widgets/overlay.dart b/flutter/lib/common/widgets/overlay.dart index 73210b5fe..a3c59d6b1 100644 --- a/flutter/lib/common/widgets/overlay.dart +++ b/flutter/lib/common/widgets/overlay.dart @@ -32,7 +32,7 @@ class DraggableChatWindow extends StatelessWidget { width: width, height: height, builder: (context, onPanUpdate) { - return isIOS + final child = isIOS ? ChatPage(chatModel: chatModel) : Scaffold( resizeToAvoidBottomInset: false, @@ -44,6 +44,10 @@ class DraggableChatWindow extends StatelessWidget { ), body: ChatPage(chatModel: chatModel), ); + return Container( + decoration: + BoxDecoration(border: Border.all(color: MyTheme.border)), + child: child); }); } From f2a02c154c02ba53bdb46ac44793461f01f9d8d8 Mon Sep 17 00:00:00 2001 From: mehdi-song Date: Sun, 9 Jul 2023 04:32:01 +0000 Subject: [PATCH 073/612] Update fa.rs --- src/lang/fa.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 10b49ee98..366e81d15 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -511,6 +511,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Collapse toolbar", "جمع کردن نوار ابزار"), ("Accept and Elevate", "بپذیرید و افزایش دهید"), ("accept_and_elevate_btn_tooltip", "را افزایش دهید UAC اتصال را بپذیرید و مجوزهای."), - ("clipboard_wait_response_timeout_tip", ""), + ("clipboard_wait_response_timeout_tip", "زمان انتظار برای مشخص شدن وضعیت کپی تمام شد."), ].iter().cloned().collect(); } From 147391eaa13fed844c585e42f734416cb5234eb6 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 9 Jul 2023 14:26:46 +0800 Subject: [PATCH 074/612] tab theme minor adjustment --- flutter/lib/desktop/widgets/tabbar_widget.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 64be7f58d..72adc42da 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -1119,14 +1119,14 @@ class TabbarTheme extends ThemeExtension { selectedIconColor: Color.fromARGB(255, 26, 26, 26), unSelectedIconColor: Color.fromARGB(255, 96, 96, 96), dividerColor: Color.fromARGB(255, 238, 238, 238), - hoverColor: Color.fromARGB(51, 158, 158, 158), - closeHoverColor: Color.fromARGB(255, 224, 224, 224), - selectedTabBackgroundColor: Color.fromARGB(255, 240, 240, 240)); + hoverColor: Colors.white54, + closeHoverColor: Colors.white, + selectedTabBackgroundColor: Colors.white54); static const dark = TabbarTheme( selectedTabIconColor: MyTheme.accent, unSelectedTabIconColor: Color.fromARGB(255, 30, 65, 98), - selectedTextColor: Color.fromARGB(255, 255, 255, 255), + selectedTextColor: Colors.white, unSelectedTextColor: Color.fromARGB(255, 192, 192, 192), selectedIconColor: Color.fromARGB(255, 192, 192, 192), unSelectedIconColor: Color.fromARGB(255, 255, 255, 255), From e21502e6a54faecf036a4f8e0be2b9abefc67f15 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 9 Jul 2023 03:53:07 +0800 Subject: [PATCH 075/612] refact, remote toolbar, menu Signed-off-by: dignow --- flutter/lib/common.dart | 4 +++ .../lib/desktop/widgets/remote_toolbar.dart | 27 +++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index ca4969522..b46b7a439 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -176,6 +176,10 @@ class MyTheme { static const Color dark = Colors.black87; static const Color button = Color(0xFF2C8CFF); static const Color hoverBorder = Color(0xFF999999); + static const Color bordDark = Colors.white24; + static const Color bordLight = Colors.black26; + static const Color dividerDark = Colors.white38; + static const Color dividerLight = Colors.black38; // ListTile static const ListTileThemeData listTileTheme = ListTileThemeData( diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index f332f31dd..b25118c40 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -1,5 +1,7 @@ import 'dart:convert'; import 'dart:ui' as ui; +import 'dart:async'; +import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -111,6 +113,13 @@ class _ToolbarTheme { static const double buttonVMargin = 6; static const double iconRadius = 8; static const double elevation = 3; + + static const Color bordDark = MyTheme.bordDark; + static const Color bordLight = MyTheme.bordLight; + + static const Color dividerDark = MyTheme.dividerDark; + static const Color dividerLight = MyTheme.dividerLight; + static const double dividerSpaceToAction = 8; } typedef DismissFunc = void Function(); @@ -477,7 +486,12 @@ class _RemoteToolbarState extends State { ), ), ), - dividerTheme: DividerThemeData(space: 4), + dividerTheme: DividerThemeData( + space: _ToolbarTheme.dividerSpaceToAction, + color: MyTheme.currentThemeMode() == ThemeMode.light + ? _ToolbarTheme.dividerLight + : _ToolbarTheme.dividerDark, + ), menuBarTheme: MenuBarThemeData( style: MenuStyle( padding: MaterialStatePropertyAll(EdgeInsets.zero), @@ -1635,7 +1649,16 @@ class _IconSubmenuButtonState extends State<_IconSubmenuButton> { width: _ToolbarTheme.buttonSize, height: _ToolbarTheme.buttonSize, child: SubmenuButton( - menuStyle: widget.menuStyle, + menuStyle: widget.menuStyle ?? + MenuStyle( + side: MaterialStateProperty.all(BorderSide( + width: 1, + color: MyTheme.currentThemeMode() == ThemeMode.light + ? _ToolbarTheme.bordLight + : _ToolbarTheme.bordDark, + )), + visualDensity: VisualDensity.comfortable, + ), style: ButtonStyle( backgroundColor: MaterialStatePropertyAll(Colors.transparent), padding: MaterialStatePropertyAll(EdgeInsets.zero), From 3148ab214a6730e628f1c60955e0a29c33ba8289 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 9 Jul 2023 12:48:28 +0800 Subject: [PATCH 076/612] refact, remote toolbar menu, windows Signed-off-by: dignow --- .../lib/desktop/widgets/remote_toolbar.dart | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index b25118c40..badf04445 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -120,6 +120,10 @@ class _ToolbarTheme { static const Color dividerDark = MyTheme.dividerDark; static const Color dividerLight = MyTheme.dividerLight; static const double dividerSpaceToAction = 8; + + static const double menuBorderRadius = 5.0; + static EdgeInsets menuPadding = Platform.isWindows ? EdgeInsets.fromLTRB(4, 12, 4, 12) : EdgeInsets.fromLTRB(6, 18, 6, 18); + static const double menuButtonBorderRadius = 3.0; } typedef DismissFunc = void Function(); @@ -484,6 +488,8 @@ class _RemoteToolbarState extends State { textStyle: MaterialStatePropertyAll( TextStyle(fontWeight: FontWeight.normal), ), + shape: MaterialStatePropertyAll(RoundedRectangleBorder( + borderRadius: BorderRadius.circular(_ToolbarTheme.menuButtonBorderRadius))), ), ), dividerTheme: DividerThemeData( @@ -1651,14 +1657,15 @@ class _IconSubmenuButtonState extends State<_IconSubmenuButton> { child: SubmenuButton( menuStyle: widget.menuStyle ?? MenuStyle( - side: MaterialStateProperty.all(BorderSide( - width: 1, - color: MyTheme.currentThemeMode() == ThemeMode.light - ? _ToolbarTheme.bordLight - : _ToolbarTheme.bordDark, - )), - visualDensity: VisualDensity.comfortable, - ), + side: MaterialStateProperty.all(BorderSide( + width: 1, + color: MyTheme.currentThemeMode() == ThemeMode.light + ? _ToolbarTheme.bordLight + : _ToolbarTheme.bordDark, + )), + shape: MaterialStatePropertyAll(RoundedRectangleBorder( + borderRadius: BorderRadius.circular(_ToolbarTheme.menuBorderRadius))), + padding: MaterialStateProperty.all(_ToolbarTheme.menuPadding)), style: ButtonStyle( backgroundColor: MaterialStatePropertyAll(Colors.transparent), padding: MaterialStatePropertyAll(EdgeInsets.zero), From 317bc21a1bd0d50c40393727ab4ab41bd522805b Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 9 Jul 2023 14:06:19 +0800 Subject: [PATCH 077/612] refact, remote toolbar menu, macos Signed-off-by: dignow --- flutter/lib/desktop/widgets/remote_toolbar.dart | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index badf04445..60d5a66c6 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -119,10 +119,12 @@ class _ToolbarTheme { static const Color dividerDark = MyTheme.dividerDark; static const Color dividerLight = MyTheme.dividerLight; - static const double dividerSpaceToAction = 8; + static double dividerSpaceToAction = Platform.isWindows ? 8 : 14; - static const double menuBorderRadius = 5.0; - static EdgeInsets menuPadding = Platform.isWindows ? EdgeInsets.fromLTRB(4, 12, 4, 12) : EdgeInsets.fromLTRB(6, 18, 6, 18); + static double menuBorderRadius = Platform.isWindows ? 5.0 : 7.0; + static EdgeInsets menuPadding = Platform.isWindows + ? EdgeInsets.fromLTRB(4, 12, 4, 12) + : EdgeInsets.fromLTRB(6, 14, 6, 14); static const double menuButtonBorderRadius = 3.0; } @@ -489,7 +491,8 @@ class _RemoteToolbarState extends State { TextStyle(fontWeight: FontWeight.normal), ), shape: MaterialStatePropertyAll(RoundedRectangleBorder( - borderRadius: BorderRadius.circular(_ToolbarTheme.menuButtonBorderRadius))), + borderRadius: + BorderRadius.circular(_ToolbarTheme.menuButtonBorderRadius))), ), ), dividerTheme: DividerThemeData( @@ -1664,8 +1667,10 @@ class _IconSubmenuButtonState extends State<_IconSubmenuButton> { : _ToolbarTheme.bordDark, )), shape: MaterialStatePropertyAll(RoundedRectangleBorder( - borderRadius: BorderRadius.circular(_ToolbarTheme.menuBorderRadius))), - padding: MaterialStateProperty.all(_ToolbarTheme.menuPadding)), + borderRadius: BorderRadius.circular( + _ToolbarTheme.menuBorderRadius))), + padding: + MaterialStateProperty.all(_ToolbarTheme.menuPadding)), style: ButtonStyle( backgroundColor: MaterialStatePropertyAll(Colors.transparent), padding: MaterialStatePropertyAll(EdgeInsets.zero), From 02c9d3fe2c3b68f63c433b38f38f3ae101f1d6f3 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 9 Jul 2023 14:16:52 +0800 Subject: [PATCH 078/612] refact, remote toolbar menu, sub menu Signed-off-by: dignow --- .../lib/desktop/widgets/remote_toolbar.dart | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 60d5a66c6..df5530bfc 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -126,6 +126,23 @@ class _ToolbarTheme { ? EdgeInsets.fromLTRB(4, 12, 4, 12) : EdgeInsets.fromLTRB(6, 14, 6, 14); static const double menuButtonBorderRadius = 3.0; + + static final defaultMenuStyle = MenuStyle( + side: MaterialStateProperty.all(BorderSide( + width: 1, + color: MyTheme.currentThemeMode() == ThemeMode.light + ? _ToolbarTheme.bordLight + : _ToolbarTheme.bordDark, + )), + shape: MaterialStatePropertyAll(RoundedRectangleBorder( + borderRadius: BorderRadius.circular(_ToolbarTheme.menuBorderRadius))), + padding: MaterialStateProperty.all(_ToolbarTheme.menuPadding), + ); + static final defaultMenuButtonStyle = ButtonStyle( + backgroundColor: MaterialStatePropertyAll(Colors.transparent), + padding: MaterialStatePropertyAll(EdgeInsets.zero), + overlayColor: MaterialStatePropertyAll(Colors.transparent), + ); } typedef DismissFunc = void Function(); @@ -1658,23 +1675,8 @@ class _IconSubmenuButtonState extends State<_IconSubmenuButton> { width: _ToolbarTheme.buttonSize, height: _ToolbarTheme.buttonSize, child: SubmenuButton( - menuStyle: widget.menuStyle ?? - MenuStyle( - side: MaterialStateProperty.all(BorderSide( - width: 1, - color: MyTheme.currentThemeMode() == ThemeMode.light - ? _ToolbarTheme.bordLight - : _ToolbarTheme.bordDark, - )), - shape: MaterialStatePropertyAll(RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - _ToolbarTheme.menuBorderRadius))), - padding: - MaterialStateProperty.all(_ToolbarTheme.menuPadding)), - style: ButtonStyle( - backgroundColor: MaterialStatePropertyAll(Colors.transparent), - padding: MaterialStatePropertyAll(EdgeInsets.zero), - overlayColor: MaterialStatePropertyAll(Colors.transparent)), + menuStyle: widget.menuStyle ?? _ToolbarTheme.defaultMenuStyle, + style: _ToolbarTheme.defaultMenuButtonStyle, onHover: (value) => setState(() { hover = value; }), @@ -1716,6 +1718,7 @@ class _SubmenuButton extends StatelessWidget { child: child, menuChildren: menuChildren.map((e) => _buildPointerTrackWidget(e, ffi)).toList(), + menuStyle: _ToolbarTheme.defaultMenuStyle, ); } } From 99d25002f7a559de18bf36eeaf13cb48daf265da Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 9 Jul 2023 16:30:27 +0800 Subject: [PATCH 079/612] add libappindicator3-1 to deb package --- build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.py b/build.py index 9e19e10e7..a8330b72b 100755 --- a/build.py +++ b/build.py @@ -285,7 +285,7 @@ Version: %s Architecture: %s Maintainer: rustdesk Homepage: https://rustdesk.com -Depends: libgtk-3-0, libxcb-randr0, libxdo3, libxfixes3, libxcb-shape0, libxcb-xfixes0, libasound2, libsystemd0, curl, libva-drm2, libva-x11-2, libvdpau1, libgstreamer-plugins-base1.0-0, libpam0g +Depends: libgtk-3-0, libxcb-randr0, libxdo3, libxfixes3, libxcb-shape0, libxcb-xfixes0, libasound2, libsystemd0, curl, libva-drm2, libva-x11-2, libvdpau1, libgstreamer-plugins-base1.0-0, libpam0g, libappindicator3-1 Description: A remote control software. """ % (version, get_arch()) From f5d0cece43e4fd5d8e0c12f078a6efde8f92e891 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 9 Jul 2023 17:59:01 +0800 Subject: [PATCH 080/612] add res/osx-dist.sh --- res/osx-dist.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100755 res/osx-dist.sh diff --git a/res/osx-dist.sh b/res/osx-dist.sh new file mode 100755 index 000000000..3e616e558 --- /dev/null +++ b/res/osx-dist.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +echo $MACOS_CODESIGN_IDENTITY +cargo install flutter_rust_bridge_codegen --version 1.75.3 --features uuid +cd flutter; flutter pub get; cd - +~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/macos/Runner/bridge_generated.h +./build.py --flutter +rm rustdesk-$VERSION.dmg +# security find-identity -v +codesign --force --options runtime -s $MACOS_CODESIGN_IDENTITY --deep --strict ./flutter/build/macos/Build/Products/Release/RustDesk.app -vvv +create-dmg --icon "RustDesk.app" 200 190 --hide-extension "RustDesk.app" --window-size 800 400 --app-drop-link 600 185 rustdesk-$VERSION.dmg ./flutter/build/macos/Build/Products/Release/RustDesk.app +codesign --force --options runtime -s $MACOS_CODESIGN_IDENTITY --deep --strict rustdesk-$VERSION.dmg -vvv +# notarize the rustdesk-${{ env.VERSION }}.dmg +rcodesign notary-submit --api-key-path ~/.p12/api-key.json --staple rustdesk-$VERSION.dmg From 65529b10b6d5bc35c2e8cf9c2252e21288dbfd1e Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 9 Jul 2023 19:14:57 +0800 Subject: [PATCH 081/612] opt mobile chat message store Signed-off-by: 21pages --- flutter/lib/common/widgets/chat_page.dart | 29 +++- flutter/lib/desktop/pages/server_page.dart | 7 +- .../lib/desktop/widgets/remote_toolbar.dart | 3 +- flutter/lib/mobile/pages/connection_page.dart | 13 ++ flutter/lib/mobile/pages/home_page.dart | 2 +- flutter/lib/mobile/pages/remote_page.dart | 4 +- flutter/lib/mobile/pages/server_page.dart | 4 +- flutter/lib/models/chat_model.dart | 147 +++++++++++------- 8 files changed, 139 insertions(+), 70 deletions(-) diff --git a/flutter/lib/common/widgets/chat_page.dart b/flutter/lib/common/widgets/chat_page.dart index 0e6be569e..c9b5292c2 100644 --- a/flutter/lib/common/widgets/chat_page.dart +++ b/flutter/lib/common/widgets/chat_page.dart @@ -7,10 +7,15 @@ import 'package:provider/provider.dart'; import '../../mobile/pages/home_page.dart'; +enum ChatPageType { + mobileMain, +} + class ChatPage extends StatelessWidget implements PageShape { late final ChatModel chatModel; + final ChatPageType? type; - ChatPage({ChatModel? chatModel}) { + ChatPage({ChatModel? chatModel, this.type}) { this.chatModel = chatModel ?? gFFI.chatModel; } @@ -22,7 +27,7 @@ class ChatPage extends StatelessWidget implements PageShape { @override final appBarActions = [ - PopupMenuButton( + PopupMenuButton( tooltip: "", icon: Icon(Icons.group), itemBuilder: (context) { @@ -31,8 +36,15 @@ class ChatPage extends StatelessWidget implements PageShape { return chatModel.messages.entries.map((entry) { final id = entry.key; final user = entry.value.chatUser; - return PopupMenuItem( - child: Text("${user.firstName} ${user.id}"), + return PopupMenuItem( + child: Row( + children: [ + Icon(id.isOut ? Icons.call_made : Icons.call_received, + color: MyTheme.accent) + .marginOnly(right: 6), + Text("${user.firstName} ${user.id}"), + ], + ), value: id, ); }).toList(); @@ -57,9 +69,9 @@ class ChatPage extends StatelessWidget implements PageShape { final chat = DashChat( onSend: chatModel.send, currentUser: chatModel.me, - messages: - chatModel.messages[chatModel.currentID]?.chatMessages ?? - [], + messages: chatModel + .messages[chatModel.currentKey]?.chatMessages ?? + [], inputOptions: InputOptions( focusNode: chatModel.inputNode, textController: chatModel.textController, @@ -128,7 +140,8 @@ class ChatPage extends StatelessWidget implements PageShape { return SelectionArea(child: chat); }), desktopType == DesktopType.cm || - chatModel.currentID == ChatModel.clientModeID + type != ChatPageType.mobileMain || + currentUser == null ? SizedBox.shrink() : Padding( padding: EdgeInsets.all(12), diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 25be23142..b560d1a41 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -100,14 +100,14 @@ class ConnectionManagerState extends State { gFFI.serverModel.tabController.onSelected = (client_id_str) { final client_id = int.tryParse(client_id_str); if (client_id != null) { - gFFI.chatModel.changeCurrentID(client_id); final client = gFFI.serverModel.clients.firstWhereOrNull((e) => e.id == client_id); if (client != null) { + gFFI.chatModel.changeCurrentID(MessageKey(client.peerId, client.id)); if (client.unreadChatMessageCount.value > 0) { Future.delayed(Duration.zero, () { client.unreadChatMessageCount.value = 0; - gFFI.chatModel.showChatPage(client.id); + gFFI.chatModel.showChatPage(MessageKey(client.peerId, client.id)); }); } windowManager.setTitle(getWindowNameWithId(client.peerId)); @@ -444,7 +444,8 @@ class _CmHeaderState extends State<_CmHeader> child: IconButton( onPressed: () => checkClickTime( client.id, - () => gFFI.chatModel.toggleCMChatPage(client.id), + () => gFFI.chatModel + .toggleCMChatPage(MessageKey(client.peerId, client.id)), ), icon: SvgPicture.asset('assets/chat2.svg'), splashRadius: kDesktopIconButtonSplashRadius, diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index f332f31dd..29151b9b8 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -1413,7 +1413,8 @@ class _ChatMenuState extends State<_ChatMenu> { initPos = Offset(pos.dx, pos.dy + _ToolbarTheme.dividerHeight); } - widget.ffi.chatModel.changeCurrentID(ChatModel.clientModeID); + widget.ffi.chatModel.changeCurrentID( + MessageKey(widget.ffi.id, ChatModel.clientModeID)); widget.ffi.chatModel.toggleChatOverlay(chatInitPos: initPos); }); } diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart index 2118b2b2f..d736e0ace 100644 --- a/flutter/lib/mobile/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -37,6 +37,7 @@ class ConnectionPage extends StatefulWidget implements PageShape { class _ConnectionPageState extends State { /// Controller for the id input bar. final _idController = IDTextEditingController(); + final RxBool _idEmpty = true.obs; /// Update url. If it's not null, means an update is available. var _updateUrl = ''; @@ -60,6 +61,10 @@ class _ConnectionPageState extends State { if (_updateUrl.isNotEmpty) setState(() {}); }); } + + _idController.addListener(() { + _idEmpty.value = _idController.text.isEmpty; + }); } @override @@ -158,6 +163,14 @@ class _ConnectionPageState extends State { ), ), ), + Obx(() => Offstage( + offstage: _idEmpty.value, + child: IconButton( + onPressed: () { + _idController.clear(); + }, + icon: Icon(Icons.clear, color: MyTheme.darkGray)), + )), SizedBox( width: 60, height: 60, diff --git a/flutter/lib/mobile/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart index f806c2576..308651d23 100644 --- a/flutter/lib/mobile/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -40,7 +40,7 @@ class _HomePageState extends State { _pages.clear(); _pages.add(ConnectionPage()); if (isAndroid) { - _pages.addAll([ChatPage(), ServerPage()]); + _pages.addAll([ChatPage(type: ChatPageType.mobileMain), ServerPage()]); } _pages.add(SettingsPage()); } diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart index 028fa2ed9..61867daa2 100644 --- a/flutter/lib/mobile/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -351,8 +351,8 @@ class _RemotePageState extends State { color: Colors.white, icon: Icon(Icons.message), onPressed: () { - gFFI.chatModel - .changeCurrentID(ChatModel.clientModeID); + gFFI.chatModel.changeCurrentID(MessageKey( + widget.id, ChatModel.clientModeID)); gFFI.chatModel.toggleChatOverlay(); }, ) diff --git a/flutter/lib/mobile/pages/server_page.dart b/flutter/lib/mobile/pages/server_page.dart index 8eadcaa2b..7ca3a9cb2 100644 --- a/flutter/lib/mobile/pages/server_page.dart +++ b/flutter/lib/mobile/pages/server_page.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/mobile/widgets/dialog.dart'; +import 'package:flutter_hbb/models/chat_model.dart'; import 'package:get/get.dart'; import 'package:provider/provider.dart'; @@ -419,7 +420,8 @@ class ConnectionManager extends StatelessWidget { ? const SizedBox.shrink() : IconButton( onPressed: () { - gFFI.chatModel.changeCurrentID(client.id); + gFFI.chatModel.changeCurrentID( + MessageKey(client.peerId, client.id)); final bar = navigationBarKey.currentWidget; if (bar != null) { bar as BottomNavigationBar; diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 4eaf75d17..9ac65148b 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -20,6 +20,24 @@ import '../common/widgets/overlay.dart'; import '../main.dart'; import 'model.dart'; +class MessageKey { + final String peerId; + final int connId; + bool get isOut => connId != ChatModel.clientModeID; + + MessageKey(this.peerId, this.connId); + + @override + bool operator ==(other) { + return other is MessageKey && + other.peerId == peerId && + other.isOut == isOut; + } + + @override + int get hashCode => peerId.hashCode ^ isOut.hashCode; +} + class MessageBody { ChatUser chatUser; List chatMessages; @@ -61,15 +79,14 @@ class ChatModel with ChangeNotifier { firstName: translate("Me"), ); - late final Map _messages = {}..[clientModeID] = - MessageBody(me, []); + late final Map _messages = {}; - var _currentID = clientModeID; + MessageKey _currentKey = MessageKey('', clientModeID); late bool _isShowCMChatPage = false; - Map get messages => _messages; + Map get messages => _messages; - int get currentID => _currentID; + MessageKey get currentKey => _currentKey; bool get isShowCMChatPage => _isShowCMChatPage; @@ -119,15 +136,7 @@ class ChatModel with ChangeNotifier { ); } - ChatUser get currentUser { - final user = messages[currentID]?.chatUser; - if (user == null) { - _currentID = clientModeID; - return me; - } else { - return user; - } - } + ChatUser? get currentUser => _messages[_currentKey]?.chatUser; showChatIconOverlay({Offset offset = const Offset(200, 50)}) { if (chatIconOverlayEntry != null) { @@ -233,11 +242,11 @@ class ChatModel with ChangeNotifier { } } - showChatPage(int id) async { + showChatPage(MessageKey key) async { if (isDesktop) { if (isConnManager) { if (!_isShowCMChatPage) { - await toggleCMChatPage(id); + await toggleCMChatPage(key); } } else { if (_isChatOverlayHide()) { @@ -245,7 +254,7 @@ class ChatModel with ChangeNotifier { } } } else { - if (id == clientModeID) { + if (key.connId == clientModeID) { if (_isChatOverlayHide()) { await toggleChatOverlay(); } @@ -253,9 +262,9 @@ class ChatModel with ChangeNotifier { } } - toggleCMChatPage(int id) async { - if (gFFI.chatModel.currentID != id) { - gFFI.chatModel.changeCurrentID(id); + toggleCMChatPage(MessageKey key) async { + if (gFFI.chatModel.currentKey != key) { + gFFI.chatModel.changeCurrentID(key); } if (_isShowCMChatPage) { _isShowCMChatPage = !_isShowCMChatPage; @@ -273,23 +282,26 @@ class ChatModel with ChangeNotifier { } } - changeCurrentID(int id) { - if (_messages.containsKey(id)) { - _currentID = id; + changeCurrentID(MessageKey key) { + updateConnIdOfKey(key); + if (_messages.containsKey(key)) { + _currentKey = key; notifyListeners(); } else { - final client = parent.target?.serverModel.clients - .firstWhere((client) => client.id == id); - if (client == null) { - return debugPrint( - "Failed to changeCurrentID,remote user doesn't exist"); + String? peerName; + if (key.connId == clientModeID) { + peerName = parent.target?.ffiModel.pi.username; + } else { + peerName = parent.target?.serverModel.clients + .firstWhereOrNull((client) => client.peerId == key.peerId) + ?.name; } final chatUser = ChatUser( - id: client.peerId, - firstName: client.name, + id: key.peerId, + firstName: peerName, ); - _messages[id] = MessageBody(chatUser, []); - _currentID = id; + _messages[key] = MessageBody(chatUser, []); + _currentKey = key; notifyListeners(); } } @@ -304,23 +316,33 @@ class ChatModel with ChangeNotifier { if (desktopType == DesktopType.cm) { await showCmWindow(); } + String? peerId; + if (id == clientModeID) { + peerId = session.id; + } else { + peerId = session.serverModel.clients + .firstWhereOrNull((e) => e.id == id) + ?.peerId; + } + if (peerId == null) { + debugPrint("Failed to receive msg, peerId is null"); + return; + } + + final messagekey = MessageKey(peerId, id); // mobile: first message show overlay icon - if (!isDesktop && chatIconOverlayEntry == null) { + if (!isDesktop && chatIconOverlayEntry == null && id == clientModeID) { showChatIconOverlay(); } // show chat page - await showChatPage(id); - - int toId = currentID; - + await showChatPage(messagekey); late final ChatUser chatUser; if (id == clientModeID) { chatUser = ChatUser( firstName: session.ffiModel.pi.username, - id: session.id, + id: peerId, ); - toId = id; if (isDesktop) { if (Get.isRegistered()) { @@ -339,14 +361,18 @@ class ChatModel with ChangeNotifier { } } else { if (notSelected) { - UnreadChatCountState.find(session.id).value += 1; + UnreadChatCountState.find(peerId).value += 1; } } } } } else { - final client = - session.serverModel.clients.firstWhere((client) => client.id == id); + final client = session.serverModel.clients + .firstWhereOrNull((client) => client.id == id); + if (client == null) { + debugPrint("Failed to receive msg, client is null"); + return; + } if (isDesktop) { window_on_top(null); // disable auto jumpTo other tab when hasFocus, and mark unread message @@ -356,20 +382,13 @@ class ChatModel with ChangeNotifier { client.unreadChatMessageCount.value += 1; } else { parent.target?.serverModel.jumpTo(id); - toId = id; } - } else { - toId = id; } chatUser = ChatUser(id: client.peerId, firstName: client.name); } - - if (!_messages.containsKey(id)) { - _messages[id] = MessageBody(chatUser, []); - } - _messages[id]!.insert( + _currentKey = messagekey; + insertMessage(_currentKey, ChatMessage(text: text, user: chatUser, createdAt: DateTime.now())); - _currentID = toId; notifyListeners(); } @@ -379,17 +398,37 @@ class ChatModel with ChangeNotifier { return; } message.text = trimmedText; - _messages[_currentID]?.insert(message); - if (_currentID == clientModeID && parent.target != null) { + insertMessage(_currentKey, message); + if (_currentKey.connId == clientModeID && parent.target != null) { bind.sessionSendChat(sessionId: sessionId, text: message.text); } else { - bind.cmSendChat(connId: _currentID, msg: message.text); + bind.cmSendChat(connId: _currentKey.connId, msg: message.text); } notifyListeners(); inputNode.requestFocus(); } + insertMessage(MessageKey key, ChatMessage message) { + updateConnIdOfKey(key); + if (!_messages.containsKey(key)) { + _messages[key] = MessageBody(message.user, []); + } + _messages[key]?.insert(message); + } + + updateConnIdOfKey(MessageKey key) { + if (_messages.keys + .toList() + .firstWhereOrNull((e) => e == key && e.connId != key.connId) != + null) { + final old = _messages.remove(key); + if (old != null) { + _messages[key] = old; + } + } + } + close() { hideChatIconOverlay(); hideChatWindowOverlay(); From 2bc41bfd90913c011048d55338745c7f84119c81 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 10 Jul 2023 00:24:35 +0800 Subject: [PATCH 082/612] wrong verification code Signed-off-by: dignow --- src/lang/ca.rs | 1 + src/lang/cn.rs | 1 + src/lang/cs.rs | 1 + src/lang/da.rs | 1 + src/lang/de.rs | 1 + src/lang/el.rs | 1 + src/lang/en.rs | 1 + src/lang/eo.rs | 1 + src/lang/es.rs | 1 + src/lang/fa.rs | 1 + src/lang/fr.rs | 1 + src/lang/hu.rs | 1 + src/lang/id.rs | 1 + src/lang/it.rs | 1 + src/lang/ja.rs | 1 + src/lang/ko.rs | 1 + src/lang/kz.rs | 1 + src/lang/lt.rs | 1 + src/lang/nl.rs | 1 + src/lang/pl.rs | 1 + src/lang/pt_PT.rs | 1 + src/lang/ptbr.rs | 1 + src/lang/ro.rs | 1 + src/lang/ru.rs | 1 + src/lang/sk.rs | 1 + src/lang/sl.rs | 1 + src/lang/sq.rs | 1 + src/lang/sr.rs | 1 + src/lang/sv.rs | 1 + src/lang/template.rs | 1 + src/lang/th.rs | 1 + src/lang/tr.rs | 1 + src/lang/tw.rs | 1 + src/lang/ua.rs | 1 + src/lang/vn.rs | 1 + 35 files changed, 35 insertions(+) diff --git a/src/lang/ca.rs b/src/lang/ca.rs index b5163f68e..dc3f10983 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nom d'usuari oblidat"), ("Password missed", "Contrasenya oblidada"), ("Wrong credentials", "Credencials incorrectes"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Editar tag"), ("Unremember Password", "Contrasenya oblidada"), ("Favorites", "Preferits"), diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 10b9301f8..88fa5f6d0 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "用户名没有填写"), ("Password missed", "密码没有填写"), ("Wrong credentials", "提供的登录信息错误"), + ("Verification code wrong or timeout", "验证码错误或已超时"), ("Edit Tag", "修改标签"), ("Unremember Password", "忘记密码"), ("Favorites", "收藏"), diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 5f279c7b9..61e6fdef3 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Chybí uživatelské jméno"), ("Password missed", "Chybí heslo"), ("Wrong credentials", "Nesprávné přihlašovací údaje"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Upravit štítek"), ("Unremember Password", "Přestat si heslo pamatovat"), ("Favorites", "Oblíbené"), diff --git a/src/lang/da.rs b/src/lang/da.rs index aaa5acf0e..6b1349adc 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Glemt brugernavn"), ("Password missed", "Glemt kodeord"), ("Wrong credentials", "Forkerte registreringsdata"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Rediger nøgleord"), ("Unremember Password", "Glem adgangskoden"), ("Favorites", "Favoritter"), diff --git a/src/lang/de.rs b/src/lang/de.rs index e3852af7d..f21312224 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Benutzername fehlt"), ("Password missed", "Passwort fehlt"), ("Wrong credentials", "Falsche Anmeldedaten"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Schlagwort bearbeiten"), ("Unremember Password", "Gespeichertes Passwort löschen"), ("Favorites", "Favoriten"), diff --git a/src/lang/el.rs b/src/lang/el.rs index 6eacba007..2e3be2883 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Δεν συμπληρώσατε το όνομα χρήστη"), ("Password missed", "Δεν συμπληρώσατε τον κωδικό πρόσβασης"), ("Wrong credentials", "Λάθος διαπιστευτήρια"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Επεξεργασία ετικέτας"), ("Unremember Password", "Διαγραφή απομνημονευμένου κωδικού"), ("Favorites", "Αγαπημένα"), diff --git a/src/lang/en.rs b/src/lang/en.rs index ded8cd145..4edb878b4 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -15,6 +15,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("whitelist_tip", "Only whitelisted IP can access me"), ("whitelist_sep", "Separated by comma, semicolon, spaces or new line"), ("Wrong credentials", "Wrong username or password"), + ("Verification code wrong or timeout", "The verification code is wrong or timeout"), ("invalid_http", "must start with http:// or https://"), ("install_daemon_tip", "For starting on boot, you need to install system service."), ("android_input_permission_tip1", "In order for a remote device to control your Android device via mouse or touch, you need to allow RustDesk to use the \"Accessibility\" service."), diff --git a/src/lang/eo.rs b/src/lang/eo.rs index e232cb582..b2822b5ed 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Uzantnomo forgesita"), ("Password missed", "Pasvorto forgesita"), ("Wrong credentials", "Identigilo aŭ pasvorto erara"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Redakti etikedo"), ("Unremember Password", "Forgesi pasvorton"), ("Favorites", "Favorataj"), diff --git a/src/lang/es.rs b/src/lang/es.rs index da97b90ad..7fdd364b1 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Olvidó su nombre de usuario"), ("Password missed", "Olvidó su contraseña"), ("Wrong credentials", "Credenciales incorrectas"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Editar tag"), ("Unremember Password", "Olvidar contraseña"), ("Favorites", "Favoritos"), diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 366e81d15..9a223306f 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "نام کاربری وجود ندارد"), ("Password missed", "رمزعبور وجود ندارد"), ("Wrong credentials", "اعتبارنامه نادرست است"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "ویرایش برچسب"), ("Unremember Password", "رمز عبور ذخیره نشود"), ("Favorites", "اتصالات دلخواه"), diff --git a/src/lang/fr.rs b/src/lang/fr.rs index e782e8dc0..ba81a0292 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nom d'utilisateur manquant"), ("Password missed", "Mot de passe manquant"), ("Wrong credentials", "Identifiant ou mot de passe erroné"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Modifier la balise"), ("Unremember Password", "Oublier le Mot de passe"), ("Favorites", "Favoris"), diff --git a/src/lang/hu.rs b/src/lang/hu.rs index d9b95eeb0..ff48649a8 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Üres felhasználónév"), ("Password missed", "Üres jelszó"), ("Wrong credentials", "Hibás felhasználónév vagy jelszó"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Címke szerkesztése"), ("Unremember Password", "A jelszó megjegyzésének törlése"), ("Favorites", "Kedvencek"), diff --git a/src/lang/id.rs b/src/lang/id.rs index 27cdcf1f1..459703b7c 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Username tidak sesuai"), ("Password missed", "Kata sandi tidak sesuai"), ("Wrong credentials", "Username atau password salah"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Ubah Tag"), ("Unremember Password", "Lupa Kata Sandi"), ("Favorites", "Favorit"), diff --git a/src/lang/it.rs b/src/lang/it.rs index 3ff2320f8..a9ff6d02e 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nome utente mancante"), ("Password missed", "Password mancante"), ("Wrong credentials", "Credenziali errate"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Modifica tag"), ("Unremember Password", "Dimentica password"), ("Favorites", "Preferiti"), diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 5def2cfca..f2abca5e7 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "ユーザー名がありません"), ("Password missed", "パスワードがありません"), ("Wrong credentials", "資格情報が間違っています"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "タグを編集"), ("Unremember Password", "パスワードの記憶を解除"), ("Favorites", "お気に入り"), diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 90040b964..3b76f53fe 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "사용자명 누락"), ("Password missed", "비밀번호 누락"), ("Wrong credentials", "틀린 인증 정보"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "태그 수정"), ("Unremember Password", "패스워드 기억하지 않기"), ("Favorites", "즐겨찾기"), diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 6bb1c7a95..eb35f8852 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Қолданушы аты бос"), ("Password missed", "Құпия сөз бос"), ("Wrong credentials", "Бұрыс тіркелгі деректер"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Тақты Өндеу"), ("Unremember Password", "Құпия сөзді Ұмыту"), ("Favorites", "Таңдаулылар"), diff --git a/src/lang/lt.rs b/src/lang/lt.rs index d2402c7f2..abebb9d2e 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Prarastas vartotojo vardas"), ("Password missed", "Slaptažodis praleistas"), ("Wrong credentials", "Klaidingi kredencialai"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Redaguoti žymą"), ("Unremember Password", "Nebeprisiminti slaptažodžio"), ("Favorites", "Parankiniai"), diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 2e0de4906..5d3f3f305 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Gebruikersnaam gemist"), ("Password missed", "Wachtwoord vergeten"), ("Wrong credentials", "Verkeerde inloggegevens"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Label Bewerken"), ("Unremember Password", "Wachtwoord vergeten"), ("Favorites", "Favorieten"), diff --git a/src/lang/pl.rs b/src/lang/pl.rs index dfa6834ca..d940acaef 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nieprawidłowe nazwa użytkownika"), ("Password missed", "Nieprawidłowe hasło"), ("Wrong credentials", "Błędne dane uwierzytelniające"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Edytuj tag"), ("Unremember Password", "Zapomnij hasło"), ("Favorites", "Ulubione"), diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 743154d5f..15c5a3773 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nome de utilizador em falta"), ("Password missed", "Palavra-chave em falta"), ("Wrong credentials", "Nome de utilizador ou palavra-chave incorrectos"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Editar Tag"), ("Unremember Password", "Esquecer Palavra-chave"), ("Favorites", "Favoritos"), diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 3bcc10e6c..aabd66b7c 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nome de usuário requerido"), ("Password missed", "Senha requerida"), ("Wrong credentials", "Nome de usuário ou senha incorretos"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Editar Tag"), ("Unremember Password", "Esquecer Senha"), ("Favorites", "Favoritos"), diff --git a/src/lang/ro.rs b/src/lang/ro.rs index b75d5950d..d31608a78 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Lipsește numele de utilizator"), ("Password missed", "Lipsește parola"), ("Wrong credentials", "Nume sau parolă greșită"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Modifică etichetă"), ("Unremember Password", "Uită parola"), ("Favorites", "Favorite"), diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 98d206131..6c7a69045 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Имя пользователя отсутствует"), ("Password missed", "Забыли пароль"), ("Wrong credentials", "Неправильные учётные данные"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Изменить метку"), ("Unremember Password", "Не сохранять пароль"), ("Favorites", "Избранное"), diff --git a/src/lang/sk.rs b/src/lang/sk.rs index c99330096..a79082918 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Chýba užívateľské meno"), ("Password missed", "Chýba heslo"), ("Wrong credentials", "Nesprávne prihlasovacie údaje"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Upraviť štítok"), ("Unremember Password", "Zabudnúť heslo"), ("Favorites", "Obľúbené"), diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 99e3f2805..4832aff2a 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Up. ime izpuščeno"), ("Password missed", "Geslo izpuščeno"), ("Wrong credentials", "Napačne poverilnice"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Uredi oznako"), ("Unremember Password", "Pozabi geslo"), ("Favorites", "Priljubljene"), diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 04735b4b8..09624a88c 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Mungon përdorusesi"), ("Password missed", "Mungon fjalëkalimi"), ("Wrong credentials", "Kredinciale të gabuara"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Edito tagun"), ("Unremember Password", "Fjalëkalim jo i kujtueshëm"), ("Favorites", "Te preferuarat"), diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 9a9e251de..f11fa95a2 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Korisničko ime promašeno"), ("Password missed", "Lozinka promašena"), ("Wrong credentials", "Pogrešno korisničko ime ili lozinka"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Izmeni oznaku"), ("Unremember Password", "Zaboravi lozinku"), ("Favorites", "Favoriti"), diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 73eb138bd..dc0fdabd5 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Användarnamn saknas"), ("Password missed", "Lösenord saknas"), ("Wrong credentials", "Fel användarnamn eller lösenord"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Ändra Tagg"), ("Unremember Password", "Glöm lösenord"), ("Favorites", "Favoriter"), diff --git a/src/lang/template.rs b/src/lang/template.rs index e5fa47fd2..d33e265c4 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", ""), ("Password missed", ""), ("Wrong credentials", ""), + ("Verification code wrong or timeout", ""), ("Edit Tag", ""), ("Unremember Password", ""), ("Favorites", ""), diff --git a/src/lang/th.rs b/src/lang/th.rs index 78aa94c6f..dee6cc2e8 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "ไม่พบข้อมูลผู้ใช้งาน"), ("Password missed", "ไม่พบรหัสผ่าน"), ("Wrong credentials", "ข้อมูลสำหรับเข้าสู่ระบบไม่ถูกต้อง"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "แก้ไขแท็ก"), ("Unremember Password", "ยกเลิกการจดจำรหัสผ่าน"), ("Favorites", "รายการโปรด"), diff --git a/src/lang/tr.rs b/src/lang/tr.rs index bc9cd694f..3695121e6 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Kullanıcı adı boş"), ("Password missed", "Şifre boş"), ("Wrong credentials", "Yanlış kimlik bilgileri"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Etiketi düzenle"), ("Unremember Password", "Şifreyi Unut"), ("Favorites", "Favoriler"), diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 1e6a9278b..ea354776b 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "缺少使用者名稱"), ("Password missed", "缺少密碼"), ("Wrong credentials", "提供的登入資訊有誤"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "編輯標籤"), ("Unremember Password", "忘掉密碼"), ("Favorites", "我的最愛"), diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 12ad485b7..1641153c7 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Імʼя користувача відсутнє"), ("Password missed", "Забули пароль"), ("Wrong credentials", "Неправильні дані"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Редагувати тег"), ("Unremember Password", "Не зберігати пароль"), ("Favorites", "Вибране"), diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 05689843b..9e4d52c48 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -233,6 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Mất tên người dùng"), ("Password missed", "Mất mật khẩu"), ("Wrong credentials", "Chứng danh bị sai"), + ("Verification code wrong or timeout", ""), ("Edit Tag", "Chỉnh sửa Tag"), ("Unremember Password", "Quên mật khẩu"), ("Favorites", "Ưa thích"), From 8a2d702348f5b7a18d6f8ead237b9c69de81f05c Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 10 Jul 2023 09:28:54 +0800 Subject: [PATCH 083/612] fix lang --- src/lang/ca.rs | 2 +- src/lang/cn.rs | 2 +- src/lang/cs.rs | 2 +- src/lang/da.rs | 2 +- src/lang/de.rs | 2 +- src/lang/el.rs | 2 +- src/lang/en.rs | 2 +- src/lang/eo.rs | 2 +- src/lang/es.rs | 2 +- src/lang/fa.rs | 2 +- src/lang/fr.rs | 2 +- src/lang/hu.rs | 2 +- src/lang/id.rs | 2 +- src/lang/it.rs | 2 +- src/lang/ja.rs | 2 +- src/lang/ko.rs | 2 +- src/lang/kz.rs | 2 +- src/lang/lt.rs | 2 +- src/lang/nl.rs | 2 +- src/lang/pl.rs | 2 +- src/lang/pt_PT.rs | 2 +- src/lang/ptbr.rs | 2 +- src/lang/ro.rs | 2 +- src/lang/ru.rs | 2 +- src/lang/sk.rs | 2 +- src/lang/sl.rs | 2 +- src/lang/sq.rs | 2 +- src/lang/sr.rs | 2 +- src/lang/sv.rs | 2 +- src/lang/template.rs | 2 +- src/lang/th.rs | 2 +- src/lang/tr.rs | 2 +- src/lang/tw.rs | 2 +- src/lang/ua.rs | 2 +- src/lang/vn.rs | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/lang/ca.rs b/src/lang/ca.rs index dc3f10983..9d540f1e7 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nom d'usuari oblidat"), ("Password missed", "Contrasenya oblidada"), ("Wrong credentials", "Credencials incorrectes"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Editar tag"), ("Unremember Password", "Contrasenya oblidada"), ("Favorites", "Preferits"), diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 88fa5f6d0..ad2b9e614 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "用户名没有填写"), ("Password missed", "密码没有填写"), ("Wrong credentials", "提供的登录信息错误"), - ("Verification code wrong or timeout", "验证码错误或已超时"), + ("The verification code is incorrect or has expired", "验证码错误或已超时"), ("Edit Tag", "修改标签"), ("Unremember Password", "忘记密码"), ("Favorites", "收藏"), diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 61e6fdef3..ae19c98c8 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Chybí uživatelské jméno"), ("Password missed", "Chybí heslo"), ("Wrong credentials", "Nesprávné přihlašovací údaje"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Upravit štítek"), ("Unremember Password", "Přestat si heslo pamatovat"), ("Favorites", "Oblíbené"), diff --git a/src/lang/da.rs b/src/lang/da.rs index 6b1349adc..2b7380670 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Glemt brugernavn"), ("Password missed", "Glemt kodeord"), ("Wrong credentials", "Forkerte registreringsdata"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Rediger nøgleord"), ("Unremember Password", "Glem adgangskoden"), ("Favorites", "Favoritter"), diff --git a/src/lang/de.rs b/src/lang/de.rs index f21312224..6b4e3a0bb 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Benutzername fehlt"), ("Password missed", "Passwort fehlt"), ("Wrong credentials", "Falsche Anmeldedaten"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Schlagwort bearbeiten"), ("Unremember Password", "Gespeichertes Passwort löschen"), ("Favorites", "Favoriten"), diff --git a/src/lang/el.rs b/src/lang/el.rs index 2e3be2883..05f7d6702 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Δεν συμπληρώσατε το όνομα χρήστη"), ("Password missed", "Δεν συμπληρώσατε τον κωδικό πρόσβασης"), ("Wrong credentials", "Λάθος διαπιστευτήρια"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Επεξεργασία ετικέτας"), ("Unremember Password", "Διαγραφή απομνημονευμένου κωδικού"), ("Favorites", "Αγαπημένα"), diff --git a/src/lang/en.rs b/src/lang/en.rs index 4edb878b4..5065b2c76 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -15,7 +15,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("whitelist_tip", "Only whitelisted IP can access me"), ("whitelist_sep", "Separated by comma, semicolon, spaces or new line"), ("Wrong credentials", "Wrong username or password"), - ("Verification code wrong or timeout", "The verification code is wrong or timeout"), + ("The verification code is incorrect or has expired", "The verification code is wrong or timeout"), ("invalid_http", "must start with http:// or https://"), ("install_daemon_tip", "For starting on boot, you need to install system service."), ("android_input_permission_tip1", "In order for a remote device to control your Android device via mouse or touch, you need to allow RustDesk to use the \"Accessibility\" service."), diff --git a/src/lang/eo.rs b/src/lang/eo.rs index b2822b5ed..393406bd9 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Uzantnomo forgesita"), ("Password missed", "Pasvorto forgesita"), ("Wrong credentials", "Identigilo aŭ pasvorto erara"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Redakti etikedo"), ("Unremember Password", "Forgesi pasvorton"), ("Favorites", "Favorataj"), diff --git a/src/lang/es.rs b/src/lang/es.rs index 7fdd364b1..51b33f08d 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Olvidó su nombre de usuario"), ("Password missed", "Olvidó su contraseña"), ("Wrong credentials", "Credenciales incorrectas"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Editar tag"), ("Unremember Password", "Olvidar contraseña"), ("Favorites", "Favoritos"), diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 9a223306f..dc21d7d7c 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "نام کاربری وجود ندارد"), ("Password missed", "رمزعبور وجود ندارد"), ("Wrong credentials", "اعتبارنامه نادرست است"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "ویرایش برچسب"), ("Unremember Password", "رمز عبور ذخیره نشود"), ("Favorites", "اتصالات دلخواه"), diff --git a/src/lang/fr.rs b/src/lang/fr.rs index ba81a0292..fe0cadfb5 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nom d'utilisateur manquant"), ("Password missed", "Mot de passe manquant"), ("Wrong credentials", "Identifiant ou mot de passe erroné"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Modifier la balise"), ("Unremember Password", "Oublier le Mot de passe"), ("Favorites", "Favoris"), diff --git a/src/lang/hu.rs b/src/lang/hu.rs index ff48649a8..c4a27265a 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Üres felhasználónév"), ("Password missed", "Üres jelszó"), ("Wrong credentials", "Hibás felhasználónév vagy jelszó"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Címke szerkesztése"), ("Unremember Password", "A jelszó megjegyzésének törlése"), ("Favorites", "Kedvencek"), diff --git a/src/lang/id.rs b/src/lang/id.rs index 459703b7c..3566d8e48 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Username tidak sesuai"), ("Password missed", "Kata sandi tidak sesuai"), ("Wrong credentials", "Username atau password salah"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Ubah Tag"), ("Unremember Password", "Lupa Kata Sandi"), ("Favorites", "Favorit"), diff --git a/src/lang/it.rs b/src/lang/it.rs index a9ff6d02e..262395183 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nome utente mancante"), ("Password missed", "Password mancante"), ("Wrong credentials", "Credenziali errate"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Modifica tag"), ("Unremember Password", "Dimentica password"), ("Favorites", "Preferiti"), diff --git a/src/lang/ja.rs b/src/lang/ja.rs index f2abca5e7..41cf9ddc7 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "ユーザー名がありません"), ("Password missed", "パスワードがありません"), ("Wrong credentials", "資格情報が間違っています"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "タグを編集"), ("Unremember Password", "パスワードの記憶を解除"), ("Favorites", "お気に入り"), diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 3b76f53fe..dfa86082e 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "사용자명 누락"), ("Password missed", "비밀번호 누락"), ("Wrong credentials", "틀린 인증 정보"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "태그 수정"), ("Unremember Password", "패스워드 기억하지 않기"), ("Favorites", "즐겨찾기"), diff --git a/src/lang/kz.rs b/src/lang/kz.rs index eb35f8852..fd487e426 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Қолданушы аты бос"), ("Password missed", "Құпия сөз бос"), ("Wrong credentials", "Бұрыс тіркелгі деректер"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Тақты Өндеу"), ("Unremember Password", "Құпия сөзді Ұмыту"), ("Favorites", "Таңдаулылар"), diff --git a/src/lang/lt.rs b/src/lang/lt.rs index abebb9d2e..85fbef050 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Prarastas vartotojo vardas"), ("Password missed", "Slaptažodis praleistas"), ("Wrong credentials", "Klaidingi kredencialai"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Redaguoti žymą"), ("Unremember Password", "Nebeprisiminti slaptažodžio"), ("Favorites", "Parankiniai"), diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 5d3f3f305..004eea12e 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Gebruikersnaam gemist"), ("Password missed", "Wachtwoord vergeten"), ("Wrong credentials", "Verkeerde inloggegevens"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Label Bewerken"), ("Unremember Password", "Wachtwoord vergeten"), ("Favorites", "Favorieten"), diff --git a/src/lang/pl.rs b/src/lang/pl.rs index d940acaef..9cea7993c 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nieprawidłowe nazwa użytkownika"), ("Password missed", "Nieprawidłowe hasło"), ("Wrong credentials", "Błędne dane uwierzytelniające"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Edytuj tag"), ("Unremember Password", "Zapomnij hasło"), ("Favorites", "Ulubione"), diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 15c5a3773..88253881a 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nome de utilizador em falta"), ("Password missed", "Palavra-chave em falta"), ("Wrong credentials", "Nome de utilizador ou palavra-chave incorrectos"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Editar Tag"), ("Unremember Password", "Esquecer Palavra-chave"), ("Favorites", "Favoritos"), diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index aabd66b7c..519e7fce5 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nome de usuário requerido"), ("Password missed", "Senha requerida"), ("Wrong credentials", "Nome de usuário ou senha incorretos"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Editar Tag"), ("Unremember Password", "Esquecer Senha"), ("Favorites", "Favoritos"), diff --git a/src/lang/ro.rs b/src/lang/ro.rs index d31608a78..0d793cb86 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Lipsește numele de utilizator"), ("Password missed", "Lipsește parola"), ("Wrong credentials", "Nume sau parolă greșită"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Modifică etichetă"), ("Unremember Password", "Uită parola"), ("Favorites", "Favorite"), diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 6c7a69045..3be5f9810 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Имя пользователя отсутствует"), ("Password missed", "Забыли пароль"), ("Wrong credentials", "Неправильные учётные данные"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Изменить метку"), ("Unremember Password", "Не сохранять пароль"), ("Favorites", "Избранное"), diff --git a/src/lang/sk.rs b/src/lang/sk.rs index a79082918..f3700e37c 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Chýba užívateľské meno"), ("Password missed", "Chýba heslo"), ("Wrong credentials", "Nesprávne prihlasovacie údaje"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Upraviť štítok"), ("Unremember Password", "Zabudnúť heslo"), ("Favorites", "Obľúbené"), diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 4832aff2a..cfd5d7f08 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Up. ime izpuščeno"), ("Password missed", "Geslo izpuščeno"), ("Wrong credentials", "Napačne poverilnice"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Uredi oznako"), ("Unremember Password", "Pozabi geslo"), ("Favorites", "Priljubljene"), diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 09624a88c..d2b15c6ac 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Mungon përdorusesi"), ("Password missed", "Mungon fjalëkalimi"), ("Wrong credentials", "Kredinciale të gabuara"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Edito tagun"), ("Unremember Password", "Fjalëkalim jo i kujtueshëm"), ("Favorites", "Te preferuarat"), diff --git a/src/lang/sr.rs b/src/lang/sr.rs index f11fa95a2..fe98b2505 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Korisničko ime promašeno"), ("Password missed", "Lozinka promašena"), ("Wrong credentials", "Pogrešno korisničko ime ili lozinka"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Izmeni oznaku"), ("Unremember Password", "Zaboravi lozinku"), ("Favorites", "Favoriti"), diff --git a/src/lang/sv.rs b/src/lang/sv.rs index dc0fdabd5..9e6b1f770 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Användarnamn saknas"), ("Password missed", "Lösenord saknas"), ("Wrong credentials", "Fel användarnamn eller lösenord"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Ändra Tagg"), ("Unremember Password", "Glöm lösenord"), ("Favorites", "Favoriter"), diff --git a/src/lang/template.rs b/src/lang/template.rs index d33e265c4..692936236 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", ""), ("Password missed", ""), ("Wrong credentials", ""), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", ""), ("Unremember Password", ""), ("Favorites", ""), diff --git a/src/lang/th.rs b/src/lang/th.rs index dee6cc2e8..d3570290e 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "ไม่พบข้อมูลผู้ใช้งาน"), ("Password missed", "ไม่พบรหัสผ่าน"), ("Wrong credentials", "ข้อมูลสำหรับเข้าสู่ระบบไม่ถูกต้อง"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "แก้ไขแท็ก"), ("Unremember Password", "ยกเลิกการจดจำรหัสผ่าน"), ("Favorites", "รายการโปรด"), diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 3695121e6..7f82efc1b 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Kullanıcı adı boş"), ("Password missed", "Şifre boş"), ("Wrong credentials", "Yanlış kimlik bilgileri"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Etiketi düzenle"), ("Unremember Password", "Şifreyi Unut"), ("Favorites", "Favoriler"), diff --git a/src/lang/tw.rs b/src/lang/tw.rs index ea354776b..30e527ec6 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "缺少使用者名稱"), ("Password missed", "缺少密碼"), ("Wrong credentials", "提供的登入資訊有誤"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "編輯標籤"), ("Unremember Password", "忘掉密碼"), ("Favorites", "我的最愛"), diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 1641153c7..222038f7c 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Імʼя користувача відсутнє"), ("Password missed", "Забули пароль"), ("Wrong credentials", "Неправильні дані"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Редагувати тег"), ("Unremember Password", "Не зберігати пароль"), ("Favorites", "Вибране"), diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 9e4d52c48..fd4b10506 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Mất tên người dùng"), ("Password missed", "Mất mật khẩu"), ("Wrong credentials", "Chứng danh bị sai"), - ("Verification code wrong or timeout", ""), + ("The verification code is incorrect or has expired", ""), ("Edit Tag", "Chỉnh sửa Tag"), ("Unremember Password", "Quên mật khẩu"), ("Favorites", "Ưa thích"), From e1bd925877cf0189f5a399f5134eb88fef2c2fb9 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 10 Jul 2023 09:30:41 +0800 Subject: [PATCH 084/612] fix lang --- src/lang/en.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lang/en.rs b/src/lang/en.rs index 5065b2c76..ded8cd145 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -15,7 +15,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("whitelist_tip", "Only whitelisted IP can access me"), ("whitelist_sep", "Separated by comma, semicolon, spaces or new line"), ("Wrong credentials", "Wrong username or password"), - ("The verification code is incorrect or has expired", "The verification code is wrong or timeout"), ("invalid_http", "must start with http:// or https://"), ("install_daemon_tip", "For starting on boot, you need to install system service."), ("android_input_permission_tip1", "In order for a remote device to control your Android device via mouse or touch, you need to allow RustDesk to use the \"Accessibility\" service."), From 6c6f6c081eb3cc6fcdaa0eab2ef12c821a2eb6ed Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 10 Jul 2023 09:40:41 +0800 Subject: [PATCH 085/612] mobile unread chat Signed-off-by: 21pages --- flutter/lib/common.dart | 12 ++++--- flutter/lib/common/widgets/chat_page.dart | 30 ++++++++++++++-- flutter/lib/mobile/pages/home_page.dart | 3 ++ flutter/lib/models/chat_model.dart | 43 +++++++++++++++++++++-- flutter/lib/models/server_model.dart | 3 ++ 5 files changed, 82 insertions(+), 9 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index ca4969522..559ddf468 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -2189,19 +2189,21 @@ Widget buildRemoteBlock({required Widget child, WhetherUseRemoteBlock? use}) { )); } -Widget unreadMessageCountBuilder(RxInt? count) { +Widget unreadMessageCountBuilder(RxInt? count, + {double? size, double? fontSize, double? marginLeft}) { return Obx(() => Offstage( offstage: !((count?.value ?? 0) > 0), child: Container( - width: 16, - height: 16, + width: size ?? 16, + height: size ?? 16, decoration: BoxDecoration( color: Colors.red, shape: BoxShape.circle, ), child: Center( child: Text("${count?.value ?? 0}", - maxLines: 1, style: TextStyle(color: Colors.white, fontSize: 10)), + maxLines: 1, + style: TextStyle(color: Colors.white, fontSize: fontSize ?? 10)), ), - ).marginOnly(left: 4))); + ).marginOnly(left: marginLeft ?? 4))); } diff --git a/flutter/lib/common/widgets/chat_page.dart b/flutter/lib/common/widgets/chat_page.dart index c9b5292c2..a79e673d5 100644 --- a/flutter/lib/common/widgets/chat_page.dart +++ b/flutter/lib/common/widgets/chat_page.dart @@ -29,20 +29,36 @@ class ChatPage extends StatelessWidget implements PageShape { final appBarActions = [ PopupMenuButton( tooltip: "", - icon: Icon(Icons.group), + icon: Stack( + children: [ + Icon(Icons.group), + Positioned( + top: 0, + right: 0, + child: unreadMessageCountBuilder(gFFI.chatModel.mobileUnreadSum, + marginLeft: 0, size: 12, fontSize: 8)) + ], + ), itemBuilder: (context) { // only mobile need [appBarActions], just bind gFFI.chatModel final chatModel = gFFI.chatModel; return chatModel.messages.entries.map((entry) { final id = entry.key; final user = entry.value.chatUser; + final client = gFFI.serverModel.clients + .firstWhereOrNull((e) => e.id == id.connId); return PopupMenuItem( child: Row( children: [ - Icon(id.isOut ? Icons.call_made : Icons.call_received, + Icon( + id.isOut + ? Icons.call_made_rounded + : Icons.call_received_rounded, color: MyTheme.accent) .marginOnly(right: 6), Text("${user.firstName} ${user.id}"), + if (client != null) + unreadMessageCountBuilder(client.unreadChatMessageCount) ], ), value: id, @@ -72,6 +88,11 @@ class ChatPage extends StatelessWidget implements PageShape { messages: chatModel .messages[chatModel.currentKey]?.chatMessages ?? [], + readOnly: type == ChatPageType.mobileMain && + (chatModel.currentKey.connId == + ChatModel.clientModeID || + gFFI.serverModel.clients.every( + (e) => e.id != chatModel.currentKey.connId)), inputOptions: InputOptions( focusNode: chatModel.inputNode, textController: chatModel.textController, @@ -147,6 +168,11 @@ class ChatPage extends StatelessWidget implements PageShape { padding: EdgeInsets.all(12), child: Row( children: [ + Icon( + chatModel.currentKey.isOut + ? Icons.call_made_rounded + : Icons.call_received_rounded, + color: MyTheme.accent), Icon(Icons.account_circle, color: MyTheme.accent80), SizedBox(width: 5), Text( diff --git a/flutter/lib/mobile/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart index 308651d23..61674807a 100644 --- a/flutter/lib/mobile/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -22,6 +22,7 @@ class HomePage extends StatefulWidget { class _HomePageState extends State { var _selectedIndex = 0; + int get selectedIndex => _selectedIndex; final List _pages = []; void refreshPages() { @@ -82,6 +83,8 @@ class _HomePageState extends State { gFFI.chatModel.hideChatWindowOverlay(); } _selectedIndex = index; + gFFI.chatModel + .mobileClearClientUnread(gFFI.chatModel.currentKey.connId); }), ), body: _pages.elementAt(_selectedIndex), diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 9ac65148b..a50a7deb1 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/common/shared_state.dart'; import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; +import 'package:flutter_hbb/mobile/pages/home_page.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:flutter_hbb/models/state_model.dart'; import 'package:get/get_rx/src/rx_types/rx_types.dart'; @@ -67,6 +68,7 @@ class ChatModel with ChangeNotifier { Rx get voiceCallStatus => _voiceCallStatus; TextEditingController textController = TextEditingController(); + RxInt mobileUnreadSum = 0.obs; @override void dispose() { @@ -304,6 +306,7 @@ class ChatModel with ChangeNotifier { _currentKey = key; notifyListeners(); } + mobileClearClientUnread(key.connId); } receive(int id, String text) async { @@ -383,12 +386,22 @@ class ChatModel with ChangeNotifier { } else { parent.target?.serverModel.jumpTo(id); } + } else { + if (HomePage.homeKey.currentState?.selectedIndex != 1 || + _currentKey.peerId != client.peerId) { + client.unreadChatMessageCount.value += 1; + mobileUpdateUnreadSum(); + } } chatUser = ChatUser(id: client.peerId, firstName: client.name); } - _currentKey = messagekey; - insertMessage(_currentKey, + insertMessage(messagekey, ChatMessage(text: text, user: chatUser, createdAt: DateTime.now())); + if (id == clientModeID || _currentKey.peerId.isEmpty) { + // Invalid + _currentKey = messagekey; + mobileClearClientUnread(messagekey.connId); + } notifyListeners(); } @@ -427,6 +440,32 @@ class ChatModel with ChangeNotifier { _messages[key] = old; } } + if (_currentKey == key) { + _currentKey = key; // hash != assign + } + } + + void mobileUpdateUnreadSum() { + if (!isMobile) return; + var sum = 0; + parent.target?.serverModel.clients + .map((e) => sum += e.unreadChatMessageCount.value) + .toList(); + Future.delayed(Duration.zero, () { + mobileUnreadSum.value = sum; + }); + } + + void mobileClearClientUnread(int id) { + if (!isMobile) return; + final client = parent.target?.serverModel.clients + .firstWhereOrNull((client) => client.id == id); + if (client != null) { + Future.delayed(Duration.zero, () { + client.unreadChatMessageCount.value = 0; + mobileUpdateUnreadSum(); + }); + } } close() { diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 97f0e706c..3f5fb43f9 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -5,6 +5,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/main.dart'; +import 'package:flutter_hbb/models/chat_model.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:get/get.dart'; import 'package:wakelock/wakelock.dart'; @@ -474,6 +475,8 @@ class ServerModel with ChangeNotifier { cmHiddenTimer = null; }); } + parent.target?.chatModel + .updateConnIdOfKey(MessageKey(client.peerId, client.id)); } void showLoginDialog(Client client) { From 21c1c06a20b2e67aa1404bc56240dcca8a00863d Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 10 Jul 2023 14:38:13 +0800 Subject: [PATCH 086/612] change to 1.2.1 --- .github/workflows/flutter-build.yml | 2 +- .github/workflows/flutter-tag.yml | 2 +- .github/workflows/history.yml | 2 +- Cargo.toml | 2 +- flutter/pubspec.yaml | 2 +- res/PKGBUILD | 2 +- res/bump.sh | 2 ++ res/rpm-flutter-suse.spec | 2 +- res/rpm-flutter.spec | 2 +- res/rpm.spec | 2 +- 10 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 res/bump.sh diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index bf30c52dc..b0d23a880 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -22,7 +22,7 @@ env: # vcpkg version: 2023.04.15 # for multiarch gcc compatibility VCPKG_COMMIT_ID: "501db0f17ef6df184fcdbfbe0f87cde2313b6ab1" - VERSION: "1.2.0" + VERSION: "1.2.1" NDK_VERSION: "r25c" #signing keys env variable checks ANDROID_SIGNING_KEY: '${{ secrets.ANDROID_SIGNING_KEY }}' diff --git a/.github/workflows/flutter-tag.yml b/.github/workflows/flutter-tag.yml index 1857840c1..8ec4a9242 100644 --- a/.github/workflows/flutter-tag.yml +++ b/.github/workflows/flutter-tag.yml @@ -15,4 +15,4 @@ jobs: secrets: inherit with: upload-artifact: true - upload-tag: "1.2.0" + upload-tag: "1.2.1" diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index b1ca74721..40483d712 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -10,7 +10,7 @@ env: # vcpkg version: 2022.05.10 # for multiarch gcc compatibility VCPKG_COMMIT_ID: "14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44" - VERSION: "1.2.0" + VERSION: "1.2.1" jobs: build-for-windows-2022-12-05: diff --git a/Cargo.toml b/Cargo.toml index 67d2440f0..cb6b768bf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rustdesk" -version = "1.2.0" +version = "1.2.1" authors = ["rustdesk "] edition = "2021" build= "build.rs" diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index f8541c12d..60861eb87 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # 1.1.9-1 works for android, but for ios it becomes 1.1.91, need to set it to 1.1.9-a.1 for iOS, will get 1.1.9.1, but iOS store not allow 4 numbers -version: 1.2.0 +version: 1.2.1 environment: sdk: ">=2.17.0" diff --git a/res/PKGBUILD b/res/PKGBUILD index 7aa50d563..78fb5aeba 100644 --- a/res/PKGBUILD +++ b/res/PKGBUILD @@ -1,5 +1,5 @@ pkgname=rustdesk -pkgver=1.2.0 +pkgver=1.2.1 pkgrel=0 epoch= pkgdesc="" diff --git a/res/bump.sh b/res/bump.sh new file mode 100644 index 000000000..c23ca4d06 --- /dev/null +++ b/res/bump.sh @@ -0,0 +1,2 @@ +#! /usr/bin/env bash +sed -i "s/$1/$2/g" res/*spec res/PKGBUILD flutter/pubspec.yaml Cargo.toml .github/workflows/*yml diff --git a/res/rpm-flutter-suse.spec b/res/rpm-flutter-suse.spec index 0ac93b716..94dfbeab0 100644 --- a/res/rpm-flutter-suse.spec +++ b/res/rpm-flutter-suse.spec @@ -1,5 +1,5 @@ Name: rustdesk -Version: 1.2.0 +Version: 1.2.1 Release: 0 Summary: RPM package License: GPL-3.0 diff --git a/res/rpm-flutter.spec b/res/rpm-flutter.spec index 937d36d5a..c98c08ecb 100644 --- a/res/rpm-flutter.spec +++ b/res/rpm-flutter.spec @@ -1,5 +1,5 @@ Name: rustdesk -Version: 1.2.0 +Version: 1.2.1 Release: 0 Summary: RPM package License: GPL-3.0 diff --git a/res/rpm.spec b/res/rpm.spec index 517da6872..484505fbc 100644 --- a/res/rpm.spec +++ b/res/rpm.spec @@ -1,5 +1,5 @@ Name: rustdesk -Version: 1.2.0 +Version: 1.2.1 Release: 0 Summary: RPM package License: GPL-3.0 From 142813a7e7ed4f73dbded44352e908d686c7672a Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 10 Jul 2023 15:48:15 +0800 Subject: [PATCH 087/612] fix bump.sh --- appimage/AppImageBuilder-aarch64.yml | 4 ++-- appimage/AppImageBuilder-x86_64.yml | 4 ++-- flatpak/rustdesk.json | 4 ++-- res/bump.sh | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/appimage/AppImageBuilder-aarch64.yml b/appimage/AppImageBuilder-aarch64.yml index 87c854d5d..4c552b6f6 100644 --- a/appimage/AppImageBuilder-aarch64.yml +++ b/appimage/AppImageBuilder-aarch64.yml @@ -2,7 +2,7 @@ version: 1 script: - rm -rf ./AppDir || true - - bsdtar -zxvf ../rustdesk-1.2.0.deb + - bsdtar -zxvf ../rustdesk-1.2.1.deb - tar -xvf ./data.tar.xz - mkdir ./AppDir - mv ./usr ./AppDir/usr @@ -17,7 +17,7 @@ AppDir: id: rustdesk name: rustdesk icon: rustdesk - version: 1.2.0 + version: 1.2.1 exec: usr/lib/rustdesk/rustdesk exec_args: $@ apt: diff --git a/appimage/AppImageBuilder-x86_64.yml b/appimage/AppImageBuilder-x86_64.yml index 8f72afd08..7bc8f231f 100644 --- a/appimage/AppImageBuilder-x86_64.yml +++ b/appimage/AppImageBuilder-x86_64.yml @@ -2,7 +2,7 @@ version: 1 script: - rm -rf ./AppDir || true - - bsdtar -zxvf ../rustdesk-1.2.0.deb + - bsdtar -zxvf ../rustdesk-1.2.1.deb - tar -xvf ./data.tar.xz - mkdir ./AppDir - mv ./usr ./AppDir/usr @@ -17,7 +17,7 @@ AppDir: id: rustdesk name: rustdesk icon: rustdesk - version: 1.2.0 + version: 1.2.1 exec: usr/lib/rustdesk/rustdesk exec_args: $@ apt: diff --git a/flatpak/rustdesk.json b/flatpak/rustdesk.json index 3cfca4d30..53736dd9e 100644 --- a/flatpak/rustdesk.json +++ b/flatpak/rustdesk.json @@ -12,7 +12,7 @@ "name": "rustdesk", "buildsystem": "simple", "build-commands": [ - "bsdtar -zxvf rustdesk-1.2.0.deb", + "bsdtar -zxvf rustdesk-1.2.1.deb", "tar -xvf ./data.tar.xz", "cp -r ./usr/* /app/", "mkdir -p /app/bin && ln -s /app/lib/rustdesk/rustdesk /app/bin/rustdesk", @@ -25,7 +25,7 @@ "sources": [ { "type": "file", - "path": "../rustdesk-1.2.0.deb" + "path": "../rustdesk-1.2.1.deb" }, { "type": "file", diff --git a/res/bump.sh b/res/bump.sh index c23ca4d06..36421a775 100644 --- a/res/bump.sh +++ b/res/bump.sh @@ -1,2 +1,2 @@ #! /usr/bin/env bash -sed -i "s/$1/$2/g" res/*spec res/PKGBUILD flutter/pubspec.yaml Cargo.toml .github/workflows/*yml +sed -i "s/$1/$2/g" res/*spec res/PKGBUILD flutter/pubspec.yaml Cargo.toml .github/workflows/*yml flatpak/*json appimage/*yml From 22994ee8f2febb96a5ccad506c94bce10673bc79 Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 10 Jul 2023 16:02:47 +0800 Subject: [PATCH 088/612] opt chatModel, linux same startup height as dart Signed-off-by: 21pages --- flutter/lib/common/widgets/chat_page.dart | 39 ++++++++++----- flutter/lib/desktop/pages/server_page.dart | 5 +- .../lib/desktop/widgets/remote_toolbar.dart | 2 +- flutter/lib/mobile/pages/remote_page.dart | 4 +- flutter/lib/mobile/pages/server_page.dart | 2 +- flutter/lib/models/chat_model.dart | 48 ++++++++++--------- flutter/linux/my_application.cc | 2 +- 7 files changed, 62 insertions(+), 40 deletions(-) diff --git a/flutter/lib/common/widgets/chat_page.dart b/flutter/lib/common/widgets/chat_page.dart index a79e673d5..17267b71b 100644 --- a/flutter/lib/common/widgets/chat_page.dart +++ b/flutter/lib/common/widgets/chat_page.dart @@ -9,6 +9,7 @@ import '../../mobile/pages/home_page.dart'; enum ChatPageType { mobileMain, + desktopCM, } class ChatPage extends StatelessWidget implements PageShape { @@ -43,30 +44,39 @@ class ChatPage extends StatelessWidget implements PageShape { // only mobile need [appBarActions], just bind gFFI.chatModel final chatModel = gFFI.chatModel; return chatModel.messages.entries.map((entry) { - final id = entry.key; + final key = entry.key; final user = entry.value.chatUser; final client = gFFI.serverModel.clients - .firstWhereOrNull((e) => e.id == id.connId); + .firstWhereOrNull((e) => e.id == key.connId); + final connected = + gFFI.serverModel.clients.any((e) => e.id == key.connId); return PopupMenuItem( child: Row( children: [ Icon( - id.isOut + key.isOut ? Icons.call_made_rounded : Icons.call_received_rounded, color: MyTheme.accent) .marginOnly(right: 6), Text("${user.firstName} ${user.id}"), + if (connected) + Container( + width: 10, + height: 10, + decoration: BoxDecoration( + shape: BoxShape.circle, color: Colors.green), + ).marginSymmetric(horizontal: 2), if (client != null) unreadMessageCountBuilder(client.unreadChatMessageCount) ], ), - value: id, + value: key, ); }).toList(); }, - onSelected: (id) { - gFFI.chatModel.changeCurrentID(id); + onSelected: (key) { + gFFI.chatModel.changeCurrentKey(key); }) ]; @@ -79,6 +89,17 @@ class ChatPage extends StatelessWidget implements PageShape { child: Consumer( builder: (context, chatModel, child) { final currentUser = chatModel.currentUser; + final readOnly = type == ChatPageType.mobileMain && + (chatModel.currentKey.connId == ChatModel.clientModeID || + gFFI.serverModel.clients.every((e) => + e.id != chatModel.currentKey.connId || + chatModel.currentUser == null)) || + type == ChatPageType.desktopCM && + gFFI.serverModel.clients + .firstWhereOrNull( + (e) => e.id == chatModel.currentKey.connId) + ?.disconnected == + true; return Stack( children: [ LayoutBuilder(builder: (context, constraints) { @@ -88,11 +109,7 @@ class ChatPage extends StatelessWidget implements PageShape { messages: chatModel .messages[chatModel.currentKey]?.chatMessages ?? [], - readOnly: type == ChatPageType.mobileMain && - (chatModel.currentKey.connId == - ChatModel.clientModeID || - gFFI.serverModel.clients.every( - (e) => e.id != chatModel.currentKey.connId)), + readOnly: readOnly, inputOptions: InputOptions( focusNode: chatModel.inputNode, textController: chatModel.textController, diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index b560d1a41..c26c0bf7a 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -103,7 +103,7 @@ class ConnectionManagerState extends State { final client = gFFI.serverModel.clients.firstWhereOrNull((e) => e.id == client_id); if (client != null) { - gFFI.chatModel.changeCurrentID(MessageKey(client.peerId, client.id)); + gFFI.chatModel.changeCurrentKey(MessageKey(client.peerId, client.id)); if (client.unreadChatMessageCount.value > 0) { Future.delayed(Duration.zero, () { client.unreadChatMessageCount.value = 0; @@ -181,7 +181,8 @@ class ConnectionManagerState extends State { right: BorderSide( color: Theme.of(context) .dividerColor))), - child: ChatPage()), + child: + ChatPage(type: ChatPageType.desktopCM)), ), ) : Offstage(), diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 29151b9b8..c36b1a41a 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -1413,7 +1413,7 @@ class _ChatMenuState extends State<_ChatMenu> { initPos = Offset(pos.dx, pos.dy + _ToolbarTheme.dividerHeight); } - widget.ffi.chatModel.changeCurrentID( + widget.ffi.chatModel.changeCurrentKey( MessageKey(widget.ffi.id, ChatModel.clientModeID)); widget.ffi.chatModel.toggleChatOverlay(chatInitPos: initPos); }); diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart index 61867daa2..a769fd187 100644 --- a/flutter/lib/mobile/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -72,6 +72,8 @@ class _RemotePageState extends State { keyboardVisibilityController.onChange.listen(onSoftKeyboardChanged); _blockableOverlayState.applyFfi(gFFI); initSharedStates(widget.id); + gFFI.chatModel + .changeCurrentKey(MessageKey(widget.id, ChatModel.clientModeID)); } @override @@ -351,7 +353,7 @@ class _RemotePageState extends State { color: Colors.white, icon: Icon(Icons.message), onPressed: () { - gFFI.chatModel.changeCurrentID(MessageKey( + gFFI.chatModel.changeCurrentKey(MessageKey( widget.id, ChatModel.clientModeID)); gFFI.chatModel.toggleChatOverlay(); }, diff --git a/flutter/lib/mobile/pages/server_page.dart b/flutter/lib/mobile/pages/server_page.dart index 7ca3a9cb2..c215564fa 100644 --- a/flutter/lib/mobile/pages/server_page.dart +++ b/flutter/lib/mobile/pages/server_page.dart @@ -420,7 +420,7 @@ class ConnectionManager extends StatelessWidget { ? const SizedBox.shrink() : IconButton( onPressed: () { - gFFI.chatModel.changeCurrentID( + gFFI.chatModel.changeCurrentKey( MessageKey(client.peerId, client.id)); final bar = navigationBarKey.currentWidget; if (bar != null) { diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index a50a7deb1..8b5027037 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -12,6 +12,7 @@ import 'package:flutter_hbb/models/platform_model.dart'; import 'package:flutter_hbb/models/state_model.dart'; import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:get/get.dart'; +import 'package:uuid/uuid.dart'; import 'package:window_manager/window_manager.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -77,13 +78,13 @@ class ChatModel with ChangeNotifier { } final ChatUser me = ChatUser( - id: "", + id: Uuid().v4().toString(), firstName: translate("Me"), ); late final Map _messages = {}; - MessageKey _currentKey = MessageKey('', clientModeID); + MessageKey _currentKey = MessageKey('', -2); // -2 is invalid value late bool _isShowCMChatPage = false; Map get messages => _messages; @@ -266,7 +267,7 @@ class ChatModel with ChangeNotifier { toggleCMChatPage(MessageKey key) async { if (gFFI.chatModel.currentKey != key) { - gFFI.chatModel.changeCurrentID(key); + gFFI.chatModel.changeCurrentKey(key); } if (_isShowCMChatPage) { _isShowCMChatPage = !_isShowCMChatPage; @@ -284,28 +285,29 @@ class ChatModel with ChangeNotifier { } } - changeCurrentID(MessageKey key) { + changeCurrentKey(MessageKey key) { updateConnIdOfKey(key); - if (_messages.containsKey(key)) { - _currentKey = key; - notifyListeners(); + String? peerName; + if (key.connId == clientModeID) { + peerName = parent.target?.ffiModel.pi.username; } else { - String? peerName; - if (key.connId == clientModeID) { - peerName = parent.target?.ffiModel.pi.username; - } else { - peerName = parent.target?.serverModel.clients - .firstWhereOrNull((client) => client.peerId == key.peerId) - ?.name; - } + peerName = parent.target?.serverModel.clients + .firstWhereOrNull((client) => client.peerId == key.peerId) + ?.name; + } + if (!_messages.containsKey(key)) { final chatUser = ChatUser( id: key.peerId, firstName: peerName, ); _messages[key] = MessageBody(chatUser, []); - _currentKey = key; - notifyListeners(); + } else { + if (peerName != null && peerName.isNotEmpty) { + _messages[key]?.chatUser.firstName = peerName; + } } + _currentKey = key; + notifyListeners(); mobileClearClientUnread(key.connId); } @@ -388,7 +390,7 @@ class ChatModel with ChangeNotifier { } } else { if (HomePage.homeKey.currentState?.selectedIndex != 1 || - _currentKey.peerId != client.peerId) { + _currentKey != messagekey) { client.unreadChatMessageCount.value += 1; mobileUpdateUnreadSum(); } @@ -398,7 +400,7 @@ class ChatModel with ChangeNotifier { insertMessage(messagekey, ChatMessage(text: text, user: chatUser, createdAt: DateTime.now())); if (id == clientModeID || _currentKey.peerId.isEmpty) { - // Invalid + // client or invalid _currentKey = messagekey; mobileClearClientUnread(messagekey.connId); } @@ -435,12 +437,12 @@ class ChatModel with ChangeNotifier { .toList() .firstWhereOrNull((e) => e == key && e.connId != key.connId) != null) { - final old = _messages.remove(key); - if (old != null) { - _messages[key] = old; + final value = _messages.remove(key); + if (value != null) { + _messages[key] = value; } } - if (_currentKey == key) { + if (_currentKey == key || _currentKey.peerId.isEmpty) { _currentKey = key; // hash != assign } } diff --git a/flutter/linux/my_application.cc b/flutter/linux/my_application.cc index 21e25fa28..b96c16f3f 100644 --- a/flutter/linux/my_application.cc +++ b/flutter/linux/my_application.cc @@ -64,7 +64,7 @@ static void my_application_activate(GApplication* application) { int width = 800, height = 600; if (gIsConnectionManager) { width = 300; - height = 400; + height = 490; } gtk_window_set_default_size(window, width, height); // <-- comment this line gtk_widget_show(GTK_WIDGET(window)); From c890cbf6110bcbd39cacc6cf9f36fda86394c52d Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Mon, 10 Jul 2023 10:29:44 +0200 Subject: [PATCH 089/612] Update italian language --- src/lang/it.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 262395183..bb287d1ea 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nome utente mancante"), ("Password missed", "Password mancante"), ("Wrong credentials", "Credenziali errate"), - ("The verification code is incorrect or has expired", ""), + ("The verification code is incorrect or has expired", "Il codice di verifica non è corretto o è scaduto"), ("Edit Tag", "Modifica tag"), ("Unremember Password", "Dimentica password"), ("Favorites", "Preferiti"), From 2acb5d58cf6fdff087ceb603fbe2fb694473c714 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Mon, 10 Jul 2023 11:14:40 +0200 Subject: [PATCH 090/612] Update de.rs --- src/lang/de.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index 6b4e3a0bb..db726dba5 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Benutzername fehlt"), ("Password missed", "Passwort fehlt"), ("Wrong credentials", "Falsche Anmeldedaten"), - ("The verification code is incorrect or has expired", ""), + ("The verification code is incorrect or has expired", "Der Verifizierungscode ist falsch oder abgelaufen"), ("Edit Tag", "Schlagwort bearbeiten"), ("Unremember Password", "Gespeichertes Passwort löschen"), ("Favorites", "Favoriten"), From a96eb236c1c7b3d62fe8a819ba861f54921021e9 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 10 Jul 2023 17:31:04 +0800 Subject: [PATCH 091/612] try to fix issue #3261 with new api, but not sure if it works --- Cargo.lock | 2 +- src/platform/macos.mm | 21 +++++++++++++++++++++ src/platform/macos.rs | 10 ++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index a46da69fa..8ce814328 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5146,7 +5146,7 @@ dependencies = [ [[package]] name = "rustdesk" -version = "1.2.0" +version = "1.2.1" dependencies = [ "android_logger", "arboard", diff --git a/src/platform/macos.mm b/src/platform/macos.mm index d40a56014..4a19973fc 100644 --- a/src/platform/macos.mm +++ b/src/platform/macos.mm @@ -4,6 +4,27 @@ #include #include +extern "C" bool CanUseNewApiForScreenCaptureCheck() { + #ifdef NO_InputMonitoringAuthStatus + return false; + #else + NSOperatingSystemVersion version = [[NSProcessInfo processInfo] operatingSystemVersion]; + return version.majorVersion >= 11; + #endif +} + +extern "C" bool IsCanScreenRecording(bool prompt) { + #ifdef NO_InputMonitoringAuthStatus + return false; + #else + bool res = CGPreflightScreenCaptureAccess(); + if (!res && prompt) { + CGRequestScreenCaptureAccess(); + } + return res; + #endif +} + // https://github.com/codebytere/node-mac-permissions/blob/main/permissions.mm diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 3f480f839..fb61c7335 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -34,6 +34,8 @@ extern "C" { static kAXTrustedCheckOptionPrompt: CFStringRef; fn AXIsProcessTrustedWithOptions(options: CFDictionaryRef) -> BOOL; fn InputMonitoringAuthStatus(_: BOOL) -> BOOL; + fn IsCanScreenRecording(_: BOOL) -> BOOL; + fn CanUseNewApiForScreenCaptureCheck() -> BOOL; fn MacCheckAdminAuthorization() -> BOOL; fn MacGetModeNum(display: u32, numModes: *mut u32) -> BOOL; fn MacGetModes( @@ -71,6 +73,14 @@ pub fn is_can_input_monitoring(prompt: bool) -> bool { // https://stackoverflow.com/questions/56597221/detecting-screen-recording-settings-on-macos-catalina/ // remove just one app from all the permissions: tccutil reset All com.carriez.rustdesk pub fn is_can_screen_recording(prompt: bool) -> bool { + // we got some report that we show no permission even after set it, so we try to use new api for screen recording check + // the new api is only available on macOS >= 10.15, but on stackoverflow, some people said it works on >= 10.16 (crash on 10.15), + // but also some said it has bug on 10.16, so we just use it on 11.0. + unsafe { + if CanUseNewApiForScreenCaptureCheck() == YES { + return IsCanScreenRecording(if prompt { YES } else { NO }) == YES; + } + } let mut can_record_screen: bool = false; unsafe { let our_pid: i32 = std::process::id() as _; From 193426a3c10cb063db644068ac6f0df43c197341 Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 10 Jul 2023 17:59:04 +0800 Subject: [PATCH 092/612] try fix linux cm abnormal show Signed-off-by: 21pages --- flutter/lib/desktop/pages/server_page.dart | 2 +- flutter/lib/models/chat_model.dart | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index c26c0bf7a..deed70085 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -185,7 +185,7 @@ class ConnectionManagerState extends State { ChatPage(type: ChatPageType.desktopCM)), ), ) - : Offstage(), + : Expanded(child: Container()), ), SizedBox( width: kConnectionManagerWindowSizeClosedChat.width - diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 8b5027037..8c59f5f8a 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -270,16 +270,16 @@ class ChatModel with ChangeNotifier { gFFI.chatModel.changeCurrentKey(key); } if (_isShowCMChatPage) { - _isShowCMChatPage = !_isShowCMChatPage; - notifyListeners(); - await windowManager.show(); await windowManager.setSizeAlignment( kConnectionManagerWindowSizeClosedChat, Alignment.topRight); + await windowManager.show(); + _isShowCMChatPage = !_isShowCMChatPage; + notifyListeners(); } else { requestChatInputFocus(); - await windowManager.show(); await windowManager.setSizeAlignment( kConnectionManagerWindowSizeOpenChat, Alignment.topRight); + await windowManager.show(); _isShowCMChatPage = !_isShowCMChatPage; notifyListeners(); } From 745f33a8c17dda5b51cdaaf5bd1c775bbe2758cb Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 10 Jul 2023 21:03:35 +0800 Subject: [PATCH 093/612] opt mobile unread and autoSizeTextField Signed-off-by: 21pages --- flutter/lib/common.dart | 17 +++++- flutter/lib/common/widgets/chat_page.dart | 41 ++------------ .../lib/desktop/pages/remote_tab_page.dart | 3 +- flutter/lib/desktop/pages/server_page.dart | 3 +- flutter/lib/mobile/pages/connection_page.dart | 4 +- flutter/lib/mobile/pages/home_page.dart | 56 +++++++++++++++++-- flutter/lib/mobile/pages/server_page.dart | 3 +- flutter/lib/models/chat_model.dart | 2 +- flutter/pubspec.lock | 8 +++ flutter/pubspec.yaml | 1 + src/lang/ca.rs | 2 + src/lang/cn.rs | 2 + src/lang/cs.rs | 2 + src/lang/da.rs | 2 + src/lang/de.rs | 2 + src/lang/el.rs | 2 + src/lang/eo.rs | 2 + src/lang/es.rs | 2 + src/lang/fa.rs | 2 + src/lang/fr.rs | 2 + src/lang/hu.rs | 2 + src/lang/id.rs | 2 + src/lang/it.rs | 2 + src/lang/ja.rs | 2 + src/lang/ko.rs | 2 + src/lang/kz.rs | 2 + src/lang/lt.rs | 2 + src/lang/nl.rs | 2 + src/lang/pl.rs | 2 + src/lang/pt_PT.rs | 2 + src/lang/ptbr.rs | 2 + src/lang/ro.rs | 2 + src/lang/ru.rs | 2 + src/lang/sk.rs | 2 + src/lang/sl.rs | 2 + src/lang/sq.rs | 2 + src/lang/sr.rs | 2 + src/lang/sv.rs | 2 + src/lang/template.rs | 2 + src/lang/th.rs | 2 + src/lang/tr.rs | 2 + src/lang/tw.rs | 2 + src/lang/ua.rs | 2 + src/lang/vn.rs | 2 + 44 files changed, 160 insertions(+), 46 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 9de43693a..314b1f9d3 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -2194,7 +2194,7 @@ Widget buildRemoteBlock({required Widget child, WhetherUseRemoteBlock? use}) { } Widget unreadMessageCountBuilder(RxInt? count, - {double? size, double? fontSize, double? marginLeft}) { + {double? size, double? fontSize}) { return Obx(() => Offstage( offstage: !((count?.value ?? 0) > 0), child: Container( @@ -2209,5 +2209,18 @@ Widget unreadMessageCountBuilder(RxInt? count, maxLines: 1, style: TextStyle(color: Colors.white, fontSize: fontSize ?? 10)), ), - ).marginOnly(left: marginLeft ?? 4))); + ))); +} + +Widget unreadTopRightBuilder(RxInt? count, + {Widget? icon, double? size, double? fontSize}) { + return Stack( + children: [ + icon ?? Icon(Icons.chat), + Positioned( + top: 0, + right: 0, + child: unreadMessageCountBuilder(count, size: 12, fontSize: 8)) + ], + ); } diff --git a/flutter/lib/common/widgets/chat_page.dart b/flutter/lib/common/widgets/chat_page.dart index 17267b71b..b6611d3ed 100644 --- a/flutter/lib/common/widgets/chat_page.dart +++ b/flutter/lib/common/widgets/chat_page.dart @@ -24,22 +24,14 @@ class ChatPage extends StatelessWidget implements PageShape { final title = translate("Chat"); @override - final icon = Icon(Icons.chat); + final icon = unreadTopRightBuilder(gFFI.chatModel.mobileUnreadSum); @override final appBarActions = [ PopupMenuButton( tooltip: "", - icon: Stack( - children: [ - Icon(Icons.group), - Positioned( - top: 0, - right: 0, - child: unreadMessageCountBuilder(gFFI.chatModel.mobileUnreadSum, - marginLeft: 0, size: 12, fontSize: 8)) - ], - ), + icon: unreadTopRightBuilder(gFFI.chatModel.mobileUnreadSum, + icon: Icon(Icons.group)), itemBuilder: (context) { // only mobile need [appBarActions], just bind gFFI.chatModel final chatModel = gFFI.chatModel; @@ -65,10 +57,12 @@ class ChatPage extends StatelessWidget implements PageShape { width: 10, height: 10, decoration: BoxDecoration( - shape: BoxShape.circle, color: Colors.green), + shape: BoxShape.circle, + color: Color.fromARGB(255, 46, 205, 139)), ).marginSymmetric(horizontal: 2), if (client != null) unreadMessageCountBuilder(client.unreadChatMessageCount) + .marginOnly(left: 4) ], ), value: key, @@ -88,7 +82,6 @@ class ChatPage extends StatelessWidget implements PageShape { color: Theme.of(context).scaffoldBackgroundColor, child: Consumer( builder: (context, chatModel, child) { - final currentUser = chatModel.currentUser; final readOnly = type == ChatPageType.mobileMain && (chatModel.currentKey.connId == ChatModel.clientModeID || gFFI.serverModel.clients.every((e) => @@ -177,28 +170,6 @@ class ChatPage extends StatelessWidget implements PageShape { ); return SelectionArea(child: chat); }), - desktopType == DesktopType.cm || - type != ChatPageType.mobileMain || - currentUser == null - ? SizedBox.shrink() - : Padding( - padding: EdgeInsets.all(12), - child: Row( - children: [ - Icon( - chatModel.currentKey.isOut - ? Icons.call_made_rounded - : Icons.call_received_rounded, - color: MyTheme.accent), - Icon(Icons.account_circle, color: MyTheme.accent80), - SizedBox(width: 5), - Text( - "${currentUser.firstName} ${currentUser.id}", - style: TextStyle(color: MyTheme.accent), - ), - ], - ), - ), ], ).paddingOnly(bottom: 8); }, diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 0b4f4094a..9ee04f8b1 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -205,7 +205,8 @@ class _ConnectionTabPageState extends State { ).paddingOnly(right: 5), ), label, - unreadMessageCountBuilder(UnreadChatCountState.find(key)), + unreadMessageCountBuilder(UnreadChatCountState.find(key)) + .marginOnly(left: 4), ], ); diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index deed70085..53088f69e 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -165,7 +165,8 @@ class ConnectionManagerState extends State { message: key, waitDuration: Duration(seconds: 1), child: label), - unreadMessageCountBuilder(client?.unreadChatMessageCount), + unreadMessageCountBuilder(client?.unreadChatMessageCount) + .marginOnly(left: 4), ], ); }, diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart index d736e0ace..f2680db39 100644 --- a/flutter/lib/mobile/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:auto_size_text_field/auto_size_text_field.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/common/formatter/id_formatter.dart'; import 'package:get/get.dart'; @@ -131,7 +132,8 @@ class _ConnectionPageState extends State { Expanded( child: Container( padding: const EdgeInsets.only(left: 16, right: 16), - child: TextField( + child: AutoSizeTextField( + minFontSize: 18, autocorrect: false, enableSuggestions: false, keyboardType: TextInputType.visiblePassword, diff --git a/flutter/lib/mobile/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart index 61674807a..f902f6743 100644 --- a/flutter/lib/mobile/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -1,13 +1,14 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/mobile/pages/server_page.dart'; import 'package:flutter_hbb/mobile/pages/settings_page.dart'; +import 'package:get/get.dart'; import '../../common.dart'; import '../../common/widgets/chat_page.dart'; import 'connection_page.dart'; abstract class PageShape extends Widget { final String title = ""; - final Icon icon = Icon(null); + final Widget icon = Icon(null); final List appBarActions = []; } @@ -63,7 +64,7 @@ class _HomePageState extends State { // backgroundColor: MyTheme.grayBg, appBar: AppBar( centerTitle: true, - title: Text("RustDesk"), + title: appTitle(), actions: _pages.elementAt(_selectedIndex).appBarActions, ), bottomNavigationBar: BottomNavigationBar( @@ -81,15 +82,62 @@ class _HomePageState extends State { if (index == 1 && _selectedIndex != index) { gFFI.chatModel.hideChatIconOverlay(); gFFI.chatModel.hideChatWindowOverlay(); + gFFI.chatModel + .mobileClearClientUnread(gFFI.chatModel.currentKey.connId); } _selectedIndex = index; - gFFI.chatModel - .mobileClearClientUnread(gFFI.chatModel.currentKey.connId); }), ), body: _pages.elementAt(_selectedIndex), )); } + + Widget appTitle() { + final currentUser = gFFI.chatModel.currentUser; + final currentKey = gFFI.chatModel.currentKey; + if (_selectedIndex == 1 && + currentUser != null && + currentKey.peerId.isNotEmpty) { + final connected = + gFFI.serverModel.clients.any((e) => e.id == currentKey.connId); + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Tooltip( + message: currentKey.isOut + ? translate('outgoing connection') + : translate('incomming connection'), + child: Icon( + currentKey.isOut + ? Icons.call_made_rounded + : Icons.call_received_rounded, + ), + ), + Expanded( + child: Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "${currentUser.firstName} ${currentUser.id}", + ), + if (connected) + Container( + width: 10, + height: 10, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Color.fromARGB(255, 133, 246, 199)), + ).marginSymmetric(horizontal: 2), + ], + ), + ), + ), + ], + ); + } + return Text("RustDesk"); + } } class WebHomePage extends StatelessWidget { diff --git a/flutter/lib/mobile/pages/server_page.dart b/flutter/lib/mobile/pages/server_page.dart index c215564fa..a8255180b 100644 --- a/flutter/lib/mobile/pages/server_page.dart +++ b/flutter/lib/mobile/pages/server_page.dart @@ -428,7 +428,8 @@ class ConnectionManager extends StatelessWidget { bar.onTap!(1); } }, - icon: const Icon(Icons.chat))) + icon: unreadTopRightBuilder( + client.unreadChatMessageCount))) ], ), client.authorized diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 8c59f5f8a..e44a694d4 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -25,7 +25,7 @@ import 'model.dart'; class MessageKey { final String peerId; final int connId; - bool get isOut => connId != ChatModel.clientModeID; + bool get isOut => connId == ChatModel.clientModeID; MessageKey(this.peerId, this.connId); diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index e14ff5046..ead34415f 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -65,6 +65,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.0" + auto_size_text_field: + dependency: "direct main" + description: + name: auto_size_text_field + sha256: "8967129167193fefbb7a8707ade1bb71f9e52b9a5cf6da0132b7f6b7946c5a3f" + url: "https://pub.dev" + source: hosted + version: "2.2.1" back_button_interceptor: dependency: "direct main" description: diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index 60861eb87..4b6e964ad 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -96,6 +96,7 @@ dependencies: percent_indicator: ^4.2.2 dropdown_button2: ^2.0.0 uuid: ^3.0.7 + auto_size_text_field: ^2.2.1 dev_dependencies: icons_launcher: ^2.0.4 diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 9d540f1e7..9835c0704 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index ad2b9e614..3a2a6ebd0 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "接受并提权"), ("accept_and_elevate_btn_tooltip", "接受连接并提升 UAC 权限"), ("clipboard_wait_response_timeout_tip", "等待拷贝响应超时"), + ("incomming connection", "收到的连接"), + ("outgoing connection", "发起的连接"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index ae19c98c8..945493799 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 2b7380670..e57a43b4e 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index db726dba5..38e1bb4c1 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Akzeptieren und Rechte erhöhen"), ("accept_and_elevate_btn_tooltip", "Akzeptieren Sie die Verbindung und erhöhen Sie die UAC-Berechtigungen."), ("clipboard_wait_response_timeout_tip", "Zeitüberschreitung beim Warten auf die Antwort der Kopie."), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 05f7d6702..cb5d627e7 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 393406bd9..dd8fc25d0 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 51b33f08d..351fa90ee 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Aceptar y Elevar"), ("accept_and_elevate_btn_tooltip", "Aceptar la conexión y elevar permisos UAC."), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index dc21d7d7c..92a080212 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "بپذیرید و افزایش دهید"), ("accept_and_elevate_btn_tooltip", "را افزایش دهید UAC اتصال را بپذیرید و مجوزهای."), ("clipboard_wait_response_timeout_tip", "زمان انتظار برای مشخص شدن وضعیت کپی تمام شد."), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index fe0cadfb5..885b2c17a 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index c4a27265a..67c1b366a 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 3566d8e48..637cb6ea1 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index bb287d1ea..879efcb29 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Accetta ed eleva"), ("accept_and_elevate_btn_tooltip", "Accetta la connessione ed eleva le autorizzazioni UAC."), ("clipboard_wait_response_timeout_tip", "Timeout attesa risposta della copia."), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 41cf9ddc7..14e572010 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index dfa86082e..878cb3821 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index fd487e426..b811820da 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 85fbef050..ad702dfa0 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 004eea12e..cff145f39 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Accepteren en Verheffen"), ("accept_and_elevate_btn_tooltip", "Accepteer de verbinding en verhoog de UAC-machtigingen."), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 9cea7993c..8d9a3b533 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Akceptuj i Podnieś uprawnienia"), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 88253881a..26069573a 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 519e7fce5..25de11130 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 0d793cb86..25dd4655f 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 3be5f9810..f1fc7c045 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Принять и повысить"), ("accept_and_elevate_btn_tooltip", "Разрешить подключение и повысить права UAC."), ("clipboard_wait_response_timeout_tip", "Время ожидания копирования буфера обмена, истекло"), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index f3700e37c..4350615a1 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index cfd5d7f08..73011b67b 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index d2b15c6ac..927b84f4e 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index fe98b2505..b86dece15 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 9e6b1f770..423fdfd17 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 692936236..88abd2215 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index d3570290e..9bb86ba59 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 7f82efc1b..c7ba5fceb 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 30e527ec6..1253aee75 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", "收到的連接"), + ("outgoing connection", "發起的連接"), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 222038f7c..8ba47e6c5 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Погодитись та розширити права"), ("accept_and_elevate_btn_tooltip", "Погодити підключення та розширити дозволи UAC."), ("clipboard_wait_response_timeout_tip", "Вийшов час очікування копіювання."), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index fd4b10506..3b6f5205f 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -513,5 +513,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Chấp nhận và Cấp Quyền"), ("accept_and_elevate_btn_tooltip", "Chấp nhận kết nối và cấp các quyền UAC."), ("clipboard_wait_response_timeout_tip", ""), + ("incomming connection", ""), + ("outgoing connection", ""), ].iter().cloned().collect(); } From fcf6b5466a953fe045d48e2755eabbc2adcd868b Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 10 Jul 2023 21:58:27 +0800 Subject: [PATCH 094/612] mobile show chat icon overlay on main page Signed-off-by: 21pages --- flutter/lib/mobile/pages/home_page.dart | 3 +++ flutter/lib/mobile/pages/remote_page.dart | 3 --- flutter/lib/models/chat_model.dart | 10 +++++++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/flutter/lib/mobile/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart index f902f6743..5713830bc 100644 --- a/flutter/lib/mobile/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_hbb/common/widgets/overlay.dart'; import 'package:flutter_hbb/mobile/pages/server_page.dart'; import 'package:flutter_hbb/mobile/pages/settings_page.dart'; import 'package:get/get.dart'; @@ -25,6 +26,7 @@ class _HomePageState extends State { var _selectedIndex = 0; int get selectedIndex => _selectedIndex; final List _pages = []; + final _blockableOverlayState = BlockableOverlayState(); void refreshPages() { setState(() { @@ -36,6 +38,7 @@ class _HomePageState extends State { void initState() { super.initState(); initPages(); + _blockableOverlayState.applyFfi(gFFI); } void initPages() { diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart index a769fd187..c6fc1baa1 100644 --- a/flutter/lib/mobile/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -43,8 +43,6 @@ class _RemotePageState extends State { double _mouseScrollIntegral = 0; // mouse scroll speed controller Orientation? _currentOrientation; - final _blockableOverlayState = BlockableOverlayState(); - final keyboardVisibilityController = KeyboardVisibilityController(); late final StreamSubscription keyboardSubscription; final FocusNode _mobileFocusNode = FocusNode(); @@ -70,7 +68,6 @@ class _RemotePageState extends State { gFFI.qualityMonitorModel.checkShowQualityMonitor(sessionId); keyboardSubscription = keyboardVisibilityController.onChange.listen(onSoftKeyboardChanged); - _blockableOverlayState.applyFfi(gFFI); initSharedStates(widget.id); gFFI.chatModel .changeCurrentKey(MessageKey(widget.id, ChatModel.clientModeID)); diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index e44a694d4..48476951f 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -70,6 +70,7 @@ class ChatModel with ChangeNotifier { TextEditingController textController = TextEditingController(); RxInt mobileUnreadSum = 0.obs; + MessageKey? latestReceivedKey; @override void dispose() { @@ -194,6 +195,12 @@ class ChatModel with ChangeNotifier { final overlayState = _blockableOverlayState?.state; if (overlayState == null) return; + if (isMobile && + !gFFI.chatModel.currentKey.isOut && // not in remote page + gFFI.chatModel.latestReceivedKey != null) { + gFFI.chatModel.changeCurrentKey(gFFI.chatModel.latestReceivedKey!); + gFFI.chatModel.mobileClearClientUnread(gFFI.chatModel.currentKey.connId); + } final overlay = OverlayEntry(builder: (context) { return Listener( onPointerDown: (_) { @@ -337,7 +344,7 @@ class ChatModel with ChangeNotifier { final messagekey = MessageKey(peerId, id); // mobile: first message show overlay icon - if (!isDesktop && chatIconOverlayEntry == null && id == clientModeID) { + if (!isDesktop && chatIconOverlayEntry == null) { showChatIconOverlay(); } // show chat page @@ -404,6 +411,7 @@ class ChatModel with ChangeNotifier { _currentKey = messagekey; mobileClearClientUnread(messagekey.connId); } + latestReceivedKey = messagekey; notifyListeners(); } From 6b8d2a33c023ff3978971eecd54eba7b2ee30a46 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 10 Jul 2023 23:02:26 +0800 Subject: [PATCH 095/612] fix lang --- flutter/lib/mobile/pages/home_page.dart | 4 ++-- src/lang/ca.rs | 6 ++++-- src/lang/cn.rs | 6 ++++-- src/lang/cs.rs | 6 ++++-- src/lang/da.rs | 6 ++++-- src/lang/de.rs | 6 ++++-- src/lang/el.rs | 6 ++++-- src/lang/eo.rs | 6 ++++-- src/lang/es.rs | 6 ++++-- src/lang/fa.rs | 6 ++++-- src/lang/fr.rs | 6 ++++-- src/lang/hu.rs | 6 ++++-- src/lang/id.rs | 6 ++++-- src/lang/it.rs | 6 ++++-- src/lang/ja.rs | 6 ++++-- src/lang/ko.rs | 6 ++++-- src/lang/kz.rs | 6 ++++-- src/lang/lt.rs | 6 ++++-- src/lang/nl.rs | 6 ++++-- src/lang/pl.rs | 6 ++++-- src/lang/pt_PT.rs | 6 ++++-- src/lang/ptbr.rs | 6 ++++-- src/lang/ro.rs | 6 ++++-- src/lang/ru.rs | 6 ++++-- src/lang/sk.rs | 6 ++++-- src/lang/sl.rs | 6 ++++-- src/lang/sq.rs | 6 ++++-- src/lang/sr.rs | 6 ++++-- src/lang/sv.rs | 6 ++++-- src/lang/template.rs | 6 ++++-- src/lang/th.rs | 6 ++++-- src/lang/tr.rs | 6 ++++-- src/lang/tw.rs | 6 ++++-- src/lang/ua.rs | 6 ++++-- src/lang/vn.rs | 6 ++++-- 35 files changed, 138 insertions(+), 70 deletions(-) diff --git a/flutter/lib/mobile/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart index 5713830bc..1fb75c1d1 100644 --- a/flutter/lib/mobile/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -108,8 +108,8 @@ class _HomePageState extends State { children: [ Tooltip( message: currentKey.isOut - ? translate('outgoing connection') - : translate('incomming connection'), + ? translate('Outgoing connection') + : translate('Incoming connection'), child: Icon( currentKey.isOut ? Icons.call_made_rounded diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 9835c0704..f65f8b6dc 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 3a2a6ebd0..5aa3c0af2 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "接受并提权"), ("accept_and_elevate_btn_tooltip", "接受连接并提升 UAC 权限"), ("clipboard_wait_response_timeout_tip", "等待拷贝响应超时"), - ("incomming connection", "收到的连接"), - ("outgoing connection", "发起的连接"), + ("Incoming connection", "收到的连接"), + ("Outgoing connection", "发起的连接"), + ("Exit", "退出"), + ("Open", "打开"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 945493799..08dc61ad7 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index e57a43b4e..24a0b94a7 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 38e1bb4c1..fd384738b 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Akzeptieren und Rechte erhöhen"), ("accept_and_elevate_btn_tooltip", "Akzeptieren Sie die Verbindung und erhöhen Sie die UAC-Berechtigungen."), ("clipboard_wait_response_timeout_tip", "Zeitüberschreitung beim Warten auf die Antwort der Kopie."), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index cb5d627e7..acae40de8 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index dd8fc25d0..e7dcee61e 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 351fa90ee..494ef8f4a 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Aceptar y Elevar"), ("accept_and_elevate_btn_tooltip", "Aceptar la conexión y elevar permisos UAC."), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 92a080212..0f84f6f2b 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "بپذیرید و افزایش دهید"), ("accept_and_elevate_btn_tooltip", "را افزایش دهید UAC اتصال را بپذیرید و مجوزهای."), ("clipboard_wait_response_timeout_tip", "زمان انتظار برای مشخص شدن وضعیت کپی تمام شد."), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 885b2c17a..55bacc7b6 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 67c1b366a..d31bdbafb 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 637cb6ea1..d4372470e 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 879efcb29..e6ebc86fd 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Accetta ed eleva"), ("accept_and_elevate_btn_tooltip", "Accetta la connessione ed eleva le autorizzazioni UAC."), ("clipboard_wait_response_timeout_tip", "Timeout attesa risposta della copia."), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 14e572010..a2547d44c 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 878cb3821..6e8c951d2 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index b811820da..66ffab41d 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index ad702dfa0..4f5e80ca5 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index cff145f39..3b2549670 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Accepteren en Verheffen"), ("accept_and_elevate_btn_tooltip", "Accepteer de verbinding en verhoog de UAC-machtigingen."), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 8d9a3b533..5dc16fc24 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Akceptuj i Podnieś uprawnienia"), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 26069573a..fe4ac2d5e 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 25de11130..9f7066990 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 25dd4655f..c84bc8edd 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index f1fc7c045..9d26fa268 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Принять и повысить"), ("accept_and_elevate_btn_tooltip", "Разрешить подключение и повысить права UAC."), ("clipboard_wait_response_timeout_tip", "Время ожидания копирования буфера обмена, истекло"), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 4350615a1..84c231b93 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 73011b67b..2a21362dd 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 927b84f4e..bd69fdafd 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index b86dece15..9b74e946a 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 423fdfd17..2e74caf9e 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 88abd2215..5558fce5c 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 9bb86ba59..ce20015dd 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index c7ba5fceb..3471c51cc 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 1253aee75..8aeb47d83 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", ""), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", "收到的連接"), - ("outgoing connection", "發起的連接"), + ("Incoming connection", "收到的連接"), + ("Outgoing connection", "發起的連接"), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 8ba47e6c5..a5ab7e3de 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Погодитись та розширити права"), ("accept_and_elevate_btn_tooltip", "Погодити підключення та розширити дозволи UAC."), ("clipboard_wait_response_timeout_tip", "Вийшов час очікування копіювання."), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 3b6f5205f..6d8504eaf 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -513,7 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Chấp nhận và Cấp Quyền"), ("accept_and_elevate_btn_tooltip", "Chấp nhận kết nối và cấp các quyền UAC."), ("clipboard_wait_response_timeout_tip", ""), - ("incomming connection", ""), - ("outgoing connection", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", ""), + ("Open", ""), ].iter().cloned().collect(); } From 4b8017292e4207788d1b1418c7d6df7d8e106cbd Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Mon, 10 Jul 2023 17:40:04 +0200 Subject: [PATCH 096/612] Update italian language --- src/lang/it.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index e6ebc86fd..ee5da9b7a 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -513,9 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Accetta ed eleva"), ("accept_and_elevate_btn_tooltip", "Accetta la connessione ed eleva le autorizzazioni UAC."), ("clipboard_wait_response_timeout_tip", "Timeout attesa risposta della copia."), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), - ].iter().cloned().collect(); + ("Incoming connection", "Connessioni in entrata"), + ("Outgoing connection", "Conenssioni in uscita"), + ("Exit", "Esci da RustDesk"), + ("Open", "Apri RustDesk"), + ].iter().cloned().collect(); } From d7ef3df2b363ff98d998363b5f5eaf2a7d62326a Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 11 Jul 2023 10:01:56 +0800 Subject: [PATCH 097/612] Revert "try fix linux cm abnormal show" This reverts commit 193426a3c10cb063db644068ac6f0df43c197341. --- flutter/lib/desktop/pages/server_page.dart | 2 +- flutter/lib/models/chat_model.dart | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 53088f69e..b1ebf9d71 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -186,7 +186,7 @@ class ConnectionManagerState extends State { ChatPage(type: ChatPageType.desktopCM)), ), ) - : Expanded(child: Container()), + : Offstage(), ), SizedBox( width: kConnectionManagerWindowSizeClosedChat.width - diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 48476951f..fe1de2512 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -277,16 +277,16 @@ class ChatModel with ChangeNotifier { gFFI.chatModel.changeCurrentKey(key); } if (_isShowCMChatPage) { - await windowManager.setSizeAlignment( - kConnectionManagerWindowSizeClosedChat, Alignment.topRight); - await windowManager.show(); _isShowCMChatPage = !_isShowCMChatPage; notifyListeners(); + await windowManager.show(); + await windowManager.setSizeAlignment( + kConnectionManagerWindowSizeClosedChat, Alignment.topRight); } else { requestChatInputFocus(); + await windowManager.show(); await windowManager.setSizeAlignment( kConnectionManagerWindowSizeOpenChat, Alignment.topRight); - await windowManager.show(); _isShowCMChatPage = !_isShowCMChatPage; notifyListeners(); } From 3db0f90af9a2217f1db857c5c07d7b837c6278a4 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 11 Jul 2023 10:05:31 +0800 Subject: [PATCH 098/612] revert cm fixed width Signed-off-by: 21pages --- flutter/lib/common.dart | 3 +-- flutter/lib/desktop/pages/server_page.dart | 15 ++++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 314b1f9d3..4d25e6d0d 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -2212,8 +2212,7 @@ Widget unreadMessageCountBuilder(RxInt? count, ))); } -Widget unreadTopRightBuilder(RxInt? count, - {Widget? icon, double? size, double? fontSize}) { +Widget unreadTopRightBuilder(RxInt? count, {Widget? icon}) { return Stack( children: [ icon ?? Icon(Icons.chat), diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index b1ebf9d71..f1e35364c 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -185,14 +185,19 @@ class ConnectionManagerState extends State { child: ChatPage(type: ChatPageType.desktopCM)), ), + flex: (kConnectionManagerWindowSizeOpenChat.width - + kConnectionManagerWindowSizeClosedChat + .width) + .toInt(), ) : Offstage(), ), - SizedBox( - width: kConnectionManagerWindowSizeClosedChat.width - - 10, // 10 is from overflow - child: pageView, - ) + Expanded( + child: pageView, + flex: kConnectionManagerWindowSizeClosedChat.width + .toInt() - + 4 // prevent stretch of the page view when chat is open, + ), ], ), ), From cfcfd127b2b73994d33fb82af1bb91911c496f27 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 11 Jul 2023 10:35:52 +0800 Subject: [PATCH 099/612] remove tags for the other ci --- .github/workflows/ci.yml | 2 -- .github/workflows/flutter-ci.yml | 4 +--- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 11cefa4e1..4ba7aa1ed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,8 +13,6 @@ on: push: branches: - master - tags: - - '*' paths-ignore: - ".github/**" - "docs/**" diff --git a/.github/workflows/flutter-ci.yml b/.github/workflows/flutter-ci.yml index d40d6f736..6dab5f7d4 100644 --- a/.github/workflows/flutter-ci.yml +++ b/.github/workflows/flutter-ci.yml @@ -9,8 +9,6 @@ on: push: branches: - master - tags: - - '*' paths-ignore: - ".github/**" - "docs/**" @@ -21,4 +19,4 @@ jobs: uses: ./.github/workflows/flutter-build.yml with: upload-artifact: false - \ No newline at end of file + From 97359d6eae4cabeb1ba2802645ac653eb1145133 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 11 Jul 2023 12:19:28 +0800 Subject: [PATCH 100/612] fix, win, elevate prompt on start Signed-off-by: dignow --- src/platform/windows.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index c708650b8..bb0aade5a 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -2277,11 +2277,11 @@ fn run_after_run_cmds(silent: bool) { #[inline] pub fn try_kill_broker() { - allow_err!(run_cmds( - format!("taskkill /F /IM {}", WIN_MAG_INJECTED_PROCESS_EXE), - false, - "kill_broker" - )); + allow_err!(std::process::Command::new("cmd") + .arg("/c") + .arg(&format!("taskkill /F /IM {}", WIN_MAG_INJECTED_PROCESS_EXE)) + .creation_flags(winapi::um::winbase::CREATE_NO_WINDOW) + .spawn()); } #[cfg(test)] From dcc0a1425eb8ab60a2e32b6355e1d2c5eeeaff81 Mon Sep 17 00:00:00 2001 From: mehdi-song Date: Tue, 11 Jul 2023 04:33:09 +0000 Subject: [PATCH 101/612] Update fa.rs --- src/lang/fa.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 0f84f6f2b..969693f83 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -513,9 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "بپذیرید و افزایش دهید"), ("accept_and_elevate_btn_tooltip", "را افزایش دهید UAC اتصال را بپذیرید و مجوزهای."), ("clipboard_wait_response_timeout_tip", "زمان انتظار برای مشخص شدن وضعیت کپی تمام شد."), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), + ("Incoming connection", "اتصال ورودی"), + ("Outgoing connection", "اتصال خروجی"), + ("Exit", "خروج"), + ("Open", "باز کردن"), ].iter().cloned().collect(); } From 17dbd27cfdc82af272c345a40893694ba95a2119 Mon Sep 17 00:00:00 2001 From: mehdi-song Date: Tue, 11 Jul 2023 04:54:46 +0000 Subject: [PATCH 102/612] Update fa.rs --- src/lang/fa.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 0f84f6f2b..86972e7e7 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -80,7 +80,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Connection in progress. Please wait.", "در حال اتصال. لطفا متظر بمانید"), ("Please try 1 minute later", "لطفا بعد از 1 دقیقه مجددا تلاش کنید"), ("Login Error", "ورود ناموفق بود"), - ("Successful", "ورود با موفقیت انجام شد"), + ("Successful", "با موفقیت انجام شد"), ("Connected, waiting for image...", "...ارتباط برقرار شد. انتظار برای دریافت تصاویر"), ("Name", "نام"), ("Type", "نوع فایل"), @@ -144,7 +144,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Failed to connect via relay server", "انجام نشد Relay اتصال از طریق سرور"), ("Failed to make direct connection to remote desktop", "اتصال مستقیم به دسکتاپ راه دور انجام نشد"), ("Set Password", "تنظیم رمزعبور"), - ("OS Password", "رمز عیور سیستم عامل"), + ("OS Password", "رمز عبور سیستم عامل"), ("install_tip", "لطفا برنامه را نصب کنید UAC و جلوگیری از خطای RustDesk برای راحتی در استفاده از نرم افزار"), ("Click to upgrade", "برای ارتقا کلیک کنید"), ("Click to download", "برای دانلود کلیک کنید"), From c076d4a17cf4bf3496311f31f7fecf795c7d30e1 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 11 Jul 2023 16:34:06 +0800 Subject: [PATCH 103/612] try to disable arm ci again --- .github/workflows/flutter-build.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index b0d23a880..732726a9b 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -377,6 +377,7 @@ jobs: uses: ./.github/workflows/bridge.yml build-rustdesk-ios: + if: ${{ inputs.upload-artifact == 'true' }} needs: [generate-bridge-linux] name: build rustdesk ios ipa ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} @@ -479,6 +480,7 @@ jobs: extra-build-features: "", openssl-arch: android-arm } + if: ${{ matrix.job.arch == 'armv7' || inputs.upload-artifact == 'true' }} steps: - name: Install dependencies run: | @@ -782,6 +784,7 @@ jobs: path: target/release/liblibrustdesk.so build-rustdesk-lib-linux-arm: + if: ${{ inputs.upload-artifact == 'true' }} needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} @@ -944,6 +947,7 @@ jobs: path: target/release/liblibrustdesk.so build-rustdesk-sciter-arm: + if: ${{ inputs.upload-artifact == 'true' }} needs: [build-vcpkg-deps-linux] name: build-rustdesk(sciter) ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} @@ -1102,6 +1106,7 @@ jobs: path: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}-sciter.deb build-rustdesk-linux-arm: + if: ${{ inputs.upload-artifact == 'true' }} needs: [build-rustdesk-lib-linux-arm] name: build-rustdesk ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ubuntu-20.04 # 20.04 has more performance on arm build From 9a110c703e2edc06831ad9c49516a823f6bd7e97 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Tue, 11 Jul 2023 14:40:14 +0200 Subject: [PATCH 104/612] Update de.rs --- src/lang/de.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index fd384738b..15c9f48a3 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -454,7 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Voice call", "Sprachanruf"), ("Text chat", "Text-Chat"), ("Stop voice call", "Sprachanruf beenden"), - ("relay_hint_tip", "Wenn eine direkte Verbindung nicht möglich ist, können Sie versuchen, eine Verbindung über einen Relay-Server herzustellen. \nWenn Sie eine Relay-Verbindung beim ersten Versuch herstellen möchten, können Sie das Suffix \"/r\" an die ID anhängen oder die Option \"Immer über Relay-Server verbinden\" auf der Gegenstelle auswählen."), + ("relay_hint_tip", "Wenn eine direkte Verbindung nicht möglich ist, können Sie versuchen, eine Verbindung über einen Relay-Server herzustellen. \nWenn Sie eine Relay-Verbindung beim ersten Versuch herstellen möchten, können Sie das Suffix \"/r\" an die ID anhängen oder die Option \"Immer über Relay-Server verbinden\" in der Liste der letzten Sitzungen auswählen, sofern diese vorhanden sind."), ("Reconnect", "Erneut verbinden"), ("Codec", "Codec"), ("Resolution", "Auflösung"), @@ -513,9 +513,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Akzeptieren und Rechte erhöhen"), ("accept_and_elevate_btn_tooltip", "Akzeptieren Sie die Verbindung und erhöhen Sie die UAC-Berechtigungen."), ("clipboard_wait_response_timeout_tip", "Zeitüberschreitung beim Warten auf die Antwort der Kopie."), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), + ("Incoming connection", "Eingehende Verbindung"), + ("Outgoing connection", "Ausgehende Verbindung"), + ("Exit", "Beenden"), + ("Open", "Öffnen"), ].iter().cloned().collect(); } From b3f799a7ddecd46cf6b6bf5c0c983b138f16e869 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Tue, 11 Jul 2023 14:46:32 +0200 Subject: [PATCH 105/612] Update de.rs --- src/lang/de.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index 15c9f48a3..7356d7646 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -454,7 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Voice call", "Sprachanruf"), ("Text chat", "Text-Chat"), ("Stop voice call", "Sprachanruf beenden"), - ("relay_hint_tip", "Wenn eine direkte Verbindung nicht möglich ist, können Sie versuchen, eine Verbindung über einen Relay-Server herzustellen. \nWenn Sie eine Relay-Verbindung beim ersten Versuch herstellen möchten, können Sie das Suffix \"/r\" an die ID anhängen oder die Option \"Immer über Relay-Server verbinden\" in der Liste der letzten Sitzungen auswählen, sofern diese vorhanden sind."), + ("relay_hint_tip", "Wenn eine direkte Verbindung nicht möglich ist, können Sie versuchen, eine Verbindung über einen Relay-Server herzustellen. \nWenn Sie eine Relay-Verbindung beim ersten Versuch herstellen möchten, können Sie das Suffix \"/r\" an die ID anhängen oder die Option \"Immer über Relay-Server verbinden\" in der Liste der letzten Sitzungen auswählen, sofern diese vorhanden ist."), ("Reconnect", "Erneut verbinden"), ("Codec", "Codec"), ("Resolution", "Auflösung"), From 25011331ed97019d4498a366fa2b1c0811020009 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 11 Jul 2023 22:54:57 +0800 Subject: [PATCH 106/612] fix ci --- .github/workflows/flutter-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 732726a9b..b32561af7 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -459,6 +459,7 @@ jobs: build-rustdesk-android: + if: ${{ matrix.job.arch == 'armv7' || inputs.upload-artifact == 'true' }} needs: [generate-bridge-linux] name: build rustdesk android apk ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} @@ -480,7 +481,6 @@ jobs: extra-build-features: "", openssl-arch: android-arm } - if: ${{ matrix.job.arch == 'armv7' || inputs.upload-artifact == 'true' }} steps: - name: Install dependencies run: | From 63cb39f36575ba01c16648fc5fa6a6b0088be3ac Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 11 Jul 2023 23:09:32 +0800 Subject: [PATCH 107/612] failed to use if: ${{ matrix.job.arch == 'armv7' || inputs.upload-artifact == 'true' }} --- .github/workflows/flutter-build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index b32561af7..eeaed8a88 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -459,7 +459,6 @@ jobs: build-rustdesk-android: - if: ${{ matrix.job.arch == 'armv7' || inputs.upload-artifact == 'true' }} needs: [generate-bridge-linux] name: build rustdesk android apk ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} From 018f551d13e337c1d1648896d4fc9397c66cc306 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 12 Jul 2023 13:18:18 +0800 Subject: [PATCH 108/612] add gstreamer1.0-pipewire dep to ubuntu, do not add it to fedora, because it occurs since fedora 33, and since fedora 34, it was installed with the system by default --- appimage/AppImageBuilder-aarch64.yml | 1 + appimage/AppImageBuilder-x86_64.yml | 1 + build.py | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/appimage/AppImageBuilder-aarch64.yml b/appimage/AppImageBuilder-aarch64.yml index 4c552b6f6..a16d5807d 100644 --- a/appimage/AppImageBuilder-aarch64.yml +++ b/appimage/AppImageBuilder-aarch64.yml @@ -50,6 +50,7 @@ AppDir: - libva-x11-2 - libvdpau1 - libgstreamer-plugins-base1.0-0 + - gstreamer1.0-pipewire - libwayland-cursor0 - libwayland-egl1 - libpulse0 diff --git a/appimage/AppImageBuilder-x86_64.yml b/appimage/AppImageBuilder-x86_64.yml index 7bc8f231f..b3f06a46e 100644 --- a/appimage/AppImageBuilder-x86_64.yml +++ b/appimage/AppImageBuilder-x86_64.yml @@ -52,6 +52,7 @@ AppDir: - libva-x11-2 - libvdpau1 - libgstreamer-plugins-base1.0-0 + - gstreamer1.0-pipewire - libwayland-cursor0 - libwayland-egl1 - libpulse0 diff --git a/build.py b/build.py index a8330b72b..d1fdd4aaf 100755 --- a/build.py +++ b/build.py @@ -285,7 +285,7 @@ Version: %s Architecture: %s Maintainer: rustdesk Homepage: https://rustdesk.com -Depends: libgtk-3-0, libxcb-randr0, libxdo3, libxfixes3, libxcb-shape0, libxcb-xfixes0, libasound2, libsystemd0, curl, libva-drm2, libva-x11-2, libvdpau1, libgstreamer-plugins-base1.0-0, libpam0g, libappindicator3-1 +Depends: libgtk-3-0, libxcb-randr0, libxdo3, libxfixes3, libxcb-shape0, libxcb-xfixes0, libasound2, libsystemd0, curl, libva-drm2, libva-x11-2, libvdpau1, libgstreamer-plugins-base1.0-0, libpam0g, libappindicator3-1, gstreamer1.0-pipewire Description: A remote control software. """ % (version, get_arch()) From 99801258a25fb14777dc5b44a2c60f24a11cbd02 Mon Sep 17 00:00:00 2001 From: FastAct <93490087+FastAct@users.noreply.github.com> Date: Wed, 12 Jul 2023 08:47:40 +0200 Subject: [PATCH 109/612] Update nl.rs --- src/lang/nl.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 3b2549670..9f4d2555e 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -512,10 +512,10 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Collapse toolbar", "Werkbalk samenvouwen"), ("Accept and Elevate", "Accepteren en Verheffen"), ("accept_and_elevate_btn_tooltip", "Accepteer de verbinding en verhoog de UAC-machtigingen."), - ("clipboard_wait_response_timeout_tip", ""), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), + ("clipboard_wait_response_timeout_tip", "Time-out in afwachting van kopieer-antwoord."), + ("Incoming connection", "Inkomende verbinding"), + ("Outgoing connection", "Uitgaande verbinding"), + ("Exit", "Verlaten"), + ("Open", "Open"), ].iter().cloned().collect(); } From d5f615f8d675417c4a667803425990d120f3c060 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 12 Jul 2023 14:58:16 +0800 Subject: [PATCH 110/612] fix port-forward/rdp empty show Signed-off-by: 21pages --- flutter/lib/desktop/pages/port_forward_page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/desktop/pages/port_forward_page.dart b/flutter/lib/desktop/pages/port_forward_page.dart index 6a3b7db13..f4b4a6c3f 100644 --- a/flutter/lib/desktop/pages/port_forward_page.dart +++ b/flutter/lib/desktop/pages/port_forward_page.dart @@ -34,7 +34,7 @@ class PortForwardPage extends StatefulWidget { this.forceRelay}) : super(key: key); final String id; - final String password; + final String? password; final DesktopTabController tabController; final bool isRDP; final bool? forceRelay; From 7d7cfe391a04a0a5313a4989981dfffd53e855e8 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 12 Jul 2023 16:07:55 +0800 Subject: [PATCH 111/612] inputs.upload-artifact is bool --- .github/workflows/flutter-build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index eeaed8a88..badbbd23e 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -377,7 +377,7 @@ jobs: uses: ./.github/workflows/bridge.yml build-rustdesk-ios: - if: ${{ inputs.upload-artifact == 'true' }} + if: ${{ inputs.upload-artifact }} needs: [generate-bridge-linux] name: build rustdesk ios ipa ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} @@ -783,7 +783,7 @@ jobs: path: target/release/liblibrustdesk.so build-rustdesk-lib-linux-arm: - if: ${{ inputs.upload-artifact == 'true' }} + if: ${{ inputs.upload-artifact }} needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} @@ -946,7 +946,7 @@ jobs: path: target/release/liblibrustdesk.so build-rustdesk-sciter-arm: - if: ${{ inputs.upload-artifact == 'true' }} + if: ${{ inputs.upload-artifact }} needs: [build-vcpkg-deps-linux] name: build-rustdesk(sciter) ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ${{ matrix.job.os }} @@ -1105,7 +1105,7 @@ jobs: path: rustdesk-${{ env.VERSION }}-${{ matrix.job.arch }}-sciter.deb build-rustdesk-linux-arm: - if: ${{ inputs.upload-artifact == 'true' }} + if: ${{ inputs.upload-artifact }} needs: [build-rustdesk-lib-linux-arm] name: build-rustdesk ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] runs-on: ubuntu-20.04 # 20.04 has more performance on arm build From 5e6e92179018828d8bd204544ea667661ae333d6 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 12 Jul 2023 21:34:43 +0800 Subject: [PATCH 112/612] upgrade 18.04 -> 20.04 in ci, since 18.04 is outdated --- .github/workflows/flutter-build.yml | 32 ++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index badbbd23e..03c3735b8 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -719,9 +719,9 @@ jobs: id: vcpkg with: arch: ${{ matrix.job.arch }} - distro: ubuntu18.04 + distro: ubuntu20.04 # not ready yet - # distro: ubuntu18.04-rustdesk + # distro: ubuntu20.04-rustdesk githubToken: ${{ github.token }} setup: | ls -l "${PWD}" @@ -890,7 +890,7 @@ jobs: id: vcpkg with: arch: ${{ matrix.job.arch }} - distro: ubuntu18.04-rustdesk + distro: ubuntu20.04-rustdesk githubToken: ${{ github.token }} setup: | ls -l "${PWD}" @@ -1028,7 +1028,7 @@ jobs: id: vcpkg with: arch: ${{ matrix.job.arch }} - distro: ubuntu18.04-rustdesk + distro: ubuntu20.04-rustdesk githubToken: ${{ github.token }} setup: | ls -l "${PWD}" @@ -1116,21 +1116,21 @@ jobs: - { arch: aarch64, target: aarch64-unknown-linux-gnu, - os: ubuntu-18.04, # just for naming package, not running host + os: ubuntu-20.04, # just for naming package, not running host use-cross: true, extra-build-features: "", } - { arch: aarch64, target: aarch64-unknown-linux-gnu, - os: ubuntu-18.04, # just for naming package, not running host + os: ubuntu-20.04, # just for naming package, not running host use-cross: true, extra-build-features: "appimage", } # - { # arch: aarch64, # target: aarch64-unknown-linux-gnu, - # os: ubuntu-18.04, # just for naming package, not running host + # os: ubuntu-20.04, # just for naming package, not running host # use-cross: true, # extra-build-features: "flatpak", # } @@ -1177,7 +1177,7 @@ jobs: id: vcpkg with: arch: ${{ matrix.job.arch }} - distro: ubuntu18.04-rustdesk + distro: ubuntu20.04-rustdesk githubToken: ${{ github.token }} setup: | ls -l "${PWD}" @@ -1380,19 +1380,19 @@ jobs: - { arch: x86_64, target: x86_64-unknown-linux-gnu, - os: ubuntu-18.04, + os: ubuntu-20.04, extra-build-features: "", } - { arch: x86_64, target: x86_64-unknown-linux-gnu, - os: ubuntu-18.04, + os: ubuntu-20.04, extra-build-features: "flatpak", } - { arch: x86_64, target: x86_64-unknown-linux-gnu, - os: ubuntu-18.04, + os: ubuntu-20.04, extra-build-features: "appimage", } # - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, use-cross: true } @@ -1423,7 +1423,7 @@ jobs: id: vcpkg with: arch: ${{ matrix.job.arch }} - distro: ubuntu18.04 + distro: ubuntu20.04 githubToken: ${{ github.token }} setup: | ls -l "${PWD}" @@ -1591,7 +1591,7 @@ jobs: # fail-fast: false # matrix: # job: - # # - { target: aarch64-unknown-linux-gnu , os: ubuntu-18.04, arch: arm64 } + # # - { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04, arch: arm64 } # - { target: aarch64-unknown-linux-gnu, os: ubuntu-20.04, arch: arm64 } # steps: # - name: Checkout source code @@ -1612,7 +1612,7 @@ jobs: # id: rpm # with: # arch: ${{ matrix.job.arch }} - # distro: ubuntu18.04 + # distro: ubuntu20.04 # githubToken: ${{ github.token }} # setup: | # ls -l "${PWD}" @@ -1653,7 +1653,7 @@ jobs: fail-fast: false matrix: job: - - { target: x86_64-unknown-linux-gnu, os: ubuntu-18.04, arch: x86_64 } + - { target: x86_64-unknown-linux-gnu, os: ubuntu-20.04, arch: x86_64 } steps: - name: Checkout source code uses: actions/checkout@v3 @@ -1673,7 +1673,7 @@ jobs: id: rpm with: arch: ${{ matrix.job.arch }} - distro: ubuntu18.04 + distro: ubuntu20.04 githubToken: ${{ github.token }} setup: | ls -l "${PWD}" From 1772c66694ef90fe017bd741b53490153ece1f69 Mon Sep 17 00:00:00 2001 From: solokot Date: Wed, 12 Jul 2023 18:34:54 +0300 Subject: [PATCH 113/612] Update ru.rs --- src/lang/ru.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 9d26fa268..019fcd922 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -512,10 +512,10 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Collapse toolbar", "Свернуть панель инструментов"), ("Accept and Elevate", "Принять и повысить"), ("accept_and_elevate_btn_tooltip", "Разрешить подключение и повысить права UAC."), - ("clipboard_wait_response_timeout_tip", "Время ожидания копирования буфера обмена, истекло"), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), + ("clipboard_wait_response_timeout_tip", "Время ожидания копирования буфера обмена истекло"), + ("Incoming connection", "Входящее подключение"), + ("Outgoing connection", "Исходящее подключение"), + ("Exit", "Выход"), + ("Open", "Открыть"), ].iter().cloned().collect(); } From 3fd1d66f1286e684fc84e613904f205e928f85e0 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Thu, 13 Jul 2023 11:25:02 +0800 Subject: [PATCH 114/612] we have no 20.04 image yet, https://github.com/rustdesk-org/run-on-arch-action/tree/amd64-support/Dockerfiles --- .github/workflows/flutter-build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 03c3735b8..86c16505f 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -721,7 +721,7 @@ jobs: arch: ${{ matrix.job.arch }} distro: ubuntu20.04 # not ready yet - # distro: ubuntu20.04-rustdesk + # distro: ubuntu18.04-rustdesk githubToken: ${{ github.token }} setup: | ls -l "${PWD}" @@ -890,7 +890,7 @@ jobs: id: vcpkg with: arch: ${{ matrix.job.arch }} - distro: ubuntu20.04-rustdesk + distro: ubuntu18.04-rustdesk githubToken: ${{ github.token }} setup: | ls -l "${PWD}" @@ -1028,7 +1028,7 @@ jobs: id: vcpkg with: arch: ${{ matrix.job.arch }} - distro: ubuntu20.04-rustdesk + distro: ubuntu18.04-rustdesk githubToken: ${{ github.token }} setup: | ls -l "${PWD}" @@ -1177,7 +1177,7 @@ jobs: id: vcpkg with: arch: ${{ matrix.job.arch }} - distro: ubuntu20.04-rustdesk + distro: ubuntu18.04-rustdesk githubToken: ${{ github.token }} setup: | ls -l "${PWD}" From f96fd806c0cb8c7f3e5b6f1f0744247d89c002a1 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 13 Jul 2023 11:59:27 +0800 Subject: [PATCH 115/612] The correct description when installing the certificate Signed-off-by: dignow --- flutter/lib/desktop/pages/install_page.dart | 4 ++-- src/lang/ca.rs | 4 ++-- src/lang/cn.rs | 4 ++-- src/lang/cs.rs | 4 ++-- src/lang/da.rs | 4 ++-- src/lang/de.rs | 4 ++-- src/lang/el.rs | 4 ++-- src/lang/en.rs | 4 ++-- src/lang/eo.rs | 4 ++-- src/lang/es.rs | 4 ++-- src/lang/fa.rs | 4 ++-- src/lang/fr.rs | 4 ++-- src/lang/hu.rs | 4 ++-- src/lang/id.rs | 4 ++-- src/lang/it.rs | 6 +++--- src/lang/ja.rs | 4 ++-- src/lang/ko.rs | 4 ++-- src/lang/kz.rs | 4 ++-- src/lang/lt.rs | 4 ++-- src/lang/nl.rs | 4 ++-- src/lang/pl.rs | 4 ++-- src/lang/pt_PT.rs | 4 ++-- src/lang/ptbr.rs | 4 ++-- src/lang/ro.rs | 4 ++-- src/lang/ru.rs | 4 ++-- src/lang/sk.rs | 4 ++-- src/lang/sl.rs | 4 ++-- src/lang/sq.rs | 4 ++-- src/lang/sr.rs | 4 ++-- src/lang/sv.rs | 4 ++-- src/lang/template.rs | 4 ++-- src/lang/th.rs | 4 ++-- src/lang/tr.rs | 4 ++-- src/lang/tw.rs | 4 ++-- src/lang/ua.rs | 4 ++-- src/lang/vn.rs | 4 ++-- 36 files changed, 73 insertions(+), 73 deletions(-) diff --git a/flutter/lib/desktop/pages/install_page.dart b/flutter/lib/desktop/pages/install_page.dart index 57f28f619..69cf2ac93 100644 --- a/flutter/lib/desktop/pages/install_page.dart +++ b/flutter/lib/desktop/pages/install_page.dart @@ -160,7 +160,7 @@ class _InstallPageBodyState extends State<_InstallPageBody> Option(desktopicon, label: 'Create desktop icon'), Offstage( offstage: !Platform.isWindows, - child: Option(driverCert, label: 'idd_driver_tip'), + child: Option(driverCert, label: 'install_cert_tip'), ).marginOnly(top: 7), Container( padding: EdgeInsets.all(12), @@ -282,7 +282,7 @@ class _InstallPageBodyState extends State<_InstallPageBody> title: null, content: SelectionArea( child: - msgboxContent('info', 'Warning', 'confirm_idd_driver_tip')), + msgboxContent('info', 'Warning', 'comfirm_install_cert_tip')), actions: btns, onCancel: close, ), diff --git a/src/lang/ca.rs b/src/lang/ca.rs index f65f8b6dc..d6d4f0a31 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 5aa3c0af2..e06a3341b 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "分辨率"), ("No transfers in progress", "无进行中的传输"), ("Set one-time password length", "设置一次性密码长度"), - ("idd_driver_tip", "安装虚拟显示器驱动,以便在没有连接显示器的情况下启动虚拟显示器进行控制。"), - ("confirm_idd_driver_tip", "安装虚拟显示器驱动的选项已勾选。请注意,测试证书将被安装以信任虚拟显示器驱动。测试证书仅会用于信任Rustdesk的驱动。"), + ("install_cert_tip", "安装 RustDesk 证书"), + ("comfirm_install_cert_tip", "此证书为 RustDesk 测试证书,您可以信任此证书。证书将被用于信任和安装 RustDesk 驱动。"), ("RDP Settings", "RDP 设置"), ("Sort by", "排序方式"), ("New Connection", "新连接"), diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 08dc61ad7..7f296bf95 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/da.rs b/src/lang/da.rs index 24a0b94a7..fb4a42cdb 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Opløsning"), ("No transfers in progress", "Ingen overførsler i gang"), ("Set one-time password length", "Sæt engangsadgangskode længde"), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "RDP indstillinger"), ("Sort by", "Sortér efter"), ("New Connection", "Ny forbindelse"), diff --git a/src/lang/de.rs b/src/lang/de.rs index 7356d7646..ee010f62b 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Auflösung"), ("No transfers in progress", "Keine Übertragungen im Gange"), ("Set one-time password length", "Länge des Einmalpassworts festlegen"), - ("idd_driver_tip", "Installieren Sie den virtuellen Anzeigetreiber, der verwendet wird, wenn Sie keine physischen Anzeigen haben."), - ("confirm_idd_driver_tip", "Die Option zur Installation des virtuellen Anzeigetreibers ist aktiviert. Beachten Sie, dass ein Testzertifikat installiert wird, um dem virtuellen Anzeigetreiber zu vertrauen. Dieses Testzertifikat wird nur verwendet, um RustDesk-Treibern zu vertrauen."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "RDP-Einstellungen"), ("Sort by", "Sortieren nach"), ("New Connection", "Neue Verbindung"), diff --git a/src/lang/el.rs b/src/lang/el.rs index acae40de8..9846b2185 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Ανάλυση"), ("No transfers in progress", "Δεν υπάρχει μεταφορά σε εξέλιξη"), ("Set one-time password length", "Μέγεθος κωδικού μιας χρήσης"), - ("idd_driver_tip", "Εγκαταστήστε το πρόγραμμα οδήγησης εικονικής οθόνης που χρησιμοποιείται όταν δεν έχετε φυσικές οθόνες."), - ("confirm_idd_driver_tip", "Είναι ενεργοποιημένη η επιλογή εγκατάστασης του προγράμματος οδήγησης εικονικής οθόνης. Λάβετε υπόψη ότι θα εγκατασταθεί ένα δοκιμαστικό πιστοποιητικό για το πρόγραμμα οδήγησης εικονικής οθόνης. Αυτό το πιστοποιητικό θα χρησιμοποιηθεί μόνο για την πιστοποίηση των προγραμμάτων οδήγησης του Rustdesk."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "Ρυθμίσεις RDP"), ("Sort by", "Ταξινόμηση κατά"), ("New Connection", "Νέα σύνδεση"), diff --git a/src/lang/en.rs b/src/lang/en.rs index ded8cd145..9414abedc 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -46,8 +46,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("config_microphone", "In order to speak remotely, you need to grant RustDesk \"Record Audio\" permissions."), ("relay_hint_tip", "It may not be possible to connect directly; you can try connecting via relay. Additionally, if you want to use a relay on your first attempt, you can add the \"/r\" suffix to the ID or select the option \"Always connect via relay\" in the card of recent sessions if it exists."), ("No transfers in progress", ""), - ("idd_driver_tip", "Install virtual display driver which is used when you have no physical displays."), - ("confirm_idd_driver_tip", "The option to install the virtual display driver is checked. Note that a test certificate will be installed to trust the virtual display driver. This test certificate will only be used to trust Rustdesk drivers."), + ("install_cert_tip", "Install RustDesk certificate."), + ("comfirm_install_cert_tip", "This certificate is a RustDesk testing certificate, and you can trust this certificate. The certificate will be used for trusting and installing RustDesk drivers."), ("empty_recent_tip", "Oops, no recent sessions!\nTime to plan a new one."), ("empty_favorite_tip", "No favorite peers yet?\nLet's find someone to connect with and add it to your favorites!"), ("empty_lan_tip", "Oh no, it looks like we haven't discovered any peers yet."), diff --git a/src/lang/eo.rs b/src/lang/eo.rs index e7dcee61e..ce40a2c8d 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/es.rs b/src/lang/es.rs index 494ef8f4a..a293b2f83 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Resolución"), ("No transfers in progress", "No hay transferencias en curso"), ("Set one-time password length", "Establecer contraseña de un solo uso"), - ("idd_driver_tip", "Instalar controlador virtual de pantalla a usar cuando no hay pantalla física."), - ("confirm_idd_driver_tip", "La opción de instalar el controlador de pantalla virtual está marcada. Hay que tener en cuenta que se instalará un certificado de prueba para confirar en el controlador de pantalla. Este certificado solo se usará para confiar en controladores Rustdesk."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "Ajustes RDP"), ("Sort by", "Ordenar por"), ("New Connection", "Nueva conexión"), diff --git a/src/lang/fa.rs b/src/lang/fa.rs index cdf8ec8c6..28c6a24b7 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "وضوح"), ("No transfers in progress", "هیچ انتقالی در حال انجام نیست"), ("Set one-time password length", "طول رمز یکبار مصرف را تعیین کنید"), - ("idd_driver_tip", "درایور صفحه نمایش مجازی را نصب کنید این برای زمانیست که هیچ نمایشگر فیزیکی ندارید."), - ("confirm_idd_driver_tip", "استفاده خواهد شد Rustdesk گزینه نصب درایور نمایش مجازی تیک خورده است. توجه داشته باشید که یک گواهی آزمایشی برای اعتماد به درایور نمایش مجازی نصب خواهد شد. این گواهی آزمایشی فقط برای اعتماد به درایورهای."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "RDP تنظیمات"), ("Sort by", "مرتب سازی بر اساس"), ("New Connection", "اتصال جدید"), diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 55bacc7b6..c53c5f386 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Résolution"), ("No transfers in progress", "Pas de transfert en cours"), ("Set one-time password length", "Définir la longueur du mot de passe à usage unique"), - ("idd_driver_tip", "Installez le pilote d'affichage virtuel pour être utilisé lorsque vous n'avez pas d'affichage physique."), - ("confirm_idd_driver_tip", "L'option d'installation du pilote d'affichage virtuel est cochée. Notez qu'un certificat de test sera installé pour faire confiance au pilote d'affichage virtuel. Ce certificat de test ne sera utilisé que pour faire confiance aux pilotes Rustdesk."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "Configuration RDP"), ("Sort by", "Trier par"), ("New Connection", "Nouvelle connexion"), diff --git a/src/lang/hu.rs b/src/lang/hu.rs index d31bdbafb..ad609dd93 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/id.rs b/src/lang/id.rs index d4372470e..f6825d083 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/it.rs b/src/lang/it.rs index ee5da9b7a..2f0f23795 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Risoluzione"), ("No transfers in progress", "Nessun trasferimento in corso"), ("Set one-time password length", "Imposta lunghezza password monouso"), - ("idd_driver_tip", "Installa driver schermo virtuale che verrà usato quando non sono disponibili schermi fisici."), - ("confirm_idd_driver_tip", "È stata selezionata l'opzione per installare il driver schermo virtuale.\nNota che verrà installato un certificato di test per l'attendibilità del driver dello schermo virtuale.\nQuesto certificato di test verrà utilizzato solo per l'attendibilità dei driver di RustDesk."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "Impostazioni RDP"), ("Sort by", "Ordina per"), ("New Connection", "Nuova connessione"), @@ -517,5 +517,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "Conenssioni in uscita"), ("Exit", "Esci da RustDesk"), ("Open", "Apri RustDesk"), - ].iter().cloned().collect(); + ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index a2547d44c..d82953db0 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 6e8c951d2..622e325c9 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 66ffab41d..8d9ee8b5c 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 4f5e80ca5..c95549b58 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Rezoliucija"), ("No transfers in progress", "Nevyksta jokių perdavimų"), ("Set one-time password length", "Nustatyti vienkartinio slaptažodžio ilgį"), - ("idd_driver_tip", "Įdiekite virtualaus ekrano tvarkyklę (naudojama, kai nėra fizinių ekranų)"), - ("confirm_idd_driver_tip", "Įjungta virtualaus ekrano tvarkyklės diegimo funkcija. Atminkite, kad bus įdiegtas bandomasis sertifikatas, kad būtų galima pasitikėti tvarkykle. Šis sertifikatas bus naudojamas tik pasitikėjimui Rustdesk tvarkyklėmis patikrinti."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "RDP nustatymai"), ("Sort by", "Rūšiuoti pagal"), ("New Connection", "Naujas ryšys"), diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 9f4d2555e..6411cafb7 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Resolutie"), ("No transfers in progress", "Geen overdrachten in uitvoering"), ("Set one-time password length", "Stel de lengte van het eenmalige wachtwoord in"), - ("idd_driver_tip", "Installeer het virtuele beeldschermstuurprogramma dat wordt gebruikt wanneer u geen fysieke beeldschermen hebt."), - ("confirm_idd_driver_tip", "De optie om het virtuele displaystuurprogramma te installeren is ingeschakeld. Er wordt een testcertificaat geplaatst om het virtuele displaystuurprogramma te vertrouwen. Dit testcertificaat wordt alleen gebruikt om RustDesk-stuurprogramma's te vertrouwen."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "RDP Instellingen"), ("Sort by", "Sorteren op"), ("New Connection", "Nieuwe Verbinding"), diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 5dc16fc24..6a382c1ea 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Rozdzielczość"), ("No transfers in progress", "Brak transferów w toku"), ("Set one-time password length", "Ustaw długość jednorazowego hasła"), - ("idd_driver_tip", "Zainstaluj sterownik wirtualnego wyświetlacza, który jest używany, gdy nie masz fizycznych monitorów."), - ("confirm_idd_driver_tip", "Opcja instalacji sterownika wirtualnego wyświetlacza jest zaznaczona. Pamiętaj, że zostanie zainstalowany testowy certyfikat, aby zaufać wirtualnemu sterownikowi. Ten certyfikat będzie używany tylko do weryfikacji sterowników RustDesk."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "Ustawienia RDP"), ("Sort by", "Sortuj wg"), ("New Connection", "Nowe połączenie"), diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index fe4ac2d5e..e40a9b02f 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 9f7066990..a099b29fb 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Resolução"), ("No transfers in progress", "Nenhuma transferência em andamento"), ("Set one-time password length", "Definir comprimento de senha descartável"), - ("idd_driver_tip", "Instale o driver de exibição virtual que é usado quando você não possui displays físicos."), - ("confirm_idd_driver_tip", "A opção para instalar o driver de exibição virtual está marcada. Observe que um certificado de teste será instalado para confiar no driver de vídeo virtual. Este certificado de teste será usado apenas para confiar nos drivers Rustdesk."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "Configurações RDP"), ("Sort by", "Ordenar por"), ("New Connection", "Nova Conexão"), diff --git a/src/lang/ro.rs b/src/lang/ro.rs index c84bc8edd..e316be0ed 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 019fcd922..0015d13d2 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Разрешение"), ("No transfers in progress", "Передача не осуществляется"), ("Set one-time password length", "Установить длину одноразового пароля"), - ("idd_driver_tip", "Установить драйвер виртуального дисплея (используется при отсутствии физических дисплеев)"), - ("confirm_idd_driver_tip", "Включена функция установки драйвера виртуального дисплея. Обратите внимание, что для доверия к драйверу будет установлен тестовый сертификат. Этот сертификат будет использоваться только для подтверждения доверия драйверам Rustdesk."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "Настройки RDP"), ("Sort by", "Сортировка"), ("New Connection", "Новое подключение"), diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 84c231b93..0e202faa1 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 2a21362dd..41c514c68 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/sq.rs b/src/lang/sq.rs index bd69fdafd..4a7d9bbe4 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 9b74e946a..eab1c4fc1 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 2e74caf9e..001ab1ddf 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/template.rs b/src/lang/template.rs index 5558fce5c..8c41cf85c 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/th.rs b/src/lang/th.rs index ce20015dd..4d8badbf7 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 3471c51cc..43aedd099 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 8aeb47d83..9b439dfe7 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "解析度"), ("No transfers in progress", "沒有正在進行的傳輸"), ("Set one-time password length", "設定一次性密碼長度"), - ("idd_driver_tip", "安裝虛擬顯示器驅動程式,以便在沒有連接顯示器的情況下啟動虛擬顯示器進行控制。"), - ("confirm_idd_driver_tip", "安裝虛擬顯示器驅動程式的選項已勾選。請注意,測試證書將被安裝以信任虛擬顯示器驅動。測試證書僅會用於信任 RustDesk 的驅動程式。"), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "RDP 設定"), ("Sort by", "排序方式"), ("New Connection", "新連線"), diff --git a/src/lang/ua.rs b/src/lang/ua.rs index a5ab7e3de..b557f647d 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Роздільна здатність"), ("No transfers in progress", "Наразі нічого не пересилається"), ("Set one-time password length", "Вказати довжину одноразового пароля"), - ("idd_driver_tip", "Встановити драйвер віртуального дисплея, який використовується в разі відсутності фізичних екранів."), - ("confirm_idd_driver_tip", "Позначено встановлення драйвера віртуального дисплея. Зважайте, що буде встановлено тестовий сертифікат для засвідчення драйвера віртуального дисплея. Цей тестовий сертифікат буде використовуватись лише для засвідчення драйверів Rustdesk."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "Налаштування RDP"), ("Sort by", "Сортувати за"), ("New Connection", "Нове підключення"), diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 6d8504eaf..b060dcd19 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Độ phân giải"), ("No transfers in progress", "Không có tệp tin nào đang được truyền"), ("Set one-time password length", "Thiết lập độ dài mật khẩu một lần"), - ("idd_driver_tip", "Cài đặt driver màn hình ảo để sử dụng khi bạn không có màn hình vật lý."), - ("confirm_idd_driver_tip", "Tùy chọn cài đặt driver màn hình ảo đã được bật. Lưu ý rằng một chứng nhận thử sẽ được cài đặt để tin cậy driver màn hình ảo. Chứng nhận thử này sẽ chỉ được dùng để tin cậy những driver của RustDesk."), + ("install_cert_tip", ""), + ("comfirm_install_cert_tip", ""), ("RDP Settings", "Cài đặt RDP"), ("Sort by", "Sắp xếp theo"), ("New Connection", "Kết nối mới"), From 261c4b98339c7dcf8db0ed226aa89e562c483d9f Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 13 Jul 2023 12:08:00 +0800 Subject: [PATCH 116/612] trivial change Signed-off-by: dignow --- src/lang/en.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/en.rs b/src/lang/en.rs index 9414abedc..89a9e92ca 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -46,7 +46,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("config_microphone", "In order to speak remotely, you need to grant RustDesk \"Record Audio\" permissions."), ("relay_hint_tip", "It may not be possible to connect directly; you can try connecting via relay. Additionally, if you want to use a relay on your first attempt, you can add the \"/r\" suffix to the ID or select the option \"Always connect via relay\" in the card of recent sessions if it exists."), ("No transfers in progress", ""), - ("install_cert_tip", "Install RustDesk certificate."), + ("install_cert_tip", "Install RustDesk certificate"), ("comfirm_install_cert_tip", "This certificate is a RustDesk testing certificate, and you can trust this certificate. The certificate will be used for trusting and installing RustDesk drivers."), ("empty_recent_tip", "Oops, no recent sessions!\nTime to plan a new one."), ("empty_favorite_tip", "No favorite peers yet?\nLet's find someone to connect with and add it to your favorites!"), From a0171f9cc8424729e8c1be41163d70350b6ae985 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 13 Jul 2023 12:52:09 +0800 Subject: [PATCH 117/612] modify description Signed-off-by: dignow --- src/lang/en.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/en.rs b/src/lang/en.rs index 89a9e92ca..fa9ed33ab 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -47,7 +47,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("relay_hint_tip", "It may not be possible to connect directly; you can try connecting via relay. Additionally, if you want to use a relay on your first attempt, you can add the \"/r\" suffix to the ID or select the option \"Always connect via relay\" in the card of recent sessions if it exists."), ("No transfers in progress", ""), ("install_cert_tip", "Install RustDesk certificate"), - ("comfirm_install_cert_tip", "This certificate is a RustDesk testing certificate, and you can trust this certificate. The certificate will be used for trusting and installing RustDesk drivers."), + ("comfirm_install_cert_tip", "This is a RustDesk testing certificate, which can be trusted. The certificate will be used to trust and install RustDesk drivers when required."), ("empty_recent_tip", "Oops, no recent sessions!\nTime to plan a new one."), ("empty_favorite_tip", "No favorite peers yet?\nLet's find someone to connect with and add it to your favorites!"), ("empty_lan_tip", "Oh no, it looks like we haven't discovered any peers yet."), From afae2d110cd36403975db6101c4b84311d32c72f Mon Sep 17 00:00:00 2001 From: 5idereal Date: Thu, 13 Jul 2023 16:38:26 +0800 Subject: [PATCH 118/612] update tw.rs --- src/lang/tw.rs | 86 +++++++++++++++++++++++++------------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 8aeb47d83..af3ca602e 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -44,7 +44,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("id_change_tip", "僅能使用以下字元:a-z、A-Z、0-9、_ (底線)。首字元必須為 a-z 或 A-Z。長度介於 6 到 16 之間。"), ("Website", "網站"), ("About", "關於"), - ("Slogan_tip", ""), + ("Slogan_tip", "在這個混沌的世界中用心製作!"), ("Privacy Statement", "隱私權聲明"), ("Mute", "靜音"), ("Build Date", "構建日期"), @@ -90,10 +90,10 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Receive", "接收"), ("Send", "傳送"), ("Refresh File", "重新整理檔案"), - ("Local", "本地"), + ("Local", "本機"), ("Remote", "遠端"), ("Remote Computer", "遠端電腦"), - ("Local Computer", "本地電腦"), + ("Local Computer", "本機電腦"), ("Confirm Delete", "確認刪除"), ("Delete", "刪除"), ("Properties", "屬性"), @@ -210,7 +210,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Settings", "設定"), ("Username", "使用者名稱"), ("Invalid port", "連線端口無效"), - ("Closed manually by the peer", "遠端使用者關閉了工作階段"), + ("Closed manually by the peer", "對方關閉了工作階段"), ("Enable remote configuration modification", "允許遠端使用者更改設定"), ("Run without install", "跳過安裝直接執行"), ("Connect via relay", "中繼連線"), @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "缺少使用者名稱"), ("Password missed", "缺少密碼"), ("Wrong credentials", "提供的登入資訊有誤"), - ("The verification code is incorrect or has expired", ""), + ("The verification code is incorrect or has expired", "驗證碼錯誤或已過期"), ("Edit Tag", "編輯標籤"), ("Unremember Password", "忘掉密碼"), ("Favorites", "我的最愛"), @@ -301,9 +301,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Succeeded", "成功"), ("Someone turns on privacy mode, exit", "其他使用者開啟隱私模式,退出"), ("Unsupported", "不支援"), - ("Peer denied", "被控端拒絕"), + ("Peer denied", "被對方拒絕"), ("Please install plugins", "請安裝插件"), - ("Peer exit", "被控端退出"), + ("Peer exit", "被對方退出"), ("Failed to turn off", "退出失敗"), ("Turned off", "退出"), ("In privacy mode", "開啟隱私模式"), @@ -326,7 +326,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Restart Remote Device", "重新啟動遠端電腦"), ("Are you sure you want to restart", "確定要重新啟動"), ("Restarting Remote Device", "正在重新啟動遠端裝置"), - ("remote_restarting_tip", "遠端裝置正在重新啟動,請關閉當前提示框,並在一段時間後使用永久密碼重新連線"), + ("remote_restarting_tip", "遠端裝置正在重新啟動,請關閉此對話框,並在一段時間後使用永久密碼重新連線"), ("Copied", "已複製"), ("Exit Fullscreen", "退出全螢幕"), ("Fullscreen", "全螢幕"), @@ -337,15 +337,15 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Ratio", "比例"), ("Image Quality", "畫質"), ("Scroll Style", "滾動樣式"), - ("Show Toolbar", ""), - ("Hide Toolbar", ""), + ("Show Toolbar", "顯示工具列"), + ("Hide Toolbar", "隱藏工具列"), ("Direct Connection", "直接連線"), ("Relay Connection", "中繼連線"), ("Secure Connection", "安全連線"), ("Insecure Connection", "非安全連線"), ("Scale original", "原始尺寸"), ("Scale adaptive", "適應視窗"), - ("General", "通用"), + ("General", "一般"), ("Security", "安全"), ("Theme", "主題"), ("Dark Theme", "黑暗主題"), @@ -360,15 +360,15 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Server", "伺服器"), ("Direct IP Access", "IP 直接連線"), ("Proxy", "代理"), - ("Apply", "應用"), + ("Apply", "套用"), ("Disconnect all devices?", "中斷所有遠端連線?"), ("Clear", "清空"), ("Audio Input Device", "音訊輸入裝置"), ("Use IP Whitelisting", "只允許白名單上的 IP 進行連線"), ("Network", "網路"), - ("Enable RDP", "允許 RDP 訪問"), - ("Pin Toolbar", ""), - ("Unpin Toolbar", ""), + ("Enable RDP", "允許 RDP 存取"), + ("Pin Toolbar", "釘選工具列"), + ("Unpin Toolbar", "取消釘選工具列"), ("Recording", "錄製"), ("Directory", "路徑"), ("Automatically record incoming sessions", "自動錄製連入的工作階段"), @@ -387,7 +387,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Other", "其他"), ("Confirm before closing multiple tabs", "關閉多個分頁前詢問我"), ("Keyboard Settings", "鍵盤設定"), - ("Full Access", "完全訪問"), + ("Full Access", "完全存取"), ("Screen Share", "僅分享螢幕畫面"), ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland 需要 Ubuntu 21.04 或更高版本。"), ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland 需要更高版本的 Linux 發行版。請嘗試使用 X11 桌面或更改您的作業系統。"), @@ -406,19 +406,19 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-time Password", "一次性密碼"), ("Use one-time password", "使用一次性密碼"), ("One-time password length", "一次性密碼長度"), - ("Request access to your device", "請求訪問您的裝置"), + ("Request access to your device", "請求存取您的裝置"), ("Hide connection management window", "隱藏連線管理視窗"), ("hide_cm_tip", "在只允許密碼連線並且只用固定密碼的情況下才允許隱藏"), - ("wayland_experiment_tip", "Wayland 支援處於實驗階段,如果您需要使用無人值守訪問,請使用 X11。"), + ("wayland_experiment_tip", "Wayland 支援處於實驗階段,如果您需要使用無人值守存取,請使用 X11。"), ("Right click to select tabs", "右鍵選擇分頁"), ("Skipped", "已略過"), ("Add to Address Book", "新增到通訊錄"), ("Group", "群組"), ("Search", "搜尋"), ("Closed manually by web console", "被 Web 控制台手動關閉"), - ("Local keyboard type", "本地鍵盤類型"), - ("Select local keyboard type", "請選擇本地鍵盤類型"), - ("software_render_tip", "如果您使用 NVIDIA 顯示卡,並且遠端視窗在建立連線後會立刻關閉,那麼請安裝 nouveau 顯示卡驅動程式並且選擇使用軟體渲染可能會有幫助。重新啟動軟體後生效。"), + ("Local keyboard type", "本機鍵盤類型"), + ("Select local keyboard type", "請選擇本機鍵盤類型"), + ("software_render_tip", "如果您使用 Nvidia 顯示卡,並且遠端視窗在建立連線後會立刻關閉,那麼請安裝 nouveau 顯示卡驅動程式並且選擇使用軟體渲染可能會有幫助。重新啟動軟體後生效。"), ("Always use software rendering", "使用軟體渲染"), ("config_input", "為了能夠透過鍵盤控制遠端桌面,請給予 RustDesk \"輸入監控\" 權限。"), ("config_microphone", "為了支援透過麥克風進行音訊傳輸,請給予 RustDesk \"錄音\"權限。"), @@ -454,7 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Voice call", "語音通話"), ("Text chat", "文字聊天"), ("Stop voice call", "停止語音通話"), - ("relay_hint_tip", "可能無法直接連線,可以嘗試中繼連線。\n另外,如果想要直接使用中繼連線,可以在 ID 後面新增/r,如果最近訪問裏存在該卡片,也可以在卡片選項裏選擇強制走中繼連接。"), + ("relay_hint_tip", "可能無法直接連線,可以嘗試中繼連線。\n另外,如果想要直接使用中繼連線,可以在 ID 後面新增/r,如果近期工作階段裏存在該卡片,也可以在卡片選項裏選擇強制走中繼連接。"), ("Reconnect", "重新連線"), ("Codec", "編解碼器"), ("Resolution", "解析度"), @@ -469,15 +469,15 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Minimize", "最小化"), ("Maximize", "最大化"), ("Your Device", "您的裝置"), - ("empty_recent_tip", "空空如也"), + ("empty_recent_tip", "哎呀,沒有近期的工作階段!\n是時候安排點新工作了。"), ("empty_favorite_tip", "空空如也"), - ("empty_lan_tip", "空空如也"), - ("empty_address_book_tip", "空空如也"), + ("empty_lan_tip", "喔不,看來我們目前找不到任何夥伴。"), + ("empty_address_book_tip", "老天,看來您的通訊錄中沒有任何夥伴。"), ("eg: admin", "例如:admin"), ("Empty Username", "空使用者帳號"), ("Empty Password", "空密碼"), ("Me", "我"), - ("identical_file_tip", "此檔案與對方的檔案一致"), + ("identical_file_tip", "此檔案與對方的檔案一致。"), ("show_monitors_tip", "在工具列中顯示顯示器"), ("View Mode", "瀏覽模式"), ("login_linux_tip", "需要登入到遠端 Linux 使用者帳戶才能啟用 X 介面"), @@ -498,24 +498,24 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Fingerprint", "指紋"), ("Copy Fingerprint", "複製指紋"), ("no fingerprints", "沒有指紋"), - ("Select a peer", ""), - ("Select peers", ""), - ("Plugins", ""), - ("Uninstall", ""), - ("Update", ""), - ("Enable", ""), - ("Disable", ""), - ("Options", ""), - ("resolution_original_tip", ""), - ("resolution_fit_local_tip", ""), - ("resolution_custom_tip", ""), - ("Collapse toolbar", ""), - ("Accept and Elevate", ""), - ("accept_and_elevate_btn_tooltip", ""), - ("clipboard_wait_response_timeout_tip", ""), + ("Select a peer", "選擇夥伴"), + ("Select peers", "選擇夥伴"), + ("Plugins", "外掛程式"), + ("Uninstall", "解除安裝"), + ("Update", "更新"), + ("Enable", "啟用"), + ("Disable", "停用"), + ("Options", "選項"), + ("resolution_original_tip", "原始解析度"), + ("resolution_fit_local_tip", "調整成本機解析度"), + ("resolution_custom_tip", "自動解析度"), + ("Collapse toolbar", "收回工具列"), + ("Accept and Elevate", "接受並提升"), + ("accept_and_elevate_btn_tooltip", "接受連線並提升 UAC 權限。"), + ("clipboard_wait_response_timeout_tip", "等待複製回應逾時。"), ("Incoming connection", "收到的連接"), ("Outgoing connection", "發起的連接"), - ("Exit", ""), - ("Open", ""), + ("Exit", "退出"), + ("Open", "開啟"), ].iter().cloned().collect(); } From 3a831085ebeb748ba35768528ebfaada734a3822 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Thu, 13 Jul 2023 11:43:57 +0200 Subject: [PATCH 119/612] Update italian language --- src/lang/it.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 2f0f23795..866ddc20a 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Risoluzione"), ("No transfers in progress", "Nessun trasferimento in corso"), ("Set one-time password length", "Imposta lunghezza password monouso"), - ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("install_cert_tip", "Installa certificato RustDesk"), + ("comfirm_install_cert_tip", "Questo è un certificato di test RustDesk, che può essere considerato attendibile.\nIl certificato verrà usato per certifarsi ed installare i driver RustDesk quando richiesto."), ("RDP Settings", "Impostazioni RDP"), ("Sort by", "Ordina per"), ("New Connection", "Nuova connessione"), From ee3e7938c2fa701d3fc60e424980c90dfc236d68 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Thu, 13 Jul 2023 13:02:14 +0200 Subject: [PATCH 120/612] Update de.rs --- src/lang/de.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index ee010f62b..d0b17df60 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Auflösung"), ("No transfers in progress", "Keine Übertragungen im Gange"), ("Set one-time password length", "Länge des Einmalpassworts festlegen"), - ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("install_cert_tip", "RustDesk-Zertifikat installieren"), + ("comfirm_install_cert_tip", "Dies ist ein RustDesk-Testzertifikat, dem vertraut werden kann. Das Zertifikat wird verwendet, um RustDesk-Treibern bei Bedarf zu vertrauen und diese zu installieren."), ("RDP Settings", "RDP-Einstellungen"), ("Sort by", "Sortieren nach"), ("New Connection", "Neue Verbindung"), From 7a2e151079133aa6f7247b820030616da9b6e715 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 14 Jul 2023 14:55:16 +0800 Subject: [PATCH 121/612] remove gstreamer1.0-pipewire in AppImageBuilder-aarch64.yml since we have no 20.04 image yet --- appimage/AppImageBuilder-aarch64.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/appimage/AppImageBuilder-aarch64.yml b/appimage/AppImageBuilder-aarch64.yml index a16d5807d..4c552b6f6 100644 --- a/appimage/AppImageBuilder-aarch64.yml +++ b/appimage/AppImageBuilder-aarch64.yml @@ -50,7 +50,6 @@ AppDir: - libva-x11-2 - libvdpau1 - libgstreamer-plugins-base1.0-0 - - gstreamer1.0-pipewire - libwayland-cursor0 - libwayland-egl1 - libpulse0 From 5875cb1896936ddff47e3931ac11e6ab37ce1036 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 14 Jul 2023 19:03:34 +0800 Subject: [PATCH 122/612] core --- src/core_main.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core_main.rs b/src/core_main.rs index 64ac9f405..391b0f3ef 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -95,7 +95,8 @@ pub fn core_main() -> Option> { args.clear(); } if args.len() > 0 && args[0] == "--version" { - my_println!("{}", crate::VERSION); + // not use my_println here, because check super use using this command, no dialog expected + println!("{}", crate::VERSION); return None; } #[cfg(windows)] From 314d7f43877b930093e1845e99c61d153eaead61 Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Sat, 15 Jul 2023 00:13:49 +0800 Subject: [PATCH 123/612] Update flutter-build.yml --- .github/workflows/flutter-build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 86c16505f..d7b7f7763 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -1233,7 +1233,7 @@ jobs: pushd ~/rpmbuild/RPMS/${{ matrix.job.arch }} mkdir -p /opt/artifacts/rpm for name in rustdesk*??.rpm; do - mv "$name" "/opt/artifacts/rpm/${name%%.rpm}-fedora28-centos8.rpm" + mv "$name" "/opt/artifacts/rpm/${name%%.rpm}.rpm" done # rpm suse package echo -e "start packaging suse package" @@ -1358,7 +1358,7 @@ jobs: # files: | # res/rustdesk*.zst - - name: Publish fedora28/centos8 package + - name: Publish fedora package if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: @@ -1457,7 +1457,7 @@ jobs: pushd ~/rpmbuild/RPMS/${{ matrix.job.arch }} mkdir -p /opt/artifacts/rpm for name in rustdesk*??.rpm; do - mv "$name" "/opt/artifacts/rpm/${name%%.rpm}-fedora28-centos8.rpm" + mv "$name" "/opt/artifacts/rpm/${name%%.rpm}.rpm" done # rpm suse package pushd /workspace @@ -1572,7 +1572,7 @@ jobs: files: | ./appimage/rustdesk-${{ env.VERSION }}-*.AppImage - - name: Publish fedora28/centos8 package + - name: Publish fedora package if: matrix.job.extra-build-features == '' && env.UPLOAD_ARTIFACT == 'true' uses: softprops/action-gh-release@v1 with: From ebd8903c9b25db305e59940aee54c55900a8bff3 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 15 Jul 2023 07:21:54 +0800 Subject: [PATCH 124/612] logout confirm Signed-off-by: 21pages --- flutter/lib/common/widgets/login.dart | 19 +++++++++++++++++++ .../desktop/pages/desktop_setting_page.dart | 4 ++-- flutter/lib/mobile/pages/connection_page.dart | 2 +- flutter/lib/mobile/pages/settings_page.dart | 2 +- src/lang/ca.rs | 1 + src/lang/cn.rs | 1 + src/lang/cs.rs | 1 + src/lang/da.rs | 1 + src/lang/de.rs | 1 + src/lang/el.rs | 1 + src/lang/en.rs | 1 + src/lang/eo.rs | 1 + src/lang/es.rs | 1 + src/lang/fa.rs | 1 + src/lang/fr.rs | 1 + src/lang/hu.rs | 1 + src/lang/id.rs | 1 + src/lang/it.rs | 1 + src/lang/ja.rs | 1 + src/lang/ko.rs | 1 + src/lang/kz.rs | 1 + src/lang/lt.rs | 1 + src/lang/nl.rs | 1 + src/lang/pl.rs | 1 + src/lang/pt_PT.rs | 1 + src/lang/ptbr.rs | 1 + src/lang/ro.rs | 1 + src/lang/ru.rs | 1 + src/lang/sk.rs | 1 + src/lang/sl.rs | 1 + src/lang/sq.rs | 1 + src/lang/sr.rs | 1 + src/lang/sv.rs | 1 + src/lang/template.rs | 1 + src/lang/th.rs | 1 + src/lang/tr.rs | 1 + src/lang/tw.rs | 1 + src/lang/ua.rs | 1 + src/lang/vn.rs | 1 + 39 files changed, 58 insertions(+), 4 deletions(-) diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 7fefa49b4..17cc7090c 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -675,3 +675,22 @@ Future verificationCodeDialog(UserPayload? user) async { return res; } + +void logOutConfirmDialog() { + gFFI.dialogManager.show((setState, close, context) { + submit() { + close(); + gFFI.userModel.logOut(); + } + + return CustomAlertDialog( + content: Text(translate("logout_tip")), + actions: [ + dialogButton(translate("Cancel"), onPressed: close, isOutline: true), + dialogButton(translate("OK"), onPressed: submit), + ], + onSubmit: submit, + onCancel: close, + ); + }); +} diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index eb8a96e15..1ff8bc09e 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -1385,7 +1385,7 @@ class _AccountState extends State<_Account> { () => { gFFI.userModel.userName.value.isEmpty ? loginDialog() - : gFFI.userModel.logOut() + : logOutConfirmDialog() })); } @@ -1503,7 +1503,7 @@ class _PluginState extends State<_Plugin> { () => { gFFI.userModel.userName.value.isEmpty ? loginDialog() - : gFFI.userModel.logOut() + : logOutConfirmDialog() })); } } diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart index f2680db39..48c56e6a5 100644 --- a/flutter/lib/mobile/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -275,7 +275,7 @@ class _WebMenuState extends State { if (gFFI.userModel.userName.value.isEmpty) { loginDialog(); } else { - gFFI.userModel.logOut(); + logOutConfirmDialog(); } } if (value == 'scan') { diff --git a/flutter/lib/mobile/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart index bdaa42ef9..eea1498db 100644 --- a/flutter/lib/mobile/pages/settings_page.dart +++ b/flutter/lib/mobile/pages/settings_page.dart @@ -392,7 +392,7 @@ class _SettingsState extends State with WidgetsBindingObserver { if (gFFI.userModel.userName.value.isEmpty) { loginDialog(); } else { - gFFI.userModel.logOut(); + logOutConfirmDialog(); } }, ), diff --git a/src/lang/ca.rs b/src/lang/ca.rs index d6d4f0a31..71d80f02e 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index e06a3341b..69b5e33bf 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "发起的连接"), ("Exit", "退出"), ("Open", "打开"), + ("logout_tip", "确定要退出登录吗?"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 7f296bf95..07c9e2c09 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index fb4a42cdb..6d4ffa8c1 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index d0b17df60..965684d99 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "Ausgehende Verbindung"), ("Exit", "Beenden"), ("Open", "Öffnen"), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 9846b2185..78cc94a7b 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/en.rs b/src/lang/en.rs index fa9ed33ab..595f95b2e 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -71,5 +71,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("resolution_custom_tip", "Custom resolution"), ("accept_and_elevate_btn_tooltip", "Accept the connection and elevate UAC permissions."), ("clipboard_wait_response_timeout_tip", "Timed out waiting for copy response."), + ("logout_tip", "Are you sure you want to log out ?") ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index ce40a2c8d..548377e2a 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index a293b2f83..0c1cf113f 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 28c6a24b7..f745cd486 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "اتصال خروجی"), ("Exit", "خروج"), ("Open", "باز کردن"), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index c53c5f386..255e3d27e 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index ad609dd93..973a04a17 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index f6825d083..f8662bb0e 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 866ddc20a..5f1a34a08 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "Conenssioni in uscita"), ("Exit", "Esci da RustDesk"), ("Open", "Apri RustDesk"), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index d82953db0..f6aa3b881 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 622e325c9..5c6eaf559 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 8d9ee8b5c..792ffa157 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index c95549b58..e7c0c79e1 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 6411cafb7..cf8c2a25f 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "Uitgaande verbinding"), ("Exit", "Verlaten"), ("Open", "Open"), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 6a382c1ea..90c83ada2 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index e40a9b02f..dc91081b9 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index a099b29fb..fda7c867d 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index e316be0ed..b3f75beff 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 0015d13d2..86ec23dee 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "Исходящее подключение"), ("Exit", "Выход"), ("Open", "Открыть"), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 0e202faa1..3fad5e4f7 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 41c514c68..df0b94f8a 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 4a7d9bbe4..b62557e0b 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index eab1c4fc1..cfce2aa9d 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 001ab1ddf..6c752ed3a 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 8c41cf85c..9cbd25822 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 4d8badbf7..edfdbb540 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 43aedd099..d1a121f37 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 3817d923f..5240b55f6 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "發起的連接"), ("Exit", "退出"), ("Open", "開啟"), + ("logout_tip", "確定要退出登錄嗎?"), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index b557f647d..3c362bf03 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index b060dcd19..0bdf2df29 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -517,5 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", ""), ("Exit", ""), ("Open", ""), + ("logout_tip", ""), ].iter().cloned().collect(); } From 889415fb2691386687e09ccdc8a936f19f7446df Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Sat, 15 Jul 2023 09:57:15 +0800 Subject: [PATCH 125/612] Update en.rs --- src/lang/en.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/en.rs b/src/lang/en.rs index 595f95b2e..ecaffa0d0 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -71,6 +71,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("resolution_custom_tip", "Custom resolution"), ("accept_and_elevate_btn_tooltip", "Accept the connection and elevate UAC permissions."), ("clipboard_wait_response_timeout_tip", "Timed out waiting for copy response."), - ("logout_tip", "Are you sure you want to log out ?") + ("logout_tip", "Are you sure you want to log out?") ].iter().cloned().collect(); } From 2cfa61602ff934779ee0423b493d62cdc970f98c Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Sat, 15 Jul 2023 17:09:07 +0200 Subject: [PATCH 126/612] Update italian language --- src/lang/it.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 5f1a34a08..f61df2525 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -517,6 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "Conenssioni in uscita"), ("Exit", "Esci da RustDesk"), ("Open", "Apri RustDesk"), - ("logout_tip", ""), + ("logout_tip", "Sei sicuro di voler uscire?"), ].iter().cloned().collect(); } From 6d70c8af5001e4787cedade4f0a00627376974e0 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Sat, 15 Jul 2023 19:30:56 +0200 Subject: [PATCH 127/612] Update de.rs --- src/lang/de.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index 965684d99..0e8659a8e 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -517,6 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "Ausgehende Verbindung"), ("Exit", "Beenden"), ("Open", "Öffnen"), - ("logout_tip", ""), + ("logout_tip", "Sind Sie sicher, dass Sie sich abmelden wollen?"), ].iter().cloned().collect(); } From 2051bee3cfe1d7ece93609c01eb753af21972d1c Mon Sep 17 00:00:00 2001 From: fufesou Date: Sun, 16 Jul 2023 08:29:26 +0800 Subject: [PATCH 128/612] fix, wayland, change resolutions Signed-off-by: fufesou --- libs/hbb_common/src/config.rs | 6 +++--- src/server/video_service.rs | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index cba3c0ca3..1712015a7 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -399,10 +399,10 @@ impl Config2 { pub fn load_path( file: PathBuf, ) -> T { - let cfg = match confy::load_path(file) { + let cfg = match confy::load_path(&file) { Ok(config) => config, Err(err) => { - log::error!("Failed to load config: {}", err); + log::error!("Failed to load config '{}': {}", file.as_os_str().to_str().unwrap_or(""), err); T::default() } }; @@ -958,7 +958,7 @@ impl PeerConfig { config } Err(err) => { - log::error!("Failed to load config: {}", err); + log::error!("Failed to load peer config '{}': {}", id, err); Default::default() } } diff --git a/src/server/video_service.rs b/src/server/video_service.rs index 9478a19f0..e074da310 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -623,6 +623,8 @@ fn run(sp: GenericService) -> ResultType<()> { bail!("SWITCH"); } if c.current != *CURRENT_DISPLAY.lock().unwrap() { + #[cfg(target_os = "linux")] + wayland::clear(); *SWITCH.lock().unwrap() = true; bail!("SWITCH"); } @@ -657,6 +659,8 @@ fn run(sp: GenericService) -> ResultType<()> { if let Some(msg_out) = check_get_displays_changed_msg() { sp.send(msg_out); log::info!("Displays changed"); + #[cfg(target_os = "linux")] + wayland::clear(); *SWITCH.lock().unwrap() = true; bail!("SWITCH"); } @@ -734,6 +738,8 @@ fn run(sp: GenericService) -> ResultType<()> { Err(err) => { if check_display_changed(c.ndisplay, c.current, c.width, c.height) { log::info!("Displays changed"); + #[cfg(target_os = "linux")] + wayland::clear(); *SWITCH.lock().unwrap() = true; bail!("SWITCH"); } From 7bc98ee4342a379bb38bba9de60d2d2c5a2d9426 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sun, 16 Jul 2023 08:41:32 +0800 Subject: [PATCH 129/612] simple refactor Signed-off-by: fufesou --- src/server/video_service.rs | 14 ++++++-------- src/server/wayland.rs | 18 +----------------- 2 files changed, 7 insertions(+), 25 deletions(-) diff --git a/src/server/video_service.rs b/src/server/video_service.rs index e074da310..9d6968c99 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -503,7 +503,7 @@ fn run(sp: GenericService) -> ResultType<()> { #[cfg(not(any(target_os = "android", target_os = "ios")))] let _wake_lock = get_wake_lock(); - // ensure_inited() is needed because release_resource() may be called. + // ensure_inited() is needed because clear() may be called. #[cfg(target_os = "linux")] super::wayland::ensure_inited()?; #[cfg(windows)] @@ -624,7 +624,7 @@ fn run(sp: GenericService) -> ResultType<()> { } if c.current != *CURRENT_DISPLAY.lock().unwrap() { #[cfg(target_os = "linux")] - wayland::clear(); + super::wayland::clear(); *SWITCH.lock().unwrap() = true; bail!("SWITCH"); } @@ -660,7 +660,7 @@ fn run(sp: GenericService) -> ResultType<()> { sp.send(msg_out); log::info!("Displays changed"); #[cfg(target_os = "linux")] - wayland::clear(); + super::wayland::clear(); *SWITCH.lock().unwrap() = true; bail!("SWITCH"); } @@ -729,7 +729,7 @@ fn run(sp: GenericService) -> ResultType<()> { // Do not reset the capturer for now, as it will cause the prompt to show every few minutes. // https://github.com/rustdesk/rustdesk/issues/4276 // - // super::wayland::release_resource(); + // super::wayland::clear(); // bail!("Wayland capturer none 100 times, try restart capture"); } } @@ -739,7 +739,7 @@ fn run(sp: GenericService) -> ResultType<()> { if check_display_changed(c.ndisplay, c.current, c.width, c.height) { log::info!("Displays changed"); #[cfg(target_os = "linux")] - wayland::clear(); + super::wayland::clear(); *SWITCH.lock().unwrap() = true; bail!("SWITCH"); } @@ -784,9 +784,7 @@ fn run(sp: GenericService) -> ResultType<()> { } #[cfg(target_os = "linux")] - if !scrap::is_x11() { - super::wayland::release_resource(); - } + super::wayland::clear(); Ok(()) } diff --git a/src/server/wayland.rs b/src/server/wayland.rs index 10b93afce..efed83936 100644 --- a/src/server/wayland.rs +++ b/src/server/wayland.rs @@ -186,21 +186,6 @@ pub(super) async fn check_init() -> ResultType<()> { Ok(()) } -pub fn clear() { - if scrap::is_x11() { - return; - } - - let mut lock = CAP_DISPLAY_INFO.write().unwrap(); - if *lock != 0 { - unsafe { - let cap_display_info = Box::from_raw(*lock as *mut CapDisplayInfo); - let _ = Box::from_raw(cap_display_info.capturer.0); - } - *lock = 0; - } -} - pub(super) async fn get_displays() -> ResultType<(usize, Vec)> { check_init().await?; let addr = *CAP_DISPLAY_INFO.read().unwrap(); @@ -230,8 +215,7 @@ pub(super) fn get_primary() -> ResultType { } } -#[allow(dead_code)] -pub(super) fn release_resource() { +pub fn clear() { if scrap::is_x11() { return; } From fa0b1436c2099a78cb2e9788de8e01185b9401d4 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sun, 16 Jul 2023 09:35:11 +0800 Subject: [PATCH 130/612] try fix CI Signed-off-by: fufesou --- libs/scrap/Cargo.toml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libs/scrap/Cargo.toml b/libs/scrap/Cargo.toml index ffce4ab97..4956403a9 100644 --- a/libs/scrap/Cargo.toml +++ b/libs/scrap/Cargo.toml @@ -15,7 +15,6 @@ mediacodec = ["ndk"] linux-pkg-config = ["dep:pkg-config"] [dependencies] -block = "0.1" cfg-if = "1.0" num_cpus = "1.15" lazy_static = "1.4" @@ -27,6 +26,9 @@ version = "0.3" default-features = true features = ["dxgi", "dxgi1_2", "dxgi1_5", "d3d11", "winuser", "winerror", "errhandlingapi", "libloaderapi"] +[target.'cfg(target_os = "macos")'.dependencies] +block = "0.1" + [target.'cfg(target_os = "android")'.dependencies] android_logger = "0.13" jni = "0.21" From 77231f6538603ba093d0bfcbbee85bf065d1d324 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sun, 16 Jul 2023 09:52:32 +0800 Subject: [PATCH 131/612] simple refact Signed-off-by: fufesou --- libs/hbb_common/src/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 1712015a7..975abf80a 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -402,7 +402,7 @@ pub fn load_path config, Err(err) => { - log::error!("Failed to load config '{}': {}", file.as_os_str().to_str().unwrap_or(""), err); + log::error!("Failed to load config '{}': {}", file.display(), err); T::default() } }; From ec344702840c293d032d4202da1afeffdce0f7bf Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 16 Jul 2023 09:59:46 +0800 Subject: [PATCH 132/612] clear hwcodec config rather than remove Signed-off-by: 21pages --- libs/hbb_common/src/config.rs | 9 +++------ libs/scrap/src/common/hwcodec.rs | 4 ++-- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index cba3c0ca3..a12de5e5b 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -81,10 +81,7 @@ const CHARS: &[char] = &[ 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ]; -pub const RENDEZVOUS_SERVERS: &[&str] = &[ - "rs-ny.rustdesk.com", - "rs-sg.rustdesk.com", -]; +pub const RENDEZVOUS_SERVERS: &[&str] = &["rs-ny.rustdesk.com", "rs-sg.rustdesk.com"]; pub const RS_PUB_KEY: &str = match option_env!("RS_PUB_KEY") { Some(key) if !key.is_empty() => key, @@ -1350,8 +1347,8 @@ impl HwCodecConfig { Config::store_(self, "_hwcodec"); } - pub fn remove() { - std::fs::remove_file(Config::file_("_hwcodec")).ok(); + pub fn clear() { + HwCodecConfig::default().store(); } /// refresh current global HW_CODEC_CONFIG, usually uesd after HwCodecConfig::remove() diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index aba0d55d0..50ad33099 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -332,9 +332,9 @@ pub fn check_config_process() { use hbb_common::sysinfo::{ProcessExt, System, SystemExt}; std::thread::spawn(move || { - // Remove to avoid checking process errors + // Clear to avoid checking process errors // But when the program is just started, the configuration file has not been updated, and the new connection will read an empty configuration - HwCodecConfig::remove(); + HwCodecConfig::clear(); if let Ok(exe) = std::env::current_exe() { if let Some(file_name) = exe.file_name().to_owned() { let s = System::new_all(); From ebf25282e329bb9ab749e959f71a936899642213 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 16 Jul 2023 20:54:30 +0800 Subject: [PATCH 133/612] change distro back to 18.04 because some ci problem --- .github/workflows/flutter-build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index d7b7f7763..8d97c1c26 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -719,7 +719,7 @@ jobs: id: vcpkg with: arch: ${{ matrix.job.arch }} - distro: ubuntu20.04 + distro: ubuntu18.04 # not ready yet # distro: ubuntu18.04-rustdesk githubToken: ${{ github.token }} @@ -1423,7 +1423,7 @@ jobs: id: vcpkg with: arch: ${{ matrix.job.arch }} - distro: ubuntu20.04 + distro: ubuntu18.04 githubToken: ${{ github.token }} setup: | ls -l "${PWD}" @@ -1612,7 +1612,7 @@ jobs: # id: rpm # with: # arch: ${{ matrix.job.arch }} - # distro: ubuntu20.04 + # distro: ubuntu18.04 # githubToken: ${{ github.token }} # setup: | # ls -l "${PWD}" @@ -1673,7 +1673,7 @@ jobs: id: rpm with: arch: ${{ matrix.job.arch }} - distro: ubuntu20.04 + distro: ubuntu18.04 githubToken: ${{ github.token }} setup: | ls -l "${PWD}" From 60f0a3485f8824f0bd5e6a0a5630c0cd2b02dbdb Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 16 Jul 2023 21:12:14 +0800 Subject: [PATCH 134/612] revert ci to old 18.04 status --- .github/workflows/flutter-build.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 8d97c1c26..563862bd5 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -1116,21 +1116,21 @@ jobs: - { arch: aarch64, target: aarch64-unknown-linux-gnu, - os: ubuntu-20.04, # just for naming package, not running host + os: ubuntu-18.04, # just for naming package, not running host use-cross: true, extra-build-features: "", } - { arch: aarch64, target: aarch64-unknown-linux-gnu, - os: ubuntu-20.04, # just for naming package, not running host + os: ubuntu-18.04, # just for naming package, not running host use-cross: true, extra-build-features: "appimage", } # - { # arch: aarch64, # target: aarch64-unknown-linux-gnu, - # os: ubuntu-20.04, # just for naming package, not running host + # os: ubuntu-18.04, # just for naming package, not running host # use-cross: true, # extra-build-features: "flatpak", # } @@ -1380,19 +1380,19 @@ jobs: - { arch: x86_64, target: x86_64-unknown-linux-gnu, - os: ubuntu-20.04, + os: ubuntu-18.04, extra-build-features: "", } - { arch: x86_64, target: x86_64-unknown-linux-gnu, - os: ubuntu-20.04, + os: ubuntu-18.04, extra-build-features: "flatpak", } - { arch: x86_64, target: x86_64-unknown-linux-gnu, - os: ubuntu-20.04, + os: ubuntu-18.04, extra-build-features: "appimage", } # - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, use-cross: true } @@ -1591,7 +1591,7 @@ jobs: # fail-fast: false # matrix: # job: - # # - { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04, arch: arm64 } + # # - { target: aarch64-unknown-linux-gnu , os: ubuntu-18.04, arch: arm64 } # - { target: aarch64-unknown-linux-gnu, os: ubuntu-20.04, arch: arm64 } # steps: # - name: Checkout source code @@ -1653,7 +1653,7 @@ jobs: fail-fast: false matrix: job: - - { target: x86_64-unknown-linux-gnu, os: ubuntu-20.04, arch: x86_64 } + - { target: x86_64-unknown-linux-gnu, os: ubuntu-18.04, arch: x86_64 } steps: - name: Checkout source code uses: actions/checkout@v3 From 30d6edf5029545c6028d2cc3bb7fc200835737e3 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 16 Jul 2023 21:15:02 +0800 Subject: [PATCH 135/612] rust 1.71 --- .github/workflows/flutter-build.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 563862bd5..30eccf364 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -746,10 +746,10 @@ jobs: # rust pushd /opt # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.70.0-${{ matrix.job.target }}.tar.gz + wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.71.0-${{ matrix.job.target }}.tar.gz tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-1.70.0-${{ matrix.job.target }} && ./install.sh - rm -rf rust-1.70.0-${{ matrix.job.target }} + cd rust-1.71.0-${{ matrix.job.target }} && ./install.sh + rm -rf rust-1.71.0-${{ matrix.job.target }} # edit config mkdir -p ~/.cargo/ echo """ @@ -915,10 +915,10 @@ jobs: # rust pushd /opt # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.70.0-${{ matrix.job.target }}.tar.gz + wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.71.0-${{ matrix.job.target }}.tar.gz tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-1.70.0-${{ matrix.job.target }} && ./install.sh - rm -rf rust-1.70.0-${{ matrix.job.target }} + cd rust-1.71.0-${{ matrix.job.target }} && ./install.sh + rm -rf rust-1.71.0-${{ matrix.job.target }} # edit config mkdir -p ~/.cargo/ echo """ @@ -1048,10 +1048,10 @@ jobs: # rust pushd /opt # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.70.0-${{ matrix.job.target }}.tar.gz + wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.71.0-${{ matrix.job.target }}.tar.gz tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-1.70.0-${{ matrix.job.target }} && ./install.sh - rm -rf rust-1.70.0-${{ matrix.job.target }} + cd rust-1.71.0-${{ matrix.job.target }} && ./install.sh + rm -rf rust-1.71.0-${{ matrix.job.target }} # edit config mkdir -p ~/.cargo/ echo """ From 7f539a2de3f2fdd4362f199c863824622c92fd91 Mon Sep 17 00:00:00 2001 From: GC Chen Date: Sun, 16 Jul 2023 22:09:11 +0800 Subject: [PATCH 136/612] Update README-ZH.md Update README-ZH to match the current README.md. --- docs/README-ZH.md | 100 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 23 deletions(-) diff --git a/docs/README-ZH.md b/docs/README-ZH.md index d6d7d214e..b66c32d43 100644 --- a/docs/README-ZH.md +++ b/docs/README-ZH.md @@ -1,8 +1,8 @@

RustDesk - Your remote desktop
- 服务器 • + 服务器编译 • - Docker • + Docker结构截图
[English] | [Українська] | [česky] | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي] | [Tiếng Việt] | [Ελληνικά]
@@ -16,9 +16,19 @@ Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https: 或者[自己设置](https://rustdesk.com/server), 亦或者[开发您的版本](https://github.com/rustdesk/rustdesk-server-demo)。 -欢迎大家贡献代码, 请看 [`docs/CONTRIBUTING.md`](CONTRIBUTING.md). +![image](https://user-images.githubusercontent.com/71636191/171661982-430285f0-2e12-4b1d-9957-4a58e375304d.png) -[**可执行程序下载**](https://github.com/rustdesk/rustdesk/releases) +RustDesk 期待各位的贡献. 如何参与开发? 详情请看 [CONTRIBUTING.md](docs/CONTRIBUTING.md). + +[**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ) + +[**BINARY DOWNLOAD**](https://github.com/rustdesk/rustdesk/releases) + +[**NIGHTLY BUILD**](https://github.com/rustdesk/rustdesk/releases/tag/nightly) + +[Get it on F-Droid](https://f-droid.org/en/packages/com.carriez.flutter_hbb) ## 免费的公共服务器 @@ -26,8 +36,17 @@ Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https: | Location | Vendor | Specification | | --------- | ------------- | ------------------ | -| Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | +| Germany | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4 GB RAM | +| Germany | [Codext](https://codext.de) | 4 vCPU / 8 GB RAM | +| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | + +## Dev Container + +[![在 Dev Containers 中打开](https://img.shields.io/static/v1?label=Dev%20Container&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/rustdesk/rustdesk) + +如果你已经安装了 VS Code 和 Docker, 你可以点击上面的徽章开始使用. 点击后, VS Code 将自动安装 Dev Containers 扩展(如果需要),将源代码克隆到容器卷中, 并启动一个 Dev 容器供使用. + +Go through [DEVCONTAINER.md](docs/DEVCONTAINER.md) for more info. ## 依赖 @@ -37,16 +56,14 @@ Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https: [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) -移动版本使用Flutter,未来会将桌面版本从Sciter迁移到Flutter。 - ## 基本构建步骤 -- 请准备好 Rust 开发环境和 C++编译环境 +- 请准备好 Rust 开发环境和 C++ 编译环境 -- 安装[vcpkg](https://github.com/microsoft/vcpkg), 正确设置`VCPKG_ROOT`环境变量 +- 安装 [vcpkg](https://github.com/microsoft/vcpkg), 正确设置 `VCPKG_ROOT` 环境变量 - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - - Linux/Osx: vcpkg install libvpx libyuv opus aom + - Linux/macOS: vcpkg install libvpx libyuv opus aom - 运行 `cargo run` @@ -57,7 +74,15 @@ Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https: ### 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 +sudo apt install -y zip 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 make \ + libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev +``` + +### openSUSE Tumbleweed + +```sh +sudo zypper install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libXfixes-devel cmake alsa-lib-devel gstreamer-devel gstreamer-plugins-base-devel xdotool-devel ``` ### Fedora 28 (CentOS 8) @@ -107,24 +132,52 @@ 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 -cargo run +VCPKG_ROOT=$HOME/vcpkg cargo run ``` ### 把 Wayland 修改成 X11 (Xorg) RustDesk 暂时不支持 Wayland,不过正在积极开发中。 > [点我](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) -查看 如何将Xorg设置成默认的GNOME session +查看如何将 Xorg 设置成默认的 GNOME session. + +## Wayland 支持 + +Wayland 似乎没有提供任何将按键发送到其他窗口的 API. 因此, RustDesk 使用较低级别的 API, 即 `/dev/uinput` devices (Linux kernal level). + +当 Wayland 是受控方时,您必须以下列方式开始操作: + +```bash +# Start uinput service +$ sudo rustdesk --service +$ rustdesk +``` + +**Notice**: Wayland 屏幕录制使用不同的接口. RustDesk 目前只支持 org.freedesktop.portal.ScreenCast. + +```bash +$ dbus-send --session --print-reply \ + --dest=org.freedesktop.portal.Desktop \ + /org/freedesktop/portal/desktop \ + org.freedesktop.DBus.Properties.Get \ + string:org.freedesktop.portal.ScreenCast string:version +# Not support +Error org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.ScreenCast” +# Support +method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=257 reply_serial=2 + variant uint32 4 +``` ## 使用 Docker 编译 -### 构建Docker容器 +克隆版本库并构建 Docker 容器: ```sh git clone https://github.com/rustdesk/rustdesk # 克隆Github存储库 cd rustdesk # 进入文件夹 docker build -t "rustdesk-builder" . # 构建容器 ``` + 请注意: * 针对国内网络访问问题,可以做以下几点优化: 1. Dockerfile 中修改系统的源到国内镜像 @@ -163,8 +216,9 @@ docker build -t "rustdesk-builder" . # 构建容器 docker build -t "rustdesk-builder" . --build-arg http_proxy=http://host:port --build-arg https_proxy=http://host:port ``` -### 构建RustDesk程序 -容器构建完成后,运行下列指令以完成对RustDesk应用程序的构建: +### 构建 RustDesk 程序 + +然后, 每次需要构建应用程序时, 运行以下命令: ```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 @@ -179,25 +233,25 @@ docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user groupmod: Permission denied. groupmod: cannot lock /etc/group; try again later. ``` - > **原因:** 容器的entrypoint脚本会检测UID和GID,在度判和给定的环境变量的不一致时,会强行修改user的UID和GID并重新运行。但在重启后读不到环境中的UID和GID,然后再次进入判错重启环节 + > **原因:** 容器的 entrypoint 脚本会检测 UID 和 GID,在度判和给定的环境变量的不一致时,会强行修改 user 的 UID 和 GID 并重新运行。但在重启后读不到环境中的 UID 和 GID,然后再次进入判错重启环节 -### 运行RustDesk程序 +### 运行 RustDesk 程序 -生成的可执行程序在target目录下,可直接通过指令运行调试(Debug)版本的RustDesk: +生成的可执行程序在 target 目录下,可直接通过指令运行调试 (Debug) 版本的 RustDesk: ```sh target/debug/rustdesk ``` -或者您想运行发行(Release)版本: +或者您想运行发行 (Release) 版本: ```sh target/release/rustdesk ``` 请注意: -* 请保证您运行的目录是在RustDesk库的根目录内,否则软件会读不到文件。 -* `install`、`run`等Cargo的子指令在容器内不可用,宿主机才行。 +* 请保证您运行的目录是在 RustDesk 库的根目录内,否则软件会读不到文件。 +* `install`、`run`等 Cargo 的子指令在容器内不可用,宿主机才行。 ## 文件结构 From 71e3f86024d8d3aa5cfd8e0af52a1bb47f62b72c Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 17 Jul 2023 07:52:18 +0800 Subject: [PATCH 137/612] 1.71.0 and remove local registry Signed-off-by: 21pages --- .github/workflows/flutter-build.yml | 75 ++++------------------------- 1 file changed, 9 insertions(+), 66 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index d7b7f7763..ea0bb7fdb 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -682,21 +682,6 @@ jobs: key: ${{ matrix.job.target }}-${{ matrix.job.extra-build-features }} cache-directories: "/opt/rust-registry" - - name: Install local registry - run: | - mkdir -p /opt/rust-registry - cargo install cargo-local-registry - - - name: Build local registry - uses: nick-fields/retry@v2 - id: build-local-registry - continue-on-error: true - with: - max_attempts: 3 - timeout_minutes: 15 - retry_on: error - command: cargo local-registry --sync ./Cargo.lock /opt/rust-registry - - name: Disable rust bridge build run: | # only build cdylib @@ -746,19 +731,15 @@ jobs: # rust pushd /opt # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.70.0-${{ matrix.job.target }}.tar.gz + wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.71.0-${{ matrix.job.target }}.tar.gz tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-1.70.0-${{ matrix.job.target }} && ./install.sh - rm -rf rust-1.70.0-${{ matrix.job.target }} + cd rust-1.71.0-${{ matrix.job.target }} && ./install.sh + rm -rf rust-1.71.0-${{ matrix.job.target }} # edit config mkdir -p ~/.cargo/ echo """ [source.crates-io] registry = 'https://github.com/rust-lang/crates.io-index' - replace-with = 'local-registry' - - [source.local-registry] - local-registry = '/opt/rust-registry/' """ > ~/.cargo/config cat ~/.cargo/config # start build @@ -853,21 +834,6 @@ jobs: key: ${{ matrix.job.target }}-${{ matrix.job.extra-build-features }} cache-directories: "/opt/rust-registry" - - name: Install local registry - run: | - mkdir -p /opt/rust-registry - cargo install cargo-local-registry - - - name: Build local registry - uses: nick-fields/retry@v2 - id: build-local-registry - continue-on-error: true - with: - max_attempts: 3 - timeout_minutes: 15 - retry_on: error - command: cargo local-registry --sync ./Cargo.lock /opt/rust-registry - - name: Disable rust bridge build run: | # only build cdylib @@ -915,19 +881,15 @@ jobs: # rust pushd /opt # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.70.0-${{ matrix.job.target }}.tar.gz + wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.71.0-${{ matrix.job.target }}.tar.gz tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-1.70.0-${{ matrix.job.target }} && ./install.sh - rm -rf rust-1.70.0-${{ matrix.job.target }} + cd rust-1.71.0-${{ matrix.job.target }} && ./install.sh + rm -rf rust-1.71.0-${{ matrix.job.target }} # edit config mkdir -p ~/.cargo/ echo """ [source.crates-io] registry = 'https://github.com/rust-lang/crates.io-index' - replace-with = 'local-registry' - - [source.local-registry] - local-registry = '/opt/rust-registry/' """ > ~/.cargo/config cat ~/.cargo/config # start build @@ -1002,21 +964,6 @@ jobs: key: ${{ matrix.job.target }}-${{ matrix.job.extra-build-features }} cache-directories: "/opt/rust-registry" - - name: Install local registry - run: | - mkdir -p /opt/rust-registry - cargo install cargo-local-registry - - - name: Build local registry - uses: nick-fields/retry@v2 - id: build-local-registry - continue-on-error: true - with: - max_attempts: 3 - timeout_minutes: 15 - retry_on: error - command: cargo local-registry --sync ./Cargo.lock /opt/rust-registry - - name: Restore vcpkg files uses: actions/download-artifact@master with: @@ -1048,19 +995,15 @@ jobs: # rust pushd /opt # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.70.0-${{ matrix.job.target }}.tar.gz + wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.71.0-${{ matrix.job.target }}.tar.gz tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-1.70.0-${{ matrix.job.target }} && ./install.sh - rm -rf rust-1.70.0-${{ matrix.job.target }} + cd rust-1.71.0-${{ matrix.job.target }} && ./install.sh + rm -rf rust-1.71.0-${{ matrix.job.target }} # edit config mkdir -p ~/.cargo/ echo """ [source.crates-io] registry = 'https://github.com/rust-lang/crates.io-index' - replace-with = 'local-registry' - - [source.local-registry] - local-registry = '/opt/rust-registry/' """ > ~/.cargo/config cat ~/.cargo/config From 195018e22def2b3d6cbc6a3da061eb51fa61e3b8 Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 17 Jul 2023 07:52:18 +0800 Subject: [PATCH 138/612] opt linux ci: remove unused and use stable version Signed-off-by: 21pages --- .github/workflows/flutter-build.yml | 54 +++++++++++++---------------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index cb1ffde1f..1c3aa1673 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -675,12 +675,11 @@ jobs: target: ${{ matrix.job.target }} override: true profile: minimal # minimal component installation (ie, no documentation) - - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: rustdesk-lib-cache - key: ${{ matrix.job.target }}-${{ matrix.job.extra-build-features }} - cache-directories: "/opt/rust-registry" + + - name: Save Rust toolchain version + run: | + RUST_TOOLCHAIN_VERSION=$(cargo --version | awk '{print $2}') + echo "RUST_TOOLCHAIN_VERSION=$RUST_TOOLCHAIN_VERSION" >> $GITHUB_ENV - name: Disable rust bridge build run: | @@ -714,7 +713,6 @@ jobs: dockerRunArgs: | --volume "${PWD}:/workspace" --volume "/opt/artifacts:/opt/artifacts" - --volume "/opt/rust-registry:/opt/rust-registry" shell: /bin/bash install: | apt update -y @@ -731,10 +729,10 @@ jobs: # rust pushd /opt # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.71.0-${{ matrix.job.target }}.tar.gz + wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }}.tar.gz tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-1.71.0-${{ matrix.job.target }} && ./install.sh - rm -rf rust-1.71.0-${{ matrix.job.target }} + cd rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} && ./install.sh + rm -rf rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} # edit config mkdir -p ~/.cargo/ echo """ @@ -827,12 +825,11 @@ jobs: target: ${{ matrix.job.target }} override: true profile: minimal # minimal component installation (ie, no documentation) - - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: rustdesk-lib-cache - key: ${{ matrix.job.target }}-${{ matrix.job.extra-build-features }} - cache-directories: "/opt/rust-registry" + + - name: Save Rust toolchain version + run: | + RUST_TOOLCHAIN_VERSION=$(cargo --version | awk '{print $2}') + echo "RUST_TOOLCHAIN_VERSION=$RUST_TOOLCHAIN_VERSION" >> $GITHUB_ENV - name: Disable rust bridge build run: | @@ -864,7 +861,6 @@ jobs: dockerRunArgs: | --volume "${PWD}:/workspace" --volume "/opt/artifacts:/opt/artifacts" - --volume "/opt/rust-registry:/opt/rust-registry" shell: /bin/bash install: | apt update -y @@ -881,10 +877,10 @@ jobs: # rust pushd /opt # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.71.0-${{ matrix.job.target }}.tar.gz + wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }}.tar.gz tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-1.71.0-${{ matrix.job.target }} && ./install.sh - rm -rf rust-1.71.0-${{ matrix.job.target }} + cd rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} && ./install.sh + rm -rf rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} # edit config mkdir -p ~/.cargo/ echo """ @@ -957,12 +953,11 @@ jobs: target: ${{ matrix.job.target }} override: true profile: minimal # minimal component installation (ie, no documentation) - - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: rustdesk-lib-cache - key: ${{ matrix.job.target }}-${{ matrix.job.extra-build-features }} - cache-directories: "/opt/rust-registry" + + - name: Save Rust toolchain version + run: | + RUST_TOOLCHAIN_VERSION=$(cargo --version | awk '{print $2}') + echo "RUST_TOOLCHAIN_VERSION=$RUST_TOOLCHAIN_VERSION" >> $GITHUB_ENV - name: Restore vcpkg files uses: actions/download-artifact@master @@ -982,7 +977,6 @@ jobs: dockerRunArgs: | --volume "${PWD}:/workspace" --volume "/opt/artifacts:/opt/artifacts" - --volume "/opt/rust-registry:/opt/rust-registry" shell: /bin/bash install: | apt update -y @@ -995,10 +989,10 @@ jobs: # rust pushd /opt # do not use rustup, because memory overflow in qemu - wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-1.71.0-${{ matrix.job.target }}.tar.gz + wget -O rust.tar.gz https://static.rust-lang.org/dist/rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }}.tar.gz tar -zxvf rust.tar.gz > /dev/null && rm rust.tar.gz - cd rust-1.71.0-${{ matrix.job.target }} && ./install.sh - rm -rf rust-1.71.0-${{ matrix.job.target }} + cd rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} && ./install.sh + rm -rf rust-${{env.RUST_TOOLCHAIN_VERSION}}-${{ matrix.job.target }} # edit config mkdir -p ~/.cargo/ echo """ From 5fc88fb6e44ca0903f1a85be9b0d6c93d59f8607 Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 17 Jul 2023 15:45:17 +0800 Subject: [PATCH 139/612] fix runas version to 1.0 Signed-off-by: 21pages --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index cb6b768bf..74e19b3f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,7 +48,7 @@ lazy_static = "1.4" sha2 = "0.10" repng = "0.2" parity-tokio-ipc = { git = "https://github.com/open-trade/parity-tokio-ipc" } -runas = "1.0" +runas = "=1.0" # https://github.com/mitsuhiko/rust-runas/issues/13 magnum-opus = { git = "https://github.com/rustdesk/magnum-opus" } dasp = { version = "0.11", features = ["signal", "interpolate-linear", "interpolate"], optional = true } rubato = { version = "0.12", optional = true } From 8cc7dc0a3e5c72ec5cbe24f6f563cc429637e950 Mon Sep 17 00:00:00 2001 From: Andrzej Rudnik Date: Mon, 17 Jul 2023 10:00:19 +0200 Subject: [PATCH 140/612] Update pl.rs --- src/lang/pl.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 90c83ada2..8a97ddfc4 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nieprawidłowe nazwa użytkownika"), ("Password missed", "Nieprawidłowe hasło"), ("Wrong credentials", "Błędne dane uwierzytelniające"), - ("The verification code is incorrect or has expired", ""), + ("The verification code is incorrect or has expired", "Kod weryfikacyjny jest niepoprawny lub wygasł"), ("Edit Tag", "Edytuj tag"), ("Unremember Password", "Zapomnij hasło"), ("Favorites", "Ulubione"), @@ -513,10 +513,10 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Akceptuj i Podnieś uprawnienia"), ("accept_and_elevate_btn_tooltip", ""), ("clipboard_wait_response_timeout_tip", ""), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), + ("Incoming connection", "Połączenie przychodzące"), + ("Outgoing connection", "Połączenie wychodzące"), + ("Exit", "Wyjście"), + ("Open", "Otwórz"), ("logout_tip", ""), ].iter().cloned().collect(); } From 5c5413075e5449fa435918d1bc70301107b47411 Mon Sep 17 00:00:00 2001 From: SergeyMy <131688106+SergeyMy@users.noreply.github.com> Date: Mon, 17 Jul 2023 13:50:53 +0500 Subject: [PATCH 141/612] Update ru.rs --- src/lang/ru.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 86ec23dee..a210ef116 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -517,6 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "Исходящее подключение"), ("Exit", "Выход"), ("Open", "Открыть"), - ("logout_tip", ""), + ("logout_tip", "Вы действительно хотите выйти?"), ].iter().cloned().collect(); } From f97f5d94ae50ba7b5a8fd19cb5e63e2d8e2c2faa Mon Sep 17 00:00:00 2001 From: Andrzej Rudnik Date: Mon, 17 Jul 2023 11:00:49 +0200 Subject: [PATCH 142/612] Update pl.rs --- src/lang/pl.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 8a97ddfc4..f6e9caf0f 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Rozdzielczość"), ("No transfers in progress", "Brak transferów w toku"), ("Set one-time password length", "Ustaw długość jednorazowego hasła"), - ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("install_cert_tip", "Instalacja certyfikatu RustDesk"), + ("comfirm_install_cert_tip", "To jest certyfikat testowy RustDesk, któremu można zaufać. Certyfikat jest używany do zaufania i instalowania sterowników RustDesk w razie potrzeby."), ("RDP Settings", "Ustawienia RDP"), ("Sort by", "Sortuj wg"), ("New Connection", "Nowe połączenie"), @@ -506,17 +506,17 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Enable", "Włącz"), ("Disable", "Wyłącz"), ("Options", "Opcje"), - ("resolution_original_tip", ""), - ("resolution_fit_local_tip", ""), - ("resolution_custom_tip", ""), + ("resolution_original_tip", "Oryginalna rozdzielczość"), + ("resolution_fit_local_tip", "Dostosuj rozdzielczość lokalną"), + ("resolution_custom_tip", "Rozdzielczość niestandardowa"), ("Collapse toolbar", "Zwiń pasek narzędzi"), ("Accept and Elevate", "Akceptuj i Podnieś uprawnienia"), - ("accept_and_elevate_btn_tooltip", ""), - ("clipboard_wait_response_timeout_tip", ""), + ("accept_and_elevate_btn_tooltip", "Zaakceptuj połączenie i podnieś uprawnienia UAC"), + ("clipboard_wait_response_timeout_tip", "Upłynął limit czasu oczekiwania na schowek."), ("Incoming connection", "Połączenie przychodzące"), ("Outgoing connection", "Połączenie wychodzące"), ("Exit", "Wyjście"), ("Open", "Otwórz"), - ("logout_tip", ""), + ("logout_tip", "Na pewno chcesz się wylogować?"), ].iter().cloned().collect(); } From c950ed170156239d50b461b0a94a2a35a99adb9b Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 17 Jul 2023 17:22:33 +0800 Subject: [PATCH 143/612] fix CI error, though remove error, but do not know if it is correct --- .github/workflows/bridge.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/bridge.yml b/.github/workflows/bridge.yml index 31d1daa59..246d5ddfa 100644 --- a/.github/workflows/bridge.yml +++ b/.github/workflows/bridge.yml @@ -42,7 +42,6 @@ jobs: - uses: Swatinem/rust-cache@v2 with: prefix-key: bridge-${{ matrix.job.os }} - workspace: "/tmp/flutter_rust_bridge/frb_codegen" - name: Cache Bridge id: cache-bridge From 76a6b4e09edc38d882cb4a85768644757cbcc213 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 17 Jul 2023 18:52:43 +0800 Subject: [PATCH 144/612] alloc_console does work, but it create another cmd window, seems not better than dialog --- src/platform/windows.cc | 4 ++++ src/platform/windows.rs | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/src/platform/windows.cc b/src/platform/windows.cc index c4286ebdd..4ffa6eeeb 100644 --- a/src/platform/windows.cc +++ b/src/platform/windows.cc @@ -628,4 +628,8 @@ extern "C" return bSystem; } + void alloc_console_and_redirect() { + AllocConsole(); + freopen("CONOUT$", "w", stdout); + } } // end of extern "C" \ No newline at end of file diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 6e79873a7..8734cccf7 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -455,6 +455,7 @@ extern "C" { fn win_stop_system_key_propagate(v: BOOL); fn is_win_down() -> BOOL; fn is_local_system() -> BOOL; + fn alloc_console_and_redirect(); } extern "system" { @@ -2383,3 +2384,9 @@ pub fn message_box(text: &str) { .collect::>(); unsafe { MessageBoxW(std::ptr::null_mut(), text.as_ptr(), caption.as_ptr(), MB_OK) }; } + +pub fn alloc_console() { + unsafe { + alloc_console_and_redirect(); + } +} From c01c8d0afc094bd1e2164c19eb0966aedea9de78 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 17 Jul 2023 20:07:55 +0800 Subject: [PATCH 145/612] touch screen input Signed-off-by: dignow --- .../{mobile => common}/widgets/gestures.dart | 0 flutter/lib/common/widgets/remote_input.dart | 349 ++++++++++++++++-- flutter/lib/desktop/pages/remote_page.dart | 15 +- flutter/lib/mobile/pages/remote_page.dart | 130 +------ flutter/lib/models/input_model.dart | 11 +- flutter/lib/models/model.dart | 2 +- 6 files changed, 354 insertions(+), 153 deletions(-) rename flutter/lib/{mobile => common}/widgets/gestures.dart (100%) diff --git a/flutter/lib/mobile/widgets/gestures.dart b/flutter/lib/common/widgets/gestures.dart similarity index 100% rename from flutter/lib/mobile/widgets/gestures.dart rename to flutter/lib/common/widgets/gestures.dart diff --git a/flutter/lib/common/widgets/remote_input.dart b/flutter/lib/common/widgets/remote_input.dart index dd39cbdfd..5fc37e939 100644 --- a/flutter/lib/common/widgets/remote_input.dart +++ b/flutter/lib/common/widgets/remote_input.dart @@ -1,7 +1,13 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter/gestures.dart'; -import '../../models/input_model.dart'; +import 'package:flutter_hbb/models/platform_model.dart'; +import 'package:flutter_hbb/common.dart'; +import 'package:flutter_hbb/models/model.dart'; +import 'package:flutter_hbb/models/input_model.dart'; + +import './gestures.dart'; class RawKeyFocusScope extends StatelessWidget { final FocusNode? focusNode; @@ -30,6 +36,290 @@ class RawKeyFocusScope extends StatelessWidget { } } +class RawTouchGestureDetectorRegion extends StatefulWidget { + final Widget child; + final FFI ffi; + + late final InputModel inputModel = ffi.inputModel; + late final FfiModel ffiModel = ffi.ffiModel; + + RawTouchGestureDetectorRegion({ + required this.child, + required this.ffi, + }); + + @override + State createState() => + _RawTouchGestureDetectorRegionState(); +} + + /// touchMode only: + /// LongPress -> right click + /// OneFingerPan -> start/end -> left down start/end + /// onDoubleTapDown -> move to + /// onLongPressDown => move to + /// + /// mouseMode only: + /// DoubleFiner -> right click + /// HoldDrag -> left drag +class _RawTouchGestureDetectorRegionState + extends State { + Offset _cacheLongPressPosition = Offset(0, 0); + double _mouseScrollIntegral = 0; // mouse scroll speed controller + double _scale = 1; + + PointerDeviceKind? lastDeviceKind; + + FFI get ffi => widget.ffi; + FfiModel get ffiModel => widget.ffiModel; + InputModel get inputModel => widget.inputModel; + bool get handleTouch => isDesktop || ffiModel.touchMode; + SessionID get sessionId => ffi.sessionId; + + @override + Widget build(BuildContext context) { + return RawGestureDetector( + child: widget.child, + gestures: makeGestures(context), + ); + } + + onTapDown(TapDownDetails d) { + lastDeviceKind = d.kind; + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (handleTouch) { + ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); + } + inputModel.tapDown(MouseButtons.left); + } + + onTapUp(TapUpDetails d) { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (handleTouch) { + ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); + } + inputModel.tapUp(MouseButtons.left); + } + + onDoubleTapDown(TapDownDetails d) { + lastDeviceKind = d.kind; + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (handleTouch) { + ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); + } + } + + onDoubleTap() { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + inputModel.tap(MouseButtons.left); + inputModel.tap(MouseButtons.left); + } + + onLongPressDown(LongPressDownDetails d) { + lastDeviceKind = d.kind; + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (handleTouch) { + ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); + _cacheLongPressPosition = d.localPosition; + } + } + + // for mobiles + onLongPress() { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (handleTouch) { + ffi.cursorModel + .move(_cacheLongPressPosition.dx, _cacheLongPressPosition.dy); + } + inputModel.tap(MouseButtons.right); + } + + onDoubleFinerTap(TapDownDetails d) { + lastDeviceKind = d.kind; + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (!handleTouch) { + inputModel.tap(MouseButtons.right); + } + } + + onHoldDragStart(DragStartDetails d) { + lastDeviceKind = d.kind; + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (!handleTouch) { + inputModel.sendMouse('down', MouseButtons.left); + } + } + + onHoldDragUpdate(DragUpdateDetails d) { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (!handleTouch) { + ffi.cursorModel.updatePan(d.delta.dx, d.delta.dy, handleTouch); + } + } + + onHoldDragEnd(DragEndDetails d) { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (!handleTouch) { + inputModel.sendMouse('up', MouseButtons.left); + } + } + + onOneFingerPanStart(BuildContext context, DragStartDetails d) { + lastDeviceKind = d.kind ?? lastDeviceKind; + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (handleTouch) { + ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); + inputModel.sendMouse('down', MouseButtons.left); + } else { + final offset = ffi.cursorModel.offset; + final cursorX = offset.dx; + final cursorY = offset.dy; + final visible = + ffi.cursorModel.getVisibleRect().inflate(1); // extend edges + final size = MediaQueryData.fromView(View.of(context)).size; + if (!visible.contains(Offset(cursorX, cursorY))) { + ffi.cursorModel.move(size.width / 2, size.height / 2); + } + } + } + + onOneFingerPanUpdate(DragUpdateDetails d) { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + ffi.cursorModel.updatePan(d.delta.dx, d.delta.dy, handleTouch); + } + + onOneFingerPanEnd(DragEndDetails d) { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (handleTouch) { + inputModel.sendMouse('up', MouseButtons.left); + } + } + + // scale + pan event + onTwoFingerScaleUpdate(ScaleUpdateDetails d) { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (isDesktop) { + // to-do + } else { + // mobile + // to-do: Is this correct? + ffi.canvasModel.updateScale(d.scale / _scale); + _scale = d.scale; + ffi.canvasModel.panX(d.focalPointDelta.dx); + ffi.canvasModel.panY(d.focalPointDelta.dy); + } + } + + onTwoFingerScaleEnd(ScaleEndDetails d) { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (isDesktop) { + // to-do + } else { + // mobile + // to-do: Is this correct? + _scale = 1; + bind.sessionSetViewStyle(sessionId: sessionId, value: ""); + } + } + + get onHoldDragCancel => null; + get onThreeFingerVerticalDragUpdate => ffi.ffiModel.isPeerAndroid + ? null + : (d) { + _mouseScrollIntegral += d.delta.dy / 4; + if (_mouseScrollIntegral > 1) { + inputModel.scroll(1); + _mouseScrollIntegral = 0; + } else if (_mouseScrollIntegral < -1) { + inputModel.scroll(-1); + _mouseScrollIntegral = 0; + } + }; + + makeGestures(BuildContext context) { + return { + // Official + TapGestureRecognizer: + GestureRecognizerFactoryWithHandlers( + () => TapGestureRecognizer(), (instance) { + instance + ..onTapDown = onTapDown + ..onTapUp = onTapUp; + }), + DoubleTapGestureRecognizer: + GestureRecognizerFactoryWithHandlers( + () => DoubleTapGestureRecognizer(), (instance) { + instance + ..onDoubleTapDown = onDoubleTapDown + ..onDoubleTap = onDoubleTap; + }), + LongPressGestureRecognizer: + GestureRecognizerFactoryWithHandlers( + () => LongPressGestureRecognizer(), (instance) { + instance + ..onLongPressDown = onLongPressDown + ..onLongPress = onLongPress; + }), + // Customized + HoldTapMoveGestureRecognizer: + GestureRecognizerFactoryWithHandlers( + () => HoldTapMoveGestureRecognizer(), + (instance) => instance + ..onHoldDragStart = onHoldDragStart + ..onHoldDragUpdate = onHoldDragUpdate + ..onHoldDragCancel = onHoldDragCancel + ..onHoldDragEnd = onHoldDragEnd), + DoubleFinerTapGestureRecognizer: + GestureRecognizerFactoryWithHandlers( + () => DoubleFinerTapGestureRecognizer(), (instance) { + instance.onDoubleFinerTap = onDoubleFinerTap; + }), + CustomTouchGestureRecognizer: + GestureRecognizerFactoryWithHandlers( + () => CustomTouchGestureRecognizer(), (instance) { + instance.onOneFingerPanStart = + (DragStartDetails d) => onOneFingerPanStart(context, d); + instance + ..onOneFingerPanUpdate = onOneFingerPanUpdate + ..onOneFingerPanEnd = onOneFingerPanEnd + ..onTwoFingerScaleUpdate = onTwoFingerScaleUpdate + ..onTwoFingerScaleEnd = onTwoFingerScaleEnd + ..onThreeFingerVerticalDragUpdate = onThreeFingerVerticalDragUpdate; + }), + }; + } +} + class RawPointerMouseRegion extends StatelessWidget { final InputModel inputModel; final Widget child; @@ -39,36 +329,39 @@ class RawPointerMouseRegion extends StatelessWidget { final PointerDownEventListener? onPointerDown; final PointerUpEventListener? onPointerUp; - RawPointerMouseRegion( - {this.onEnter, - this.onExit, - this.cursor, - this.onPointerDown, - this.onPointerUp, - required this.inputModel, - required this.child}); + RawPointerMouseRegion({ + this.onEnter, + this.onExit, + this.cursor, + this.onPointerDown, + this.onPointerUp, + required this.inputModel, + required this.child, + }); @override Widget build(BuildContext context) { return Listener( - onPointerHover: inputModel.onPointHoverImage, - onPointerDown: (evt) { - onPointerDown?.call(evt); - inputModel.onPointDownImage(evt); - }, - onPointerUp: (evt) { - onPointerUp?.call(evt); - inputModel.onPointUpImage(evt); - }, - onPointerMove: inputModel.onPointMoveImage, - onPointerSignal: inputModel.onPointerSignalImage, - onPointerPanZoomStart: inputModel.onPointerPanZoomStart, - onPointerPanZoomUpdate: inputModel.onPointerPanZoomUpdate, - onPointerPanZoomEnd: inputModel.onPointerPanZoomEnd, - child: MouseRegion( - cursor: cursor ?? MouseCursor.defer, - onEnter: onEnter, - onExit: onExit, - child: child)); + onPointerHover: inputModel.onPointHoverImage, + onPointerDown: (evt) { + onPointerDown?.call(evt); + inputModel.onPointDownImage(evt); + }, + onPointerUp: (evt) { + onPointerUp?.call(evt); + inputModel.onPointUpImage(evt); + }, + onPointerMove: inputModel.onPointMoveImage, + onPointerSignal: inputModel.onPointerSignalImage, + onPointerPanZoomStart: inputModel.onPointerPanZoomStart, + onPointerPanZoomUpdate: inputModel.onPointerPanZoomUpdate, + onPointerPanZoomEnd: inputModel.onPointerPanZoomEnd, + child: MouseRegion( + cursor: cursor ?? MouseCursor.defer, + onEnter: onEnter, + onExit: onExit, + child: child, + ), + ); } } diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 849971a41..35705a283 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -337,6 +337,17 @@ class _RemotePageState extends State } } + Widget _buildRawTouchAndPointerRegion( + Widget child, + PointerEnterEventListener? onEnter, + PointerExitEventListener? onExit, + ) { + return RawTouchGestureDetectorRegion( + child: _buildRawPointerMouseRegion(child, onEnter, onExit), + ffi: _ffi, + ); + } + Widget _buildRawPointerMouseRegion( Widget child, PointerEnterEventListener? onEnter, @@ -384,7 +395,7 @@ class _RemotePageState extends State textureId: _textureId, useTextureRender: useTextureRender, listenerBuilder: (child) => - _buildRawPointerMouseRegion(child, enterView, leaveView), + _buildRawTouchAndPointerRegion(child, enterView, leaveView), ); })) ]; @@ -401,7 +412,7 @@ class _RemotePageState extends State Positioned( top: 10, right: 10, - child: _buildRawPointerMouseRegion( + child: _buildRawTouchAndPointerRegion( QualityMonitor(_ffi.qualityMonitorModel), null, null), ), ); diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart index c6fc1baa1..84426a307 100644 --- a/flutter/lib/mobile/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'dart:ui' as ui; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -21,9 +20,8 @@ import '../../models/input_model.dart'; import '../../models/model.dart'; import '../../models/platform_model.dart'; import '../../utils/image.dart'; -import '../widgets/gestures.dart'; -final initText = '\1' * 1024; +final initText = '1' * 1024; class RemotePage extends StatefulWidget { RemotePage({Key? key, required this.id}) : super(key: key); @@ -39,8 +37,6 @@ class _RemotePageState extends State { bool _showBar = !isWebDesktop; bool _showGestureHelp = false; String _value = ''; - double _scale = 1; - double _mouseScrollIntegral = 0; // mouse scroll speed controller Orientation? _currentOrientation; final keyboardVisibilityController = KeyboardVisibilityController(); @@ -267,11 +263,17 @@ class _RemotePageState extends State { gFFI.canvasModel.updateViewStyle(); }); } - return Obx(() => Container( + return Obx( + () => Container( color: MyTheme.canvasColor, child: inputModel.isPhysicalMouse.value ? getBodyForMobile() - : getBodyForMobileWithGesture())); + : RawTouchGestureDetectorRegion( + child: getBodyForMobile(), + ffi: gFFI, + ), + ), + ); }))); }) ], @@ -377,120 +379,6 @@ class _RemotePageState extends State { ); } - /// touchMode only: - /// LongPress -> right click - /// OneFingerPan -> start/end -> left down start/end - /// onDoubleTapDown -> move to - /// onLongPressDown => move to - /// - /// mouseMode only: - /// DoubleFiner -> right click - /// HoldDrag -> left drag - - Offset _cacheLongPressPosition = Offset(0, 0); - Widget getBodyForMobileWithGesture() { - final touchMode = gFFI.ffiModel.touchMode; - return getMixinGestureDetector( - child: getBodyForMobile(), - onTapUp: (d) { - if (touchMode) { - gFFI.cursorModel.move(d.localPosition.dx, d.localPosition.dy); - inputModel.tap(MouseButtons.left); - } else { - inputModel.tap(MouseButtons.left); - } - }, - onDoubleTapDown: (d) { - if (touchMode) { - gFFI.cursorModel.move(d.localPosition.dx, d.localPosition.dy); - } - }, - onDoubleTap: () { - inputModel.tap(MouseButtons.left); - inputModel.tap(MouseButtons.left); - }, - onLongPressDown: (d) { - if (touchMode) { - gFFI.cursorModel.move(d.localPosition.dx, d.localPosition.dy); - _cacheLongPressPosition = d.localPosition; - } - }, - onLongPress: () { - if (touchMode) { - gFFI.cursorModel - .move(_cacheLongPressPosition.dx, _cacheLongPressPosition.dy); - } - inputModel.tap(MouseButtons.right); - }, - onDoubleFinerTap: (d) { - if (!touchMode) { - inputModel.tap(MouseButtons.right); - } - }, - onHoldDragStart: (d) { - if (!touchMode) { - inputModel.sendMouse('down', MouseButtons.left); - } - }, - onHoldDragUpdate: (d) { - if (!touchMode) { - gFFI.cursorModel.updatePan(d.delta.dx, d.delta.dy, touchMode); - } - }, - onHoldDragEnd: (_) { - if (!touchMode) { - inputModel.sendMouse('up', MouseButtons.left); - } - }, - onOneFingerPanStart: (d) { - if (touchMode) { - gFFI.cursorModel.move(d.localPosition.dx, d.localPosition.dy); - inputModel.sendMouse('down', MouseButtons.left); - } else { - final offset = gFFI.cursorModel.offset; - final cursorX = offset.dx; - final cursorY = offset.dy; - final visible = - gFFI.cursorModel.getVisibleRect().inflate(1); // extend edges - final size = MediaQueryData.fromWindow(ui.window).size; - if (!visible.contains(Offset(cursorX, cursorY))) { - gFFI.cursorModel.move(size.width / 2, size.height / 2); - } - } - }, - onOneFingerPanUpdate: (d) { - gFFI.cursorModel.updatePan(d.delta.dx, d.delta.dy, touchMode); - }, - onOneFingerPanEnd: (d) { - if (touchMode) { - inputModel.sendMouse('up', MouseButtons.left); - } - }, - // scale + pan event - onTwoFingerScaleUpdate: (d) { - gFFI.canvasModel.updateScale(d.scale / _scale); - _scale = d.scale; - gFFI.canvasModel.panX(d.focalPointDelta.dx); - gFFI.canvasModel.panY(d.focalPointDelta.dy); - }, - onTwoFingerScaleEnd: (d) { - _scale = 1; - bind.sessionSetViewStyle(sessionId: sessionId, value: ""); - }, - onThreeFingerVerticalDragUpdate: gFFI.ffiModel.isPeerAndroid - ? null - : (d) { - _mouseScrollIntegral += d.delta.dy / 4; - if (_mouseScrollIntegral > 1) { - inputModel.scroll(1); - _mouseScrollIntegral = 0; - } else if (_mouseScrollIntegral < -1) { - inputModel.scroll(-1); - _mouseScrollIntegral = 0; - } - }); - } - Widget getBodyForMobile() { final keyboardIsVisible = keyboardVisibilityController.isVisible; return Container( diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index e7ce5c585..0ea7c6238 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -268,6 +268,14 @@ class InputModel { sendMouse('up', button); } + void tapDown(MouseButtons button) { + sendMouse('down', button); + } + + void tapUp(MouseButtons button) { + sendMouse('up', button); + } + /// Send scroll event with scroll distance [y]. void scroll(int y) { bind.sessionSendMouse( @@ -429,7 +437,7 @@ class InputModel { } void onPointDownImage(PointerDownEvent e) { - debugPrint("onPointDownImage"); + debugPrint("onPointDownImage ${e.kind}"); _stopFling = true; if (e.kind != ui.PointerDeviceKind.mouse) { if (isPhysicalMouse.value) { @@ -469,6 +477,7 @@ class InputModel { } else if (dy < 0) { dy = 1; } + debugPrint('REMOVE ME ================== onPointerSignalImage'); bind.sessionSendMouse( sessionId: sessionId, msg: '{"type": "wheel", "x": "$dx", "y": "$dy"}'); diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 4eeb8e84f..54965680a 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1265,7 +1265,6 @@ class CursorModel with ChangeNotifier { } updatePan(double dx, double dy, bool touchMode) { - if (parent.target?.imageModel.image == null) return; if (touchMode) { final scale = parent.target?.canvasModel.scale ?? 1.0; _x += dx / scale; @@ -1274,6 +1273,7 @@ class CursorModel with ChangeNotifier { notifyListeners(); return; } + if (parent.target?.imageModel.image == null) return; final scale = parent.target?.canvasModel.scale ?? 1.0; dx /= scale; dy /= scale; From 2badecba2a51c8577e2c93d1a92246ba405c7e61 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 17 Jul 2023 20:48:58 +0800 Subject: [PATCH 146/612] debug, touch screen input Signed-off-by: dignow --- flutter/lib/common/widgets/gestures.dart | 16 +++++++----- flutter/lib/common/widgets/remote_input.dart | 26 +++++++++++--------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/flutter/lib/common/widgets/gestures.dart b/flutter/lib/common/widgets/gestures.dart index 77f9c42fd..ff575777d 100644 --- a/flutter/lib/common/widgets/gestures.dart +++ b/flutter/lib/common/widgets/gestures.dart @@ -113,13 +113,14 @@ class CustomTouchGestureRecognizer extends ScaleGestureRecognizer { } void onOneFingerStartDebounce(ScaleUpdateDetails d) { - final start = (ScaleUpdateDetails d) { + start(ScaleUpdateDetails d) { _currentState = GestureState.oneFingerPan; if (onOneFingerPanStart != null) { onOneFingerPanStart!(DragStartDetails( localPosition: d.localFocalPoint, globalPosition: d.focalPoint)); } - }; + } + if (_currentState != GestureState.none) { _debounceTimer = Timer(Duration(milliseconds: 200), () { start(d); @@ -132,13 +133,14 @@ class CustomTouchGestureRecognizer extends ScaleGestureRecognizer { } void onTwoFingerStartDebounce(ScaleUpdateDetails d) { - final start = (ScaleUpdateDetails d) { + start(ScaleUpdateDetails d) { _currentState = GestureState.twoFingerScale; if (onTwoFingerScaleStart != null) { onTwoFingerScaleStart!(ScaleStartDetails( localFocalPoint: d.localFocalPoint, focalPoint: d.focalPoint)); } - }; + } + if (_currentState == GestureState.threeFingerVerticalDrag) { _debounceTimer = Timer(Duration(milliseconds: 200), () { start(d); @@ -266,11 +268,12 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer { if (!_isStart) { _resolve(); } - if (onHoldDragUpdate != null) + if (onHoldDragUpdate != null) { onHoldDragUpdate!(DragUpdateDetails( globalPosition: event.position, localPosition: event.localPosition, delta: event.delta)); + } } } } else if (event is PointerCancelEvent) { @@ -498,8 +501,9 @@ class DoubleFinerTapGestureRecognizer extends GestureRecognizer { debugPrint("PointerUpEvent"); _upTap.add(tracker.pointer); } else if (event is PointerMoveEvent) { - if (!tracker.isWithinGlobalTolerance(event, kDoubleTapTouchSlop)) + if (!tracker.isWithinGlobalTolerance(event, kDoubleTapTouchSlop)) { _reject(tracker); + } } else if (event is PointerCancelEvent) { _reject(tracker); } diff --git a/flutter/lib/common/widgets/remote_input.dart b/flutter/lib/common/widgets/remote_input.dart index 5fc37e939..8c14bf26c 100644 --- a/flutter/lib/common/widgets/remote_input.dart +++ b/flutter/lib/common/widgets/remote_input.dart @@ -53,15 +53,15 @@ class RawTouchGestureDetectorRegion extends StatefulWidget { _RawTouchGestureDetectorRegionState(); } - /// touchMode only: - /// LongPress -> right click - /// OneFingerPan -> start/end -> left down start/end - /// onDoubleTapDown -> move to - /// onLongPressDown => move to - /// - /// mouseMode only: - /// DoubleFiner -> right click - /// HoldDrag -> left drag +/// touchMode only: +/// LongPress -> right click +/// OneFingerPan -> start/end -> left down start/end +/// onDoubleTapDown -> move to +/// onLongPressDown => move to +/// +/// mouseMode only: +/// DoubleFiner -> right click +/// HoldDrag -> left drag class _RawTouchGestureDetectorRegionState extends State { Offset _cacheLongPressPosition = Offset(0, 0); @@ -139,6 +139,9 @@ class _RawTouchGestureDetectorRegionState if (lastDeviceKind != PointerDeviceKind.touch) { return; } + if (isDesktop) { + return; + } if (handleTouch) { ffi.cursorModel .move(_cacheLongPressPosition.dx, _cacheLongPressPosition.dy); @@ -151,7 +154,7 @@ class _RawTouchGestureDetectorRegionState if (lastDeviceKind != PointerDeviceKind.touch) { return; } - if (!handleTouch) { + if (isDesktop || !handleTouch) { inputModel.tap(MouseButtons.right); } } @@ -190,8 +193,8 @@ class _RawTouchGestureDetectorRegionState return; } if (handleTouch) { - ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); inputModel.sendMouse('down', MouseButtons.left); + ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); } else { final offset = ffi.cursorModel.offset; final cursorX = offset.dx; @@ -250,6 +253,7 @@ class _RawTouchGestureDetectorRegionState _scale = 1; bind.sessionSetViewStyle(sessionId: sessionId, value: ""); } + inputModel.sendMouse('up', MouseButtons.left); } get onHoldDragCancel => null; From 74a492e52eb91870925de3eed0e7cd1becc0a5b5 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 17 Jul 2023 20:51:46 +0800 Subject: [PATCH 147/612] remove debug Signed-off-by: dignow --- flutter/lib/models/input_model.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index 0ea7c6238..1032bbe9d 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -477,7 +477,6 @@ class InputModel { } else if (dy < 0) { dy = 1; } - debugPrint('REMOVE ME ================== onPointerSignalImage'); bind.sessionSendMouse( sessionId: sessionId, msg: '{"type": "wheel", "x": "$dx", "y": "$dy"}'); From 5ebb2565cacc0741d6baba74e310a92a127d5ba2 Mon Sep 17 00:00:00 2001 From: fufesou Date: Mon, 17 Jul 2023 23:43:25 +0800 Subject: [PATCH 148/612] try fix macos convertion key Signed-off-by: fufesou --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 8ce814328..94f4507a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4894,7 +4894,7 @@ dependencies = [ [[package]] name = "rdev" version = "0.5.0-2" -source = "git+https://github.com/fufesou/rdev#ab48d5798c86303b9398727684509b1b43ecfdab" +source = "git+https://github.com/fufesou/rdev#9bee1317f96110dad89117d83a4a736575109bcf" dependencies = [ "cocoa", "core-foundation", From 2ce0f724bb43113ed177044bfa633190740daccb Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 18 Jul 2023 07:35:20 +0800 Subject: [PATCH 149/612] https://github.com/rustdesk/rustdesk/issues/5027 Signed-off-by: fufesou --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 94f4507a1..42d0590ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4894,7 +4894,7 @@ dependencies = [ [[package]] name = "rdev" version = "0.5.0-2" -source = "git+https://github.com/fufesou/rdev#9bee1317f96110dad89117d83a4a736575109bcf" +source = "git+https://github.com/fufesou/rdev#66c55439b0daf8836b188ddff47a497711cf164e" dependencies = [ "cocoa", "core-foundation", From e37745d0b4785219bb673e8e3829f38848c0a941 Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 18 Jul 2023 09:36:06 +0800 Subject: [PATCH 150/612] fix build Signed-off-by: fufesou --- src/keyboard.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/keyboard.rs b/src/keyboard.rs index e6e9da35a..a217d6a89 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -708,7 +708,7 @@ pub fn legacy_keyboard_mode(event: &Event, mut key_event: KeyEvent) -> Vec Some(ControlKey::Final), Key::Hanja => Some(ControlKey::Hanja), Key::Hanji => Some(ControlKey::Hanja), - Key::Convert => Some(ControlKey::Convert), + Key::Lang2 => Some(ControlKey::Convert), Key::Print => Some(ControlKey::Print), Key::Select => Some(ControlKey::Select), Key::Execute => Some(ControlKey::Execute), From 7bbc5183db4c72a33bf466815e31435103af04fd Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 18 Jul 2023 21:04:12 +0800 Subject: [PATCH 151/612] trackpad scale, mid commit Signed-off-by: dignow --- flutter/lib/models/input_model.dart | 11 ++++++++--- libs/hbb_common/protos/message.proto | 1 + src/client.rs | 13 ++++++++----- src/flutter_ffi.rs | 6 +++++- src/server/input_service.rs | 11 ++++++++++- src/ui_session_interface.rs | 26 ++++++++++++++++++++------ 6 files changed, 52 insertions(+), 16 deletions(-) diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index 1032bbe9d..44a39ffbc 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -55,6 +55,8 @@ class InputModel { final _trackpadSpeed = 0.06; var _trackpadScrollUnsent = Offset.zero; + var _lastScale = 1.0; + // mouse final isPhysicalMouse = false.obs; int _lastButtons = 0; @@ -272,7 +274,7 @@ class InputModel { sendMouse('down', button); } - void tapUp(MouseButtons button) { + void tapUp(MouseButtons button) { sendMouse('up', button); } @@ -337,12 +339,15 @@ class InputModel { } void onPointerPanZoomStart(PointerPanZoomStartEvent e) { + _lastScale = 1.0; _stopFling = true; } // https://docs.flutter.dev/release/breaking-changes/trackpad-gestures - // TODO(support zoom in/out) void onPointerPanZoomUpdate(PointerPanZoomUpdateEvent e) { + final scale = ((e.scale - _lastScale) * 100).toInt(); + _lastScale = e.scale; + final delta = e.panDelta; _trackpadLastDelta = delta; @@ -366,7 +371,7 @@ class InputModel { if (x != 0 || y != 0) { bind.sessionSendMouse( sessionId: sessionId, - msg: '{"type": "trackpad", "x": "$x", "y": "$y"}'); + msg: '{"type": "trackpad", "x": "$x", "y": "$y", "scale": "$scale"}'); } } diff --git a/libs/hbb_common/protos/message.proto b/libs/hbb_common/protos/message.proto index e67a5d3b1..20eb08ba5 100644 --- a/libs/hbb_common/protos/message.proto +++ b/libs/hbb_common/protos/message.proto @@ -116,6 +116,7 @@ message MouseEvent { sint32 x = 2; sint32 y = 3; repeated ControlKey modifiers = 4; + sint32 scale = 5; } enum KeyboardMode{ diff --git a/src/client.rs b/src/client.rs index 85047ee29..6937816a4 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1109,7 +1109,8 @@ impl LoginConfigHandler { self.remember = !config.password.is_empty(); self.config = config; let mut sid = rand::random(); - if sid == 0 { // you won the lottery + if sid == 0 { + // you won the lottery sid = 1; } self.session_id = sid; @@ -1928,6 +1929,7 @@ pub fn send_mouse( mask: i32, x: i32, y: i32, + scale: i32, alt: bool, ctrl: bool, shift: bool, @@ -1939,6 +1941,7 @@ pub fn send_mouse( mask, x, y, + scale, ..Default::default() }; if alt { @@ -1971,12 +1974,12 @@ pub fn send_mouse( /// /// * `interface` - The interface for sending data. fn activate_os(interface: &impl Interface) { - send_mouse(0, 0, 0, false, false, false, false, interface); + send_mouse(0, 0, 0, 0, false, false, false, false, interface); std::thread::sleep(Duration::from_millis(50)); - send_mouse(0, 3, 3, false, false, false, false, interface); + send_mouse(0, 3, 3, 0, false, false, false, false, interface); std::thread::sleep(Duration::from_millis(50)); - send_mouse(1 | 1 << 3, 0, 0, false, false, false, false, interface); - send_mouse(2 | 1 << 3, 0, 0, false, false, false, false, interface); + send_mouse(1 | 1 << 3, 0, 0, 0, false, false, false, false, interface); + send_mouse(2 | 1 << 3, 0, 0, 0, false, false, false, false, interface); /* let mut key_event = KeyEvent::new(); // do not use Esc, which has problem with Linux diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index c8de03862..e4564f144 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1103,8 +1103,12 @@ pub fn session_send_mouse(session_id: SessionID, msg: String) { _ => 0, } << 3; } + let scale = m + .get("scale") + .map(|x| x.parse::().unwrap_or(0)) + .unwrap_or(0); if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { - session.send_mouse(mask, x, y, alt, ctrl, shift, command); + session.send_mouse(mask, x, y, scale, alt, ctrl, shift, command); } } } diff --git a/src/server/input_service.rs b/src/server/input_service.rs index e71d166f5..476aa03b2 100644 --- a/src/server/input_service.rs +++ b/src/server/input_service.rs @@ -759,7 +759,7 @@ pub fn handle_mouse_(evt: &MouseEvent, conn: i32) { let mut en = ENIGO.lock().unwrap(); #[cfg(not(target_os = "macos"))] let mut to_release = Vec::new(); - if evt_type == 1 { + if evt_type == MOUSE_TYPE_DOWN { fix_modifiers(&evt.modifiers[..], &mut en, 0); #[cfg(target_os = "macos")] en.reset_flag(); @@ -883,6 +883,15 @@ pub fn handle_mouse_(evt: &MouseEvent, conn: i32) { for key in to_release { en.key_up(key.clone()); } + handle_mouse_scale(evt.scale); +} + +#[cfg(target_os = "windows")] +fn handle_mouse_scale(scale: i32) { + let mut en = ENIGO.lock().unwrap(); + en.key_down(Key::Control); + en.mouse_scroll_y(scale); + en.key_up(Key::Control); } pub fn is_enter(evt: &KeyEvent) -> bool { diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index ed6052d39..773eee374 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -1,3 +1,4 @@ +use crate::input::{MOUSE_BUTTON_LEFT, MOUSE_TYPE_DOWN, MOUSE_TYPE_UP}; #[cfg(not(any(target_os = "android", target_os = "ios")))] use std::{collections::HashMap, sync::atomic::AtomicBool}; use std::{ @@ -50,7 +51,7 @@ const CHANGE_RESOLUTION_VALID_TIMEOUT_SECS: u64 = 15; #[derive(Clone, Default)] pub struct Session { pub session_id: SessionID, // different from the one in LoginConfigHandler, used for flutter UI message pass - pub id: String, // peer id + pub id: String, // peer id pub password: String, pub args: Vec, pub lc: Arc>, @@ -306,8 +307,7 @@ impl Session { } pub fn get_audit_server(&self, typ: String) -> String { - if LocalConfig::get_option("access_token").is_empty() - { + if LocalConfig::get_option("access_token").is_empty() { return "".to_owned(); } crate::get_audit_server( @@ -695,6 +695,7 @@ impl Session { mask: i32, x: i32, y: i32, + scale: i32, alt: bool, ctrl: bool, shift: bool, @@ -713,15 +714,28 @@ impl Session { let (alt, ctrl, shift, command) = keyboard::client::get_modifiers_state(alt, ctrl, shift, command); - send_mouse(mask, x, y, alt, ctrl, shift, command, self); + send_mouse(mask, x, y, scale, alt, ctrl, shift, command, self); // on macos, ctrl + left button down = right button down, up won't emit, so we need to // emit up myself if peer is not macos // to-do: how about ctrl + left from win to macos if cfg!(target_os = "macos") { let buttons = mask >> 3; let evt_type = mask & 0x7; - if buttons == 1 && evt_type == 1 && ctrl && self.peer_platform() != "Mac OS" { - self.send_mouse((1 << 3 | 2) as _, x, y, alt, ctrl, shift, command); + if buttons == MOUSE_BUTTON_LEFT + && evt_type == MOUSE_TYPE_DOWN + && ctrl + && self.peer_platform() != "Mac OS" + { + self.send_mouse( + (MOUSE_BUTTON_LEFT << 3 | MOUSE_TYPE_UP) as _, + x, + y, + scale, + alt, + ctrl, + shift, + command, + ); } } } From 780cb37d465694a03cbbc6ff0714f1e6cc998d26 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 18 Jul 2023 23:10:42 +0800 Subject: [PATCH 152/612] tmp debug Signed-off-by: dignow --- src/server/input_service.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/server/input_service.rs b/src/server/input_service.rs index 476aa03b2..49baeab6b 100644 --- a/src/server/input_service.rs +++ b/src/server/input_service.rs @@ -1,9 +1,9 @@ use super::*; -use crate::input::*; #[cfg(target_os = "macos")] use crate::common::is_server; #[cfg(target_os = "linux")] use crate::common::IS_X11; +use crate::input::*; #[cfg(target_os = "macos")] use dispatch::Queue; use enigo::{Enigo, Key, KeyboardControllable, MouseButton, MouseControllable}; @@ -752,6 +752,14 @@ pub fn handle_mouse_(evt: &MouseEvent, conn: i32) { return; } + if evt.scale != 0 { + #[cfg(target_os = "windows")] + { + handle_scale(evt.scale); + return; + } + } + #[cfg(windows)] crate::platform::windows::try_change_desktop(); let buttons = evt.mask >> 3; @@ -883,14 +891,14 @@ pub fn handle_mouse_(evt: &MouseEvent, conn: i32) { for key in to_release { en.key_up(key.clone()); } - handle_mouse_scale(evt.scale); } #[cfg(target_os = "windows")] -fn handle_mouse_scale(scale: i32) { +fn handle_scale(scale: i32) { let mut en = ENIGO.lock().unwrap(); - en.key_down(Key::Control); - en.mouse_scroll_y(scale); + if en.key_down(Key::Control).is_ok() { + en.mouse_scroll_y(scale); + } en.key_up(Key::Control); } From c86a8fff034c7dd3b3ddf4f33d69eaee5c3538b0 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 19 Jul 2023 01:18:10 +0800 Subject: [PATCH 153/612] add pointer device event Signed-off-by: dignow --- flutter/lib/models/input_model.dart | 21 +++++++++- libs/hbb_common/protos/message.proto | 22 ++++++++++- src/client.rs | 46 +++++++++++++++++++--- src/flutter_ffi.rs | 24 +++++++++--- src/ipc.rs | 1 + src/server/connection.rs | 18 +++++++++ src/server/input_service.rs | 57 ++++++++++++++++++++++------ src/server/portable_service.rs | 26 ++++++++++++- src/ui_session_interface.rs | 20 +++++++--- 9 files changed, 204 insertions(+), 31 deletions(-) diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index 44a39ffbc..8fa4d1caf 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -345,9 +345,20 @@ class InputModel { // https://docs.flutter.dev/release/breaking-changes/trackpad-gestures void onPointerPanZoomUpdate(PointerPanZoomUpdateEvent e) { - final scale = ((e.scale - _lastScale) * 100).toInt(); + debugPrint( + 'REMOVE ME =============================== onPointerPanZoomUpdate ${e.scale}'); + final scale = ((e.scale - _lastScale) * 1000).toInt(); _lastScale = e.scale; + if (scale != 0) { + bind.sessionSendPointer( + sessionId: sessionId, + msg: json.encode({ + 'touch': {'scale': scale} + })); + return; + } + final delta = e.panDelta; _trackpadLastDelta = delta; @@ -371,7 +382,7 @@ class InputModel { if (x != 0 || y != 0) { bind.sessionSendMouse( sessionId: sessionId, - msg: '{"type": "trackpad", "x": "$x", "y": "$y", "scale": "$scale"}'); + msg: '{"type": "trackpad", "x": "$x", "y": "$y"}'); } } @@ -427,6 +438,12 @@ class InputModel { } void onPointerPanZoomEnd(PointerPanZoomEndEvent e) { + bind.sessionSendPointer( + sessionId: sessionId, + msg: json.encode({ + 'touch': {'scale': 0} + })); + waitLastFlingDone(); _stopFling = false; diff --git a/libs/hbb_common/protos/message.proto b/libs/hbb_common/protos/message.proto index 20eb08ba5..433e186d5 100644 --- a/libs/hbb_common/protos/message.proto +++ b/libs/hbb_common/protos/message.proto @@ -111,12 +111,31 @@ message LoginResponse { } } +message TouchScaleUpdate { + // The delta scale factor relative to the previous scale. + // delta * 1000 + // 0 means scale end + int32 scale = 1; +} + +message TouchEvent { + oneof union { + TouchScaleUpdate scale_update = 1; + } + repeated ControlKey modifiers = 2; +} + +message PointerDeviceEvent { + oneof union { + TouchEvent touch_event = 1; + } +} + message MouseEvent { int32 mask = 1; sint32 x = 2; sint32 y = 3; repeated ControlKey modifiers = 4; - sint32 scale = 5; } enum KeyboardMode{ @@ -683,5 +702,6 @@ message Message { VoiceCallRequest voice_call_request = 23; VoiceCallResponse voice_call_response = 24; PeerInfo peer_info = 25; + PointerDeviceEvent pointer_device_event = 26; } } diff --git a/src/client.rs b/src/client.rs index 6937816a4..798bc83f2 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1929,7 +1929,6 @@ pub fn send_mouse( mask: i32, x: i32, y: i32, - scale: i32, alt: bool, ctrl: bool, shift: bool, @@ -1941,7 +1940,6 @@ pub fn send_mouse( mask, x, y, - scale, ..Default::default() }; if alt { @@ -1968,18 +1966,54 @@ pub fn send_mouse( interface.send(Data::Message(msg_out)); } +#[inline] +pub fn send_touch( + mut evt: TouchEvent, + alt: bool, + ctrl: bool, + shift: bool, + command: bool, + interface: &impl Interface, +) { + let mut msg_out = Message::new(); + if alt { + evt.modifiers.push(ControlKey::Alt.into()); + } + if shift { + evt.modifiers.push(ControlKey::Shift.into()); + } + if ctrl { + evt.modifiers.push(ControlKey::Control.into()); + } + if command { + evt.modifiers.push(ControlKey::Meta.into()); + } + #[cfg(all(target_os = "macos", not(feature = "flutter")))] + if check_scroll_on_mac(mask, x, y) { + let factor = 3; + mouse_event.mask = crate::input::MOUSE_TYPE_TRACKPAD; + mouse_event.x *= factor; + mouse_event.y *= factor; + } + msg_out.set_pointer_device_event(PointerDeviceEvent { + union: Some(pointer_device_event::Union::TouchEvent(evt)), + ..Default::default() + }); + interface.send(Data::Message(msg_out)); +} + /// Activate OS by sending mouse movement. /// /// # Arguments /// /// * `interface` - The interface for sending data. fn activate_os(interface: &impl Interface) { - send_mouse(0, 0, 0, 0, false, false, false, false, interface); + send_mouse(0, 0, 0, false, false, false, false, interface); std::thread::sleep(Duration::from_millis(50)); - send_mouse(0, 3, 3, 0, false, false, false, false, interface); + send_mouse(0, 3, 3, false, false, false, false, interface); std::thread::sleep(Duration::from_millis(50)); - send_mouse(1 | 1 << 3, 0, 0, 0, false, false, false, false, interface); - send_mouse(2 | 1 << 3, 0, 0, 0, false, false, false, false, interface); + send_mouse(1 | 1 << 3, 0, 0, false, false, false, false, interface); + send_mouse(2 | 1 << 3, 0, 0, false, false, false, false, interface); /* let mut key_event = KeyEvent::new(); // do not use Esc, which has problem with Linux diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index e4564f144..011c1b098 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1069,6 +1069,24 @@ pub fn main_start_dbus_server() { } } +pub fn session_send_pointer(session_id: SessionID, msg: String) { + if let Ok(m) = serde_json::from_str::>(&msg) { + let alt = m.get("alt").is_some(); + let ctrl = m.get("ctrl").is_some(); + let shift = m.get("shift").is_some(); + let command = m.get("command").is_some(); + if let Some(touch_event) = m.get("touch") { + if let Some(scale) = touch_event.get("scale") { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + if let Some(scale) = scale.as_i64() { + session.send_touch_scale(scale as _, alt, ctrl, shift, command); + } + } + } + } + } +} + pub fn session_send_mouse(session_id: SessionID, msg: String) { if let Ok(m) = serde_json::from_str::>(&msg) { let alt = m.get("alt").is_some(); @@ -1103,12 +1121,8 @@ pub fn session_send_mouse(session_id: SessionID, msg: String) { _ => 0, } << 3; } - let scale = m - .get("scale") - .map(|x| x.parse::().unwrap_or(0)) - .unwrap_or(0); if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { - session.send_mouse(mask, x, y, scale, alt, ctrl, shift, command); + session.send_mouse(mask, x, y, alt, ctrl, shift, command); } } } diff --git a/src/ipc.rs b/src/ipc.rs index 526761c8b..9eaade320 100644 --- a/src/ipc.rs +++ b/src/ipc.rs @@ -152,6 +152,7 @@ pub enum DataPortableService { Pong, ConnCount(Option), Mouse((Vec, i32)), + Pointer((Vec, i32)), Key(Vec), RequestStart, WillClose, diff --git a/src/server/connection.rs b/src/server/connection.rs index 4224d670a..c91b813ff 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -115,6 +115,8 @@ enum MessageInput { Mouse((MouseEvent, i32)), #[cfg(not(any(target_os = "android", target_os = "ios")))] Key((KeyEvent, bool)), + #[cfg(not(any(target_os = "android", target_os = "ios")))] + Pointer((PointerDeviceEvent, i32)), BlockOn, BlockOff, #[cfg(all(feature = "flutter", feature = "plugin_framework"))] @@ -668,6 +670,9 @@ impl Connection { handle_key(&msg); } } + MessageInput::Pointer((msg, id)) => { + handle_pointer(&msg, id); + } MessageInput::BlockOn => { if crate::platform::block_input(true) { block_input_mode = true; @@ -1179,6 +1184,12 @@ impl Connection { self.tx_input.send(MessageInput::Mouse((msg, conn_id))).ok(); } + #[inline] + #[cfg(not(any(target_os = "android", target_os = "ios")))] + fn input_pointer(&self, msg: PointerDeviceEvent, conn_id: i32) { + self.tx_input.send(MessageInput::Pointer((msg, conn_id))).ok(); + } + #[inline] #[cfg(not(any(target_os = "android", target_os = "ios")))] fn input_key(&self, msg: KeyEvent, press: bool) { @@ -1577,6 +1588,13 @@ impl Connection { self.input_mouse(me, self.inner.id()); } } + Some(message::Union::PointerDeviceEvent(pde)) => { + #[cfg(not(any(target_os = "android", target_os = "ios")))] + if self.peer_keyboard_enabled() { + MOUSE_MOVE_TIME.store(get_time(), Ordering::SeqCst); + self.input_pointer(pde, self.inner.id()); + } + } #[cfg(any(target_os = "android", target_os = "ios"))] Some(message::Union::KeyEvent(..)) => {} #[cfg(not(any(target_os = "android", target_os = "ios")))] diff --git a/src/server/input_service.rs b/src/server/input_service.rs index 49baeab6b..8562ca3eb 100644 --- a/src/server/input_service.rs +++ b/src/server/input_service.rs @@ -7,7 +7,11 @@ use crate::input::*; #[cfg(target_os = "macos")] use dispatch::Queue; use enigo::{Enigo, Key, KeyboardControllable, MouseButton, MouseControllable}; -use hbb_common::{get_time, protobuf::EnumOrUnknown}; +use hbb_common::{ + get_time, + message_proto::{pointer_device_event::Union::TouchEvent, touch_event::Union::ScaleUpdate}, + protobuf::EnumOrUnknown, +}; use rdev::{self, EventType, Key as RdevKey, KeyCode, RawKey}; #[cfg(target_os = "macos")] use rdev::{CGEventSourceStateID, CGEventTapLocation, VirtualInput}; @@ -523,6 +527,21 @@ pub fn handle_mouse(evt: &MouseEvent, conn: i32) { handle_mouse_(evt, conn); } +// to-do: merge handle_mouse and handle_pointer +pub fn handle_pointer(evt: &PointerDeviceEvent, conn: i32) { + #[cfg(target_os = "macos")] + if !is_server() { + // having GUI, run main GUI thread, otherwise crash + let evt = evt.clone(); + QUEUE.exec_async(move || handle_pointer_(&evt, conn)); + return; + } + #[cfg(windows)] + crate::portable_service::client::handle_pointer(evt, conn); + #[cfg(not(windows))] + handle_pointer_(evt, conn); +} + pub fn fix_key_down_timeout_loop() { std::thread::spawn(move || loop { std::thread::sleep(std::time::Duration::from_millis(10_000)); @@ -743,7 +762,7 @@ fn active_mouse_(conn: i32) -> bool { } } -pub fn handle_mouse_(evt: &MouseEvent, conn: i32) { +pub fn handle_pointer_(evt: &PointerDeviceEvent, conn: i32) { if !active_mouse_(conn) { return; } @@ -752,12 +771,25 @@ pub fn handle_mouse_(evt: &MouseEvent, conn: i32) { return; } - if evt.scale != 0 { - #[cfg(target_os = "windows")] - { - handle_scale(evt.scale); - return; - } + match &evt.union { + Some(TouchEvent(evt)) => match &evt.union { + Some(ScaleUpdate(_scale_evt)) => { + #[cfg(target_os = "windows")] + handle_scale(_scale_evt.scale); + } + _ => {} + }, + _ => {} + } +} + +pub fn handle_mouse_(evt: &MouseEvent, conn: i32) { + if !active_mouse_(conn) { + return; + } + + if EXITING.load(Ordering::SeqCst) { + return; } #[cfg(windows)] @@ -896,10 +928,13 @@ pub fn handle_mouse_(evt: &MouseEvent, conn: i32) { #[cfg(target_os = "windows")] fn handle_scale(scale: i32) { let mut en = ENIGO.lock().unwrap(); - if en.key_down(Key::Control).is_ok() { - en.mouse_scroll_y(scale); + if scale == 0 { + en.key_up(Key::Control); + } else { + if en.key_down(Key::Control).is_ok() { + en.mouse_scroll_y(scale); + } } - en.key_up(Key::Control); } pub fn is_enter(evt: &KeyEvent) -> bool { diff --git a/src/server/portable_service.rs b/src/server/portable_service.rs index b794e9823..c8185b709 100644 --- a/src/server/portable_service.rs +++ b/src/server/portable_service.rs @@ -222,6 +222,8 @@ mod utils { // functions called in separate SYSTEM user process. pub mod server { + use hbb_common::message_proto::PointerDeviceEvent; + use super::*; lazy_static::lazy_static! { @@ -466,6 +468,11 @@ pub mod server { crate::input_service::handle_mouse_(&evt, conn); } } + Pointer((v, conn)) => { + if let Ok(evt) = PointerDeviceEvent::parse_from_bytes(&v) { + crate::input_service::handle_pointer_(&evt, conn); + } + } Key(v) => { if let Ok(evt) = KeyEvent::parse_from_bytes(&v) { crate::input_service::handle_key_(&evt); @@ -499,7 +506,7 @@ pub mod server { // functions called in main process. pub mod client { - use hbb_common::anyhow::Context; + use hbb_common::{anyhow::Context, message_proto::PointerDeviceEvent}; use super::*; @@ -864,6 +871,14 @@ pub mod client { )))) } + fn handle_pointer_(evt: &PointerDeviceEvent, conn: i32) -> ResultType<()> { + let mut v = vec![]; + evt.write_to_vec(&mut v)?; + ipc_send(Data::DataPortableService(DataPortableService::Pointer(( + v, conn, + )))) + } + fn handle_key_(evt: &KeyEvent) -> ResultType<()> { let mut v = vec![]; evt.write_to_vec(&mut v)?; @@ -910,6 +925,15 @@ pub mod client { } } + pub fn handle_pointer(evt: &PointerDeviceEvent, conn: i32) { + if RUNNING.lock().unwrap().clone() { + crate::input_service::update_latest_input_cursor_time(conn); + handle_pointer_(evt, conn).ok(); + } else { + crate::input_service::handle_pointer_(evt, conn); + } + } + pub fn handle_key(evt: &KeyEvent) { if RUNNING.lock().unwrap().clone() { handle_key_(evt).ok(); diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 773eee374..033033faf 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -35,8 +35,8 @@ use hbb_common::{ use crate::client::io_loop::Remote; use crate::client::{ check_if_retry, handle_hash, handle_login_error, handle_login_from_ui, handle_test_delay, - input_os_password, load_config, send_mouse, start_video_audio_threads, FileManager, Key, - LoginConfigHandler, QualityStatus, KEY_MAP, + input_os_password, load_config, send_mouse, send_touch, start_video_audio_threads, FileManager, + Key, LoginConfigHandler, QualityStatus, KEY_MAP, }; #[cfg(not(any(target_os = "android", target_os = "ios")))] use crate::common::GrabState; @@ -690,12 +690,23 @@ impl Session { self.send_key_event(&key_event); } + pub fn send_touch_scale(&self, scale: i32, alt: bool, ctrl: bool, shift: bool, command: bool) { + let scale_evt = TouchScaleUpdate { + scale, + ..Default::default() + }; + let evt = TouchEvent { + union: Some(touch_event::Union::ScaleUpdate(scale_evt)), + ..Default::default() + }; + send_touch(evt, alt, ctrl, shift, command, self); + } + pub fn send_mouse( &self, mask: i32, x: i32, y: i32, - scale: i32, alt: bool, ctrl: bool, shift: bool, @@ -714,7 +725,7 @@ impl Session { let (alt, ctrl, shift, command) = keyboard::client::get_modifiers_state(alt, ctrl, shift, command); - send_mouse(mask, x, y, scale, alt, ctrl, shift, command, self); + send_mouse(mask, x, y, alt, ctrl, shift, command, self); // on macos, ctrl + left button down = right button down, up won't emit, so we need to // emit up myself if peer is not macos // to-do: how about ctrl + left from win to macos @@ -730,7 +741,6 @@ impl Session { (MOUSE_BUTTON_LEFT << 3 | MOUSE_TYPE_UP) as _, x, y, - scale, alt, ctrl, shift, From b17c6983cec819ff58d25b093100e481269c21fc Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 19 Jul 2023 01:26:43 +0800 Subject: [PATCH 154/612] win, touch scale, debug Signed-off-by: dignow --- flutter/lib/common/widgets/remote_input.dart | 23 +++++++++++++++----- flutter/lib/models/input_model.dart | 2 -- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/flutter/lib/common/widgets/remote_input.dart b/flutter/lib/common/widgets/remote_input.dart index 8c14bf26c..49c8879f3 100644 --- a/flutter/lib/common/widgets/remote_input.dart +++ b/flutter/lib/common/widgets/remote_input.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter/gestures.dart'; @@ -230,10 +232,18 @@ class _RawTouchGestureDetectorRegionState return; } if (isDesktop) { - // to-do + final scale = ((d.scale - _scale) * 1000).toInt(); + _scale = d.scale; + + if (scale != 0) { + bind.sessionSendPointer( + sessionId: sessionId, + msg: json.encode({ + 'touch': {'scale': scale} + })); + } } else { // mobile - // to-do: Is this correct? ffi.canvasModel.updateScale(d.scale / _scale); _scale = d.scale; ffi.canvasModel.panX(d.focalPointDelta.dx); @@ -246,14 +256,17 @@ class _RawTouchGestureDetectorRegionState return; } if (isDesktop) { - // to-do + bind.sessionSendPointer( + sessionId: sessionId, + msg: json.encode({ + 'touch': {'scale': 0} + })); } else { // mobile - // to-do: Is this correct? _scale = 1; bind.sessionSetViewStyle(sessionId: sessionId, value: ""); } - inputModel.sendMouse('up', MouseButtons.left); + inputModel.sendMouse('up', MouseButtons.left); } get onHoldDragCancel => null; diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index 8fa4d1caf..6b50aa37f 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -345,8 +345,6 @@ class InputModel { // https://docs.flutter.dev/release/breaking-changes/trackpad-gestures void onPointerPanZoomUpdate(PointerPanZoomUpdateEvent e) { - debugPrint( - 'REMOVE ME =============================== onPointerPanZoomUpdate ${e.scale}'); final scale = ((e.scale - _lastScale) * 1000).toInt(); _lastScale = e.scale; From 31fc018526db48d1ba280ef15367a4cb6f4cbab5 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 19 Jul 2023 07:33:35 +0800 Subject: [PATCH 155/612] change message.proto Signed-off-by: dignow --- libs/hbb_common/protos/message.proto | 2 +- src/client.rs | 9 +++------ src/ui_session_interface.rs | 14 +++++++------- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/libs/hbb_common/protos/message.proto b/libs/hbb_common/protos/message.proto index 433e186d5..2f732539c 100644 --- a/libs/hbb_common/protos/message.proto +++ b/libs/hbb_common/protos/message.proto @@ -122,13 +122,13 @@ message TouchEvent { oneof union { TouchScaleUpdate scale_update = 1; } - repeated ControlKey modifiers = 2; } message PointerDeviceEvent { oneof union { TouchEvent touch_event = 1; } + repeated ControlKey modifiers = 2; } message MouseEvent { diff --git a/src/client.rs b/src/client.rs index 798bc83f2..ccdae0512 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1967,8 +1967,8 @@ pub fn send_mouse( } #[inline] -pub fn send_touch( - mut evt: TouchEvent, +pub fn send_pointer_device_event( + mut evt: PointerDeviceEvent, alt: bool, ctrl: bool, shift: bool, @@ -1995,10 +1995,7 @@ pub fn send_touch( mouse_event.x *= factor; mouse_event.y *= factor; } - msg_out.set_pointer_device_event(PointerDeviceEvent { - union: Some(pointer_device_event::Union::TouchEvent(evt)), - ..Default::default() - }); + msg_out.set_pointer_device_event(evt); interface.send(Data::Message(msg_out)); } diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 033033faf..a88a02edb 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -35,8 +35,8 @@ use hbb_common::{ use crate::client::io_loop::Remote; use crate::client::{ check_if_retry, handle_hash, handle_login_error, handle_login_from_ui, handle_test_delay, - input_os_password, load_config, send_mouse, send_touch, start_video_audio_threads, FileManager, - Key, LoginConfigHandler, QualityStatus, KEY_MAP, + input_os_password, load_config, send_mouse, send_pointer_device_event, + start_video_audio_threads, FileManager, Key, LoginConfigHandler, QualityStatus, KEY_MAP, }; #[cfg(not(any(target_os = "android", target_os = "ios")))] use crate::common::GrabState; @@ -695,11 +695,11 @@ impl Session { scale, ..Default::default() }; - let evt = TouchEvent { - union: Some(touch_event::Union::ScaleUpdate(scale_evt)), - ..Default::default() - }; - send_touch(evt, alt, ctrl, shift, command, self); + let mut touch_evt = TouchEvent::new(); + touch_evt.set_scale_update(scale_evt); + let mut evt = PointerDeviceEvent::new(); + evt.set_touch_event(touch_evt); + send_pointer_device_event(evt, alt, ctrl, shift, command, self); } pub fn send_mouse( From aacffd979be293765603e0abebd9a985da0448b6 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 19 Jul 2023 14:45:11 +0800 Subject: [PATCH 156/612] make config in exe name has highest priority, also overwrite config if installation, https://github.com/rustdesk/rustdesk-server-pro/issues/21#issuecomment-1638259580, not tested yet --- libs/hbb_common/src/config.rs | 10 ++++- src/common.rs | 26 ++++++------ src/core_main.rs | 2 + src/platform/windows.rs | 77 +++++------------------------------ src/server.rs | 2 - src/ui_interface.rs | 2 +- 6 files changed, 35 insertions(+), 84 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 8d322c462..8f2e180a0 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -49,6 +49,7 @@ lazy_static::lazy_static! { Some(key) if !key.is_empty() => key, _ => "", }.to_owned())); + pub static ref EXE_RENDEZVOUS_SERVER: Arc> = Default::default(); pub static ref APP_NAME: Arc> = Arc::new(RwLock::new("RustDesk".to_owned())); static ref KEY_PAIR: Arc>> = Default::default(); static ref HW_CODEC_CONFIG: Arc> = Arc::new(RwLock::new(HwCodecConfig::load())); @@ -604,7 +605,10 @@ impl Config { } pub fn get_rendezvous_server() -> String { - let mut rendezvous_server = Self::get_option("custom-rendezvous-server"); + let mut rendezvous_server = EXE_RENDEZVOUS_SERVER.read().unwrap().clone(); + if rendezvous_server.is_empty() { + rendezvous_server = Self::get_option("custom-rendezvous-server"); + } if rendezvous_server.is_empty() { rendezvous_server = PROD_RENDEZVOUS_SERVER.read().unwrap().clone(); } @@ -624,6 +628,10 @@ impl Config { } pub fn get_rendezvous_servers() -> Vec { + let s = EXE_RENDEZVOUS_SERVER.read().unwrap().clone(); + if !s.is_empty() { + return vec![s]; + } let s = Self::get_option("custom-rendezvous-server"); if !s.is_empty() { return vec![s]; diff --git a/src/common.rs b/src/common.rs index ef96f0a37..8f84509ae 100644 --- a/src/common.rs +++ b/src/common.rs @@ -833,15 +833,15 @@ pub fn is_setup(name: &str) -> bool { } pub fn get_custom_rendezvous_server(custom: String) -> String { - if !custom.is_empty() { - return custom; - } #[cfg(windows)] - if let Some(lic) = crate::platform::windows::get_license() { + if let Ok(lic) = crate::platform::windows::get_license_from_exe_name() { if !lic.host.is_empty() { return lic.host.clone(); } } + if !custom.is_empty() { + return custom; + } if !config::PROD_RENDEZVOUS_SERVER.read().unwrap().is_empty() { return config::PROD_RENDEZVOUS_SERVER.read().unwrap().clone(); } @@ -849,15 +849,15 @@ pub fn get_custom_rendezvous_server(custom: String) -> String { } pub fn get_api_server(api: String, custom: String) -> String { - if !api.is_empty() { - return api.to_owned(); - } #[cfg(windows)] - if let Some(lic) = crate::platform::windows::get_license() { + if let Ok(lic) = crate::platform::windows::get_license_from_exe_name() { if !lic.api.is_empty() { return lic.api.clone(); } } + if !api.is_empty() { + return api.to_owned(); + } let api = option_env!("API_SERVER").unwrap_or_default(); if !api.is_empty() { return api.into(); @@ -982,6 +982,10 @@ pub fn decode64>(input: T) -> Result, base64::DecodeError } pub async fn get_key(sync: bool) -> String { + #[cfg(windows)] + if let Ok(lic) = crate::platform::windows::get_license_from_exe_name() { + return lic.key; + } #[cfg(target_os = "ios")] let mut key = Config::get_option("key"); #[cfg(not(target_os = "ios"))] @@ -991,12 +995,6 @@ pub async fn get_key(sync: bool) -> String { let mut options = crate::ipc::get_options_async().await; options.remove("key").unwrap_or_default() }; - if key.is_empty() { - #[cfg(windows)] - if let Some(lic) = crate::platform::windows::get_license() { - return lic.key; - } - } if key.is_empty() && !option_env!("RENDEZVOUS_SERVER").unwrap_or("").is_empty() { key = config::RS_PUB_KEY.to_owned(); } diff --git a/src/core_main.rs b/src/core_main.rs index 391b0f3ef..2121f46cd 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -25,6 +25,8 @@ macro_rules! my_println{ /// If it returns [`Some`], then the process will continue, and flutter gui will be started. #[cfg(not(any(target_os = "android", target_os = "ios")))] pub fn core_main() -> Option> { + #[cfg(windows)] + crate::platform::windows::bootstrap(); let mut args = Vec::new(); let mut flutter_args = Vec::new(); let mut i = 0; diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 8734cccf7..16c4ead2f 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -927,35 +927,6 @@ pub fn copy_exe_cmd(src_exe: &str, exe: &str, path: &str) -> String { ) } -/* // update_me has bad compatibility, so disable it. -pub fn update_me() -> ResultType<()> { - let (_, path, _, exe) = get_install_info(); - let src_exe = std::env::current_exe()?.to_str().unwrap_or("").to_owned(); - let cmds = format!( - " - chcp 65001 - sc stop {app_name} - taskkill /F /IM {broker_exe} - taskkill /F /IM {app_name}.exe /FI \"PID ne {cur_pid}\" - {copy_exe} - sc start {app_name} - {lic} - ", - copy_exe = copy_exe_cmd(&src_exe, &exe, &path), - broker_exe = WIN_MAG_INJECTED_PROCESS_EXE, - app_name = crate::get_app_name(), - lic = register_licence(), - cur_pid = get_current_pid(), - ); - run_cmds(cmds, false, "update")?; - run_after_run_cmds(false); - std::process::Command::new(&exe) - .args(&["--remove", &src_exe]) - .spawn()?; - Ok(()) -} -*/ - fn get_after_install(exe: &str) -> String { let app_name = crate::get_app_name(); let ext = app_name.to_lowercase(); @@ -1093,6 +1064,15 @@ if exist \"{tmp_path}\\{app_name} Tray.lnk\" del /f /q \"{tmp_path}\\{app_name} "".to_owned() }; + // potential bug here: if run_cmd cancelled, but config file is changed. + if let Ok(lic) = crate::platform::windows::get_license_from_exe_name() { + if !lic.host.is_empty() { + Config::set_option("key".into(), lic.key); + Config::set_option("custom-rendezvous-server".into(), lic.host); + Config::set_option("api-server".into(), lic.api); + } + } + let cmds = format!( " {uninstall_str} @@ -1113,7 +1093,6 @@ reg add {subkey} /f /v VersionBuild /t REG_DWORD /d {version_build} reg add {subkey} /f /v UninstallString /t REG_SZ /d \"\\\"{exe}\\\" --uninstall\" reg add {subkey} /f /v EstimatedSize /t REG_DWORD /d {size} reg add {subkey} /f /v WindowsInstaller /t REG_DWORD /d 0 -{lic} cscript \"{mk_shortcut}\" cscript \"{uninstall_shortcut}\" cscript \"{tray_shortcut}\" @@ -1128,7 +1107,6 @@ copy /Y \"{tmp_path}\\Uninstall {app_name}.lnk\" \"{path}\\\" ", version=crate::VERSION, build_date=crate::BUILD_DATE, - lic=register_licence(), after_install=get_after_install(&exe), sleep=if debug { "timeout 300" @@ -1347,7 +1325,7 @@ fn get_reg_of(subkey: &str, name: &str) -> String { "".to_owned() } -fn get_license_from_exe_name() -> ResultType { +pub fn get_license_from_exe_name() -> ResultType { let mut exe = std::env::current_exe()?.to_str().unwrap_or("").to_owned(); // if defined portable appname entry, replace original executable name with it. if let Ok(portable_exe) = std::env::var(PORTABLE_APPNAME_RUNTIME_ENV_KEY) { @@ -1362,42 +1340,9 @@ pub fn is_win_server() -> bool { unsafe { is_windows_server() > 0 } } -pub fn get_license() -> Option { - let mut lic: License = Default::default(); - if let Ok(tmp) = get_license_from_exe_name() { - lic = tmp; - } else { - lic.key = get_reg("Key"); - lic.host = get_reg("Host"); - lic.api = get_reg("Api"); - } - if lic.key.is_empty() || lic.host.is_empty() { - return None; - } - Some(lic) -} - pub fn bootstrap() { - if let Some(lic) = get_license() { - *config::PROD_RENDEZVOUS_SERVER.write().unwrap() = lic.host.clone(); - } -} - -fn register_licence() -> String { - let (subkey, _, _, _) = get_install_info(); if let Ok(lic) = get_license_from_exe_name() { - format!( - " - reg add {subkey} /f /v Key /t REG_SZ /d \"{key}\" - reg add {subkey} /f /v Host /t REG_SZ /d \"{host}\" - reg add {subkey} /f /v Api /t REG_SZ /d \"{api}\" - ", - key = &lic.key, - host = &lic.host, - api = &lic.api, - ) - } else { - "".to_owned() + *config::EXE_RENDEZVOUS_SERVER.write().unwrap() = lic.host.clone(); } } diff --git a/src/server.rs b/src/server.rs index b2d0b593f..9f41b1ddc 100644 --- a/src/server.rs +++ b/src/server.rs @@ -379,8 +379,6 @@ pub async fn start_server(is_server: bool) { std::process::exit(-1); } }); - #[cfg(windows)] - crate::platform::windows::bootstrap(); input_service::fix_key_down_timeout_loop(); crate::hbbs_http::sync::start(); #[cfg(target_os = "linux")] diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 982436b53..9ea367486 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -118,7 +118,7 @@ pub fn show_run_without_install() -> bool { #[inline] pub fn get_license() -> String { #[cfg(windows)] - if let Some(lic) = crate::platform::windows::get_license() { + if let Ok(lic) = crate::platform::windows::get_license_from_exe_name() { #[cfg(feature = "flutter")] return format!("Key: {}\nHost: {}\nApi: {}", lic.key, lic.host, lic.api); // default license format is html formed (sciter) From 9ac3128309fa9812016fd7c3ce43e40d3c24003f Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 19 Jul 2023 17:11:57 +0800 Subject: [PATCH 157/612] --set-id and --config, not tested yet --- src/core_main.rs | 39 +++++++++++++++++++++++++++++++++++++++ src/license.rs | 15 ++++++++++----- src/ui_interface.rs | 6 ++++-- 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index 2121f46cd..e261ed5b2 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -257,6 +257,45 @@ pub fn core_main() -> Option> { my_println!("Installation and administrative privileges required!"); } return None; + } else if args[0] == "--set-id" { + if args.len() == 2 { + if crate::platform::is_installed() + && crate::platform::check_super_user_permission().unwrap_or_default() + { + let old_id = crate::ipc::get_id(); + let mut res = crate::ui_interface::change_id_shared(args[1].to_owned(), old_id); + if res.is_empty() { + res = "Done!".to_owned(); + } + my_println!("{}", res); + } else { + my_println!("Installation and administrative privileges required!"); + } + } + return None; + } else if args[0] == "--config" { + if args.len() == 2 { + if crate::platform::is_installed() + && crate::platform::check_super_user_permission().unwrap_or_default() + { + // arg: starting with `host=`, e.g. `host=127.0.0.1,api=https://test.com,key=asfs`, + // or the filename (without ext) used in renaming exe. + let name = format!("{}.exe", args[1]); + if let Ok(lic) = crate::license::get_license_from_string(&name) { + if !lic.host.is_empty() { + crate::ui_interface::set_option("key".into(), lic.key); + crate::ui_interface::set_option( + "custom-rendezvous-server".into(), + lic.host, + ); + crate::ui_interface::set_option("api-server".into(), lic.api); + } + } + } else { + my_println!("Installation and administrative privileges required!"); + } + } + return None; } else if args[0] == "--check-hwcodec-config" { #[cfg(feature = "hwcodec")] scrap::hwcodec::check_config(); diff --git a/src/license.rs b/src/license.rs index 1b8742533..59d11f4d8 100644 --- a/src/license.rs +++ b/src/license.rs @@ -53,20 +53,23 @@ pub fn get_license_from_string(s: &str) -> ResultType { let strs: Vec<&str> = stripped.split(",").collect(); let mut host = ""; let mut key = ""; + let mut api = ""; let strs_iter = strs.iter(); for el in strs_iter { if el.starts_with("host=") { host = &el[5..el.len()]; } - if el.starts_with("key=") { key = &el[4..el.len()]; } + if el.starts_with("api=") { + api = &el[4..el.len()]; + } } return Ok(License { host: host.to_owned(), key: key.to_owned(), - api: "".to_owned(), + api: api.to_owned(), }); } else { let strs = if s.contains("-licensed-") { @@ -110,12 +113,14 @@ mod test { ); // key in these tests is "foobar.,2" base64 encoded assert_eq!( - get_license_from_string("rustdesk-host=server.example.net,key=Zm9vYmFyLiwyCg==.exe") - .unwrap(), + get_license_from_string( + "rustdesk-host=server.example.net,api=abc,key=Zm9vYmFyLiwyCg==.exe" + ) + .unwrap(), License { host: "server.example.net".to_owned(), key: "Zm9vYmFyLiwyCg==".to_owned(), - api: "".to_owned(), + api: "abc".to_owned(), } ); assert_eq!( diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 9ea367486..b10fad206 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -1027,8 +1027,10 @@ const UNKNOWN_ERROR: &'static str = "Unknown error"; #[inline] #[tokio::main(flavor = "current_thread")] -pub async fn change_id_shared(id: String, old_id: String) { - *ASYNC_JOB_STATUS.lock().unwrap() = change_id_shared_(id, old_id).await.to_owned(); +pub async fn change_id_shared(id: String, old_id: String) -> String { + let res = change_id_shared_(id, old_id).await.to_owned(); + *ASYNC_JOB_STATUS.lock().unwrap() = res.clone(); + res } pub async fn change_id_shared_(id: String, old_id: String) -> &'static str { From c9d19115e9817885d9008c7fc597b375ee67ac50 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 19 Jul 2023 17:24:58 +0800 Subject: [PATCH 158/612] fix CI --- src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 9648a6dc1..beeb6e46a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -41,7 +41,6 @@ pub mod cli; #[cfg(not(any(target_os = "android", target_os = "ios", feature = "cli")))] pub mod core_main; mod lang; -#[cfg(windows)] mod license; #[cfg(not(any(target_os = "android", target_os = "ios")))] mod port_forward; From e48f36a227e3098e43071b4b95f9e3d74e3b004d Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 19 Jul 2023 21:46:15 +0800 Subject: [PATCH 159/612] prepare device_info upload, change sync interval from 30s to 15s, also enable android --- src/hbbs_http/sync.rs | 6 +++--- src/rendezvous_mediator.rs | 1 + src/server.rs | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hbbs_http/sync.rs b/src/hbbs_http/sync.rs index 251436aa7..00fbc9933 100644 --- a/src/hbbs_http/sync.rs +++ b/src/hbbs_http/sync.rs @@ -9,7 +9,7 @@ use hbb_common::{ use serde::{Deserialize, Serialize}; use serde_json::{json, Value}; -const TIME_HEARTBEAT: Duration = Duration::from_secs(30); +const TIME_HEARTBEAT: Duration = Duration::from_secs(15); const TIME_CONN: Duration = Duration::from_secs(3); #[cfg(not(any(target_os = "ios")))] @@ -17,7 +17,7 @@ lazy_static::lazy_static! { static ref SENDER : Mutex>> = Mutex::new(start_hbbs_sync()); } -#[cfg(not(any(target_os = "android", target_os = "ios")))] +#[cfg(not(any(target_os = "ios")))] pub fn start() { let _sender = SENDER.lock().unwrap(); } @@ -52,7 +52,6 @@ async fn start_hbbs_sync_async() { tokio::select! { _ = interval.tick() => { let url = heartbeat_url(); - let modified_at = LocalConfig::get_option("strategy_timestamp").parse::().unwrap_or(0); if !url.is_empty() { let conns = Connection::alive_conns(); if conns.is_empty() && last_send.elapsed() < TIME_HEARTBEAT { @@ -65,6 +64,7 @@ async fn start_hbbs_sync_async() { if !conns.is_empty() { v["conns"] = json!(conns); } + let modified_at = LocalConfig::get_option("strategy_timestamp").parse::().unwrap_or(0); v["modified_at"] = json!(modified_at); if let Ok(s) = crate::post_request(url.clone(), v.to_string(), "").await { if let Ok(mut rsp) = serde_json::from_str::>(&s) { diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 8b43d86a5..c0f02f2e3 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -52,6 +52,7 @@ impl RendezvousMediator { } pub async fn start_all() { + crate::hbbs_http::sync::start(); let mut nat_tested = false; check_zombie(); let server = new_server(); diff --git a/src/server.rs b/src/server.rs index 9f41b1ddc..a8634f81f 100644 --- a/src/server.rs +++ b/src/server.rs @@ -380,7 +380,6 @@ pub async fn start_server(is_server: bool) { } }); input_service::fix_key_down_timeout_loop(); - crate::hbbs_http::sync::start(); #[cfg(target_os = "linux")] if crate::platform::current_is_wayland() { allow_err!(input_service::setup_uinput(0, 1920, 0, 1080).await); From ca0e00ea5e30286e789b2aab59823aed8422a99e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C4=83lina-Ioana=20Popa?= Date: Wed, 19 Jul 2023 18:58:58 +0200 Subject: [PATCH 160/612] update romanian language --- src/lang/ro.rs | 390 ++++++++++++++++++++++++------------------------- 1 file changed, 195 insertions(+), 195 deletions(-) diff --git a/src/lang/ro.rs b/src/lang/ro.rs index b3f75beff..032837575 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -8,25 +8,25 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Ready", "Pregătit"), ("Established", "Stabilit"), ("connecting_status", "În curs de conectare la rețeaua RustDesk..."), - ("Enable Service", "Activează serviciu"), - ("Start Service", "Pornește serviciu"), - ("Service is running", "Serviciul este în curs de executare..."), + ("Enable Service", "Activează serviciul"), + ("Start Service", "Pornește serviciul"), + ("Service is running", "Serviciul rulează..."), ("Service is not running", "Serviciul nu funcționează"), ("not_ready_status", "Nepregătit. Verifică conexiunea la rețea."), - ("Control Remote Desktop", "Controlează desktop-ul la distanță"), - ("Transfer File", "Transferă fișier"), + ("Control Remote Desktop", "Controlează desktopul la distanță"), + ("Transfer File", "Transferă fișiere"), ("Connect", "Conectează-te"), ("Recent Sessions", "Sesiuni recente"), ("Address Book", "Agendă"), ("Confirmation", "Confirmare"), ("TCP Tunneling", "Tunel TCP"), ("Remove", "Elimină"), - ("Refresh random password", "Actualizează parolă aleatorie"), + ("Refresh random password", "Actualizează parola aleatorie"), ("Set your own password", "Setează propria parolă"), ("Enable Keyboard/Mouse", "Activează control tastatură/mouse"), ("Enable Clipboard", "Activează clipboard"), - ("Enable File Transfer", "Activează transfer fișiere"), - ("Enable TCP Tunneling", "Activează tunel TCP"), + ("Enable File Transfer", "Activează transferul de fișiere"), + ("Enable TCP Tunneling", "Activează tunelul TCP"), ("IP Whitelisting", "Listă de IP-uri autorizate"), ("ID/Relay Server", "Server de ID/retransmisie"), ("Import Server Config", "Importă configurație server"), @@ -35,22 +35,22 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Export server configuration successfully", "Configurație server exportată cu succes"), ("Invalid server configuration", "Configurație server nevalidă"), ("Clipboard is empty", "Clipboard gol"), - ("Stop service", "Oprește serviciu"), + ("Stop service", "Oprește serviciul"), ("Change ID", "Schimbă ID"), - ("Your new ID", ""), - ("length %min% to %max%", ""), - ("starts with a letter", ""), - ("allowed characters", ""), + ("Your new ID", "Noul tău ID"), + ("length %min% to %max%", "lungime între %min% și %max%"), + ("starts with a letter", "începe cu o literă"), + ("allowed characters", "caractere permise"), ("id_change_tip", "Pot fi utilizate doar caractere a-z, A-Z, 0-9, _ (bară jos). Primul caracter trebuie să fie a-z, A-Z. Lungimea trebuie să fie între 6 și 16 caractere."), ("Website", "Site web"), ("About", "Despre"), - ("Slogan_tip", ""), - ("Privacy Statement", ""), - ("Mute", "Fără sunet"), - ("Build Date", ""), - ("Version", ""), - ("Home", ""), - ("Audio Input", "Intrare audio"), + ("Slogan_tip", "Făcut din inimă în lumea aceasta haotică!"), + ("Privacy Statement", "Politică de confidențialitate"), + ("Mute", "Dezactivează sunet"), + ("Build Date", "Dată build"), + ("Version", "Versiune"), + ("Home", "Acasă"), + ("Audio Input", "Intrări audio"), ("Enhancements", "Îmbunătățiri"), ("Hardware Codec", "Codec hardware"), ("Adaptive Bitrate", "Rată de biți adaptabilă"), @@ -76,7 +76,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Connection Error", "Eroare de conexiune"), ("Error", "Eroare"), ("Reset by the peer", "Conexiunea a fost închisă de dispozitivul pereche"), - ("Connecting...", "Conectare..."), + ("Connecting...", "Se conectează..."), ("Connection in progress. Please wait.", "Conectare în curs. Te rugăm așteaptă."), ("Please try 1 minute later", "Reîncearcă într-un minut"), ("Login Error", "Eroare de autentificare"), @@ -105,7 +105,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Are you sure you want to delete this file?", "Sigur vrei să ștergi acest fișier?"), ("Are you sure you want to delete this empty directory?", "Sigur vrei să ștergi acest director gol?"), ("Are you sure you want to delete the file of this directory?", "Sigur vrei să ștergi fișierul din acest director?"), - ("Do this for all conflicts", "Aplică pentru toate conflictele"), + ("Do this for all conflicts", "Aplică la toate conflictele"), ("This is irreversible!", "Această acțiune este ireversibilă!"), ("Deleting", "În curs de ștergere..."), ("files", "fișier"), @@ -122,12 +122,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Stretch", "Extinde"), ("Scrollbar", "Bară de derulare"), ("ScrollAuto", "Derulare automată"), - ("Good image quality", "Calitate bună a imaginii"), - ("Balanced", "Calitate normală a imaginii"), + ("Good image quality", "Calitate bună"), + ("Balanced", "Calitate normală"), ("Optimize reaction time", "Optimizează timpul de reacție"), - ("Custom", "Personalizat"), + ("Custom", "Personalizează"), ("Show remote cursor", "Afișează cursor la distanță"), - ("Show quality monitor", "Afișează indicator de calitate"), + ("Show quality monitor", "Afișează detalii despre conexiune"), ("Disable clipboard", "Dezactivează clipboard"), ("Lock after session end", "Blochează după deconectare"), ("Insert", "Introdu"), @@ -137,7 +137,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Failed to connect to rendezvous server", "Conectare la server rendezvous eșuată"), ("Please try later", "Încearcă mai târziu"), ("Remote desktop is offline", "Desktopul la distanță este offline"), - ("Key mismatch", "Nepotrivire chei"), + ("Key mismatch", "Nepotrivire cheie"), ("Timeout", "Conexiune expirată"), ("Failed to connect to relay server", "Conectare la server de retransmisie eșuată"), ("Failed to connect via rendezvous server", "Conectare prin intermediul serverului rendezvous eșuată"), @@ -145,14 +145,14 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Failed to make direct connection to remote desktop", "Imposibil de stabilit o conexiune directă cu desktopul la distanță"), ("Set Password", "Setează parola"), ("OS Password", "Parolă OS"), - ("install_tip", "Din cauza restricțiilor UAC, e posibil ca RustDesk să nu funcționeze corespunzător. Pentru a evita acest lucru, fă clic pe butonul de mai jos pentru a instala RustDesk."), - ("Click to upgrade", "Fă clic pentru a face upgrade"), - ("Click to download", "Fă clic pentru a descărca"), - ("Click to update", "Fă clic pentru a actualiza"), + ("install_tip", "Din cauza restricțiilor CCU, este posibil ca RustDesk să nu funcționeze corespunzător. Pentru a evita acest lucru, dă clic pe butonul de mai jos pentru a instala RustDesk."), + ("Click to upgrade", "Dă clic pentru a face upgrade"), + ("Click to download", "Dă clic pentru a descărca"), + ("Click to update", "Dă clic pentru a actualiza"), ("Configure", "Configurează"), ("config_acc", "Pentru a controla desktopul la distanță, trebuie să permiți RustDesk acces la setările de Accesibilitate."), ("config_screen", "Pentru a controla desktopul la distanță, trebuie să permiți RustDesk acces la setările de Înregistrare ecran."), - ("Installing ...", "Instalare în curs..."), + ("Installing ...", "Se instalează..."), ("Install", "Instalează"), ("Installation", "Instalare"), ("Installation Path", "Cale de instalare"), @@ -171,15 +171,15 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Add", "Adaugă"), ("Local Port", "Port local"), ("Local Address", "Adresă locală"), - ("Change Local Port", "Schimbă port local"), - ("setup_server_tip", "Pentru o conexiune mai rapidă, îți poți configura propriul server."), - ("Too short, at least 6 characters.", "Prea scurt; trebuie cel puțin 6 caractere."), + ("Change Local Port", "Modifică port local"), + ("setup_server_tip", "pentru o conexiune mai rapidă, îți poți configura propriul server."), + ("Too short, at least 6 characters.", "Prea scurtă; trebuie cel puțin 6 caractere."), ("The confirmation is not identical.", "Cele două intrări nu corespund."), ("Permissions", "Permisiuni"), ("Accept", "Acceptă"), ("Dismiss", "Respinge"), ("Disconnect", "Deconectează-te"), - ("Allow using keyboard and mouse", "Permite utilizarea tastaturii și mouse-ului"), + ("Allow using keyboard and mouse", "Permite utilizarea tastaturii și a mouse-ului"), ("Allow using clipboard", "Permite utilizarea clipboardului"), ("Allow hearing sound", "Permite auzirea sunetului"), ("Allow file copy and paste", "Permite copierea/lipirea fișierelor"), @@ -192,7 +192,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Enter your password", "Introdu parola"), ("Logging in...", "Se conectează..."), ("Enable RDP session sharing", "Activează partajarea sesiunii RDP"), - ("Auto Login", "Conectare automată (valid doar dacă funcția de Blocare după deconectare este activă)"), + ("Auto Login", "Conectare automată (valid doar dacă funcția de blocare după deconectare este activă)"), ("Enable Direct IP Access", "Activează accesul direct cu IP"), ("Rename", "Redenumește"), ("Space", "Spațiu"), @@ -205,25 +205,25 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Login screen using Wayland is not supported", "Ecranele de conectare care folosesc Wayland nu sunt acceptate"), ("Reboot required", "Repornire necesară"), ("Unsupported display server", "Tipul de server de afișaj nu este acceptat"), - ("x11 expected", "E necesar X11"), + ("x11 expected", "Este necesar X11"), ("Port", "Port"), ("Settings", "Setări"), - ("Username", " Nume de utilizator"), + ("Username", " Nume utilizator"), ("Invalid port", "Port nevalid"), - ("Closed manually by the peer", "Închis manual de dispozitivul pereche"), + ("Closed manually by the peer", "Conexiune închisă manual de dispozitivul pereche"), ("Enable remote configuration modification", "Activează modificarea configurației de la distanță"), - ("Run without install", "Rulează fără instalare"), - ("Connect via relay", ""), - ("Always connect via relay", "Se conectează mereu prin retransmisie"), + ("Run without install", "Rulează fără a instala"), + ("Connect via relay", "Conectează-te prin retransmisie"), + ("Always connect via relay", "Conectează-te mereu prin retransmisie"), ("whitelist_tip", "Doar adresele IP autorizate pot accesa acest dispozitiv"), - ("Login", "Conectare"), - ("Verify", ""), - ("Remember me", ""), - ("Trust this device", ""), - ("Verification code", ""), + ("Login", "Conectează-te"), + ("Verify", "Verificare"), + ("Remember me", "Reține-mă"), + ("Trust this device", "Acest dispozitiv este de încredere"), + ("Verification code", "Cod de verificare"), ("verification_tip", ""), - ("Logout", "Deconectare"), - ("Tags", "Etichetare"), + ("Logout", "Deconectează-te"), + ("Tags", "Etichete"), ("Search ID", "Caută după ID"), ("whitelist_sep", "Poți folosi ca separator virgula, punctul și virgula, spațiul sau linia nouă"), ("Add ID", "Adaugă ID"), @@ -271,25 +271,25 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Note", "Reține"), ("Connection", "Conexiune"), ("Share Screen", "Partajează ecran"), - ("Chat", "Discută"), + ("Chat", "Mesaje"), ("Total", "Total"), ("items", "elemente"), ("Selected", "Selectat"), - ("Screen Capture", "Captură ecran"), + ("Screen Capture", "Capturare ecran"), ("Input Control", "Control intrări"), - ("Audio Capture", "Captură audio"), + ("Audio Capture", "Capturare audio"), ("File Connection", "Conexiune fișier"), ("Screen Connection", "Conexiune ecran"), ("Do you accept?", "Accepți?"), ("Open System Setting", "Deschide setări sistem"), ("How to get Android input permission?", "Cum autorizez dispozitive de intrare pe Android?"), - ("android_input_permission_tip1", "Pentru ca un dispozitiv la distanță să poată controla un dispozitiv Android folosind mouse-ul sau suportul tactil, trebuie să permiți RustDesk să utilize serviciul Accesibilitate."), - ("android_input_permission_tip2", "Accesează următoarea pagină din Setări, caută și deschide [Aplicații instalate] și activează serviciul [RustDesk Input]."), - ("android_new_connection_tip", "Ai primit o nouă solicitare de control pentru dispozitivul actual."), - ("android_service_will_start_tip", "Activarea setării Captură ecran va porni automat serviciul, permițând altor dispozitive să solicite conectarea la dispozitivul tău."), + ("android_input_permission_tip1", "Pentru ca un dispozitiv la distanță să poată controla un dispozitiv Android folosind mouse-ul sau suportul tactil, trebuie să permiți RustDesk să utilize serviciul „Accesibilitate”."), + ("android_input_permission_tip2", "Accesează următoarea pagină din Setări, deschide [Aplicații instalate] și pornește serviciul [RustDesk Input]."), + ("android_new_connection_tip", "Ai primit o nouă solicitare de controlare a dispozitivului actual."), + ("android_service_will_start_tip", "Activarea setării de capturare a ecranului va porni automat serviciul, permițând altor dispozitive să solicite conectarea la dispozitivul tău."), ("android_stop_service_tip", "Închiderea serviciului va închide automat toate conexiunile stabilite."), ("android_version_audio_tip", "Versiunea actuală de Android nu suportă captura audio. Fă upgrade la Android 10 sau la o versiune superioară."), - ("android_start_service_tip", ""), + ("android_start_service_tip", "Apasă [Pornește serviciu] sau DESCHIDE [Capturare ecran] pentru a porni serviciul de partajare a ecranului."), ("android_permission_may_not_change_tip", ""), ("Account", "Cont"), ("Overwrite", "Suprascrie"), @@ -312,14 +312,14 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Keep RustDesk background service", "Rulează serviciul RustDesk în fundal"), ("Ignore Battery Optimizations", "Ignoră optimizările de baterie"), ("android_open_battery_optimizations_tip", "Pentru dezactivarea acestei funcții, accesează setările aplicației RustDesk, deschide secțiunea [Baterie] și deselectează [Fără restricții]."), - ("Start on Boot", ""), - ("Start the screen sharing service on boot, requires special permissions", ""), + ("Start on Boot", "Pornește la boot"), + ("Start the screen sharing service on boot, requires special permissions", "Pornește serviciul de partajare a ecranului la boot; necesită permisiuni speciale"), ("Connection not allowed", "Conexiune neautoriztă"), ("Legacy mode", "Mod legacy"), ("Map mode", "Mod hartă"), ("Translate mode", "Mod traducere"), ("Use permanent password", "Folosește parola permanentă"), - ("Use both passwords", "Folosește parola unică și cea permanentă"), + ("Use both passwords", "Folosește ambele programe"), ("Set permanent password", "Setează parola permanentă"), ("Enable Remote Restart", "Activează repornirea la distanță"), ("Allow remote restart", "Permite repornirea la distanță"), @@ -330,33 +330,33 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Copied", "Copiat"), ("Exit Fullscreen", "Ieși din modul ecran complet"), ("Fullscreen", "Ecran complet"), - ("Mobile Actions", "Acțiuni mobile"), + ("Mobile Actions", "Bară de navigare"), ("Select Monitor", "Selectează monitor"), ("Control Actions", "Acțiuni de control"), ("Display Settings", "Setări afișaj"), ("Ratio", "Raport"), ("Image Quality", "Calitate imagine"), ("Scroll Style", "Stil de derulare"), - ("Show Toolbar", ""), - ("Hide Toolbar", ""), + ("Show Toolbar", "Arată bară de instrumente"), + ("Hide Toolbar", "Ascunde bară de instrumente"), ("Direct Connection", "Conexiune directă"), ("Relay Connection", "Conexiune prin retransmisie"), ("Secure Connection", "Conexiune securizată"), ("Insecure Connection", "Conexiune nesecurizată"), - ("Scale original", "Scală originală"), - ("Scale adaptive", "Scală adaptivă"), + ("Scale original", "Dimensiune originală"), + ("Scale adaptive", "Scalare automată"), ("General", "General"), ("Security", "Securitate"), ("Theme", "Temă"), ("Dark Theme", "Temă întunecată"), - ("Light Theme", ""), - ("Dark", "Întunecat"), - ("Light", "Luminos"), - ("Follow System", "Urmărește sistem"), + ("Light Theme", "Temă luminoasă"), + ("Dark", "Întunecată"), + ("Light", "Luminoasă"), + ("Follow System", "Temă sistem"), ("Enable hardware codec", "Activează codec hardware"), - ("Unlock Security Settings", "Deblochează setări de securitate"), + ("Unlock Security Settings", "Deblochează setările de securitate"), ("Enable Audio", "Activează audio"), - ("Unlock Network Settings", "Deblochează setări de rețea"), + ("Unlock Network Settings", "Deblochează setările de rețea"), ("Server", "Server"), ("Direct IP Access", "Acces direct IP"), ("Proxy", "Proxy"), @@ -367,26 +367,26 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Use IP Whitelisting", "Folosește lista de IP-uri autorizate"), ("Network", "Rețea"), ("Enable RDP", "Activează RDP"), - ("Pin Toolbar", ""), - ("Unpin Toolbar", ""), + ("Pin Toolbar", "Fixează bara de instrumente"), + ("Unpin Toolbar", "Detașează bara de instrumente"), ("Recording", "Înregistrare"), ("Directory", "Director"), ("Automatically record incoming sessions", "Înregistrează automat sesiunile viitoare"), ("Change", "Modifică"), - ("Start session recording", "Începe înregistrare"), - ("Stop session recording", "Oprește înregistrare"), + ("Start session recording", "Începe înregistrarea"), + ("Stop session recording", "Oprește înregistrarea"), ("Enable Recording Session", "Activează înregistrarea sesiunii"), ("Allow recording session", "Permite înregistrarea sesiunii"), - ("Enable LAN Discovery", "Activează descoperire LAN"), - ("Deny LAN Discovery", "Interzice descoperire LAN"), + ("Enable LAN Discovery", "Activează descoperirea LAN"), + ("Deny LAN Discovery", "Interzice descoperirea LAN"), ("Write a message", "Scrie un mesaj"), - ("Prompt", "Solicită"), - ("Please wait for confirmation of UAC...", "Așteaptă confirmarea UAC..."), + ("Prompt", "Prompt"), + ("Please wait for confirmation of UAC...", "Așteaptă confirmarea CCU..."), ("elevated_foreground_window_tip", "Fereastra actuală a dispozitivului la distanță necesită privilegii sporite pentru a funcționa, astfel că mouse-ul și tastatura nu pot fi folosite. Poți cere utilizatorului la distanță să minimizeze fereastra actuală sau să facă clic pe butonul de sporire a privilegiilor din fereastra de gestionare a conexiunilor. Pentru a evita această problemă, recomandăm instalarea software-ului pe dispozitivul la distanță."), ("Disconnected", "Deconectat"), ("Other", "Altele"), ("Confirm before closing multiple tabs", "Confirmă înainte de a închide mai multe file"), - ("Keyboard Settings", "Configurare tastatură"), + ("Keyboard Settings", "Setări tastatură"), ("Full Access", "Acces total"), ("Screen Share", "Partajare ecran"), ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland necesită Ubuntu 21.04 sau o versiune superioară."), @@ -397,126 +397,126 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("This PC", "Acest PC"), ("or", "sau"), ("Continue with", "Continuă cu"), - ("Elevate", "Sporește"), + ("Elevate", "Sporește privilegii"), ("Zoom cursor", "Cursor lupă"), - ("Accept sessions via password", "Acceptă sesiunile folosind parola"), - ("Accept sessions via click", "Acceptă sesiunile cu un clic de confirmare"), - ("Accept sessions via both", "Acceptă sesiunile folosind ambele moduri"), + ("Accept sessions via password", "Acceptă începerea sesiunii folosind parola"), + ("Accept sessions via click", "Acceptă începerea sesiunii dând clic"), + ("Accept sessions via both", "Acceptă începerea sesiunii folosind ambele moduri"), ("Please wait for the remote side to accept your session request...", "Așteaptă ca solicitarea ta de conectare la distanță să fie acceptată..."), ("One-time Password", "Parolă unică"), ("Use one-time password", "Folosește parola unică"), ("One-time password length", "Lungimea parolei unice"), - ("Request access to your device", "Solicită acces la dispozitivul tău"), + ("Request access to your device", "Solicitare de acces la dispozitivul tău"), ("Hide connection management window", "Ascunde fereastra de gestionare a conexiunilor"), ("hide_cm_tip", "Permite ascunderea ferestrei de gestionare doar dacă accepți începerea sesiunilor folosind parola permanentă"), - ("wayland_experiment_tip", ""), - ("Right click to select tabs", ""), - ("Skipped", ""), - ("Add to Address Book", ""), - ("Group", ""), - ("Search", ""), - ("Closed manually by web console", ""), - ("Local keyboard type", ""), - ("Select local keyboard type", ""), - ("software_render_tip", ""), - ("Always use software rendering", ""), - ("config_input", ""), - ("config_microphone", ""), - ("request_elevation_tip", ""), - ("Wait", ""), - ("Elevation Error", ""), - ("Ask the remote user for authentication", ""), - ("Choose this if the remote account is administrator", ""), - ("Transmit the username and password of administrator", ""), - ("still_click_uac_tip", ""), - ("Request Elevation", ""), - ("wait_accept_uac_tip", ""), - ("Elevate successfully", ""), - ("uppercase", ""), - ("lowercase", ""), - ("digit", ""), - ("special character", ""), - ("length>=8", ""), - ("Weak", ""), - ("Medium", ""), - ("Strong", ""), - ("Switch Sides", ""), - ("Please confirm if you want to share your desktop?", ""), - ("Display", ""), - ("Default View Style", ""), - ("Default Scroll Style", ""), - ("Default Image Quality", ""), - ("Default Codec", ""), - ("Bitrate", ""), - ("FPS", ""), - ("Auto", ""), - ("Other Default Options", ""), - ("Voice call", ""), - ("Text chat", ""), - ("Stop voice call", ""), - ("relay_hint_tip", ""), - ("Reconnect", ""), - ("Codec", ""), - ("Resolution", ""), - ("No transfers in progress", ""), - ("Set one-time password length", ""), - ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), - ("RDP Settings", ""), - ("Sort by", ""), - ("New Connection", ""), - ("Restore", ""), - ("Minimize", ""), - ("Maximize", ""), - ("Your Device", ""), - ("empty_recent_tip", ""), - ("empty_favorite_tip", ""), - ("empty_lan_tip", ""), - ("empty_address_book_tip", ""), - ("eg: admin", ""), - ("Empty Username", ""), - ("Empty Password", ""), - ("Me", ""), - ("identical_file_tip", ""), - ("show_monitors_tip", ""), - ("View Mode", ""), - ("login_linux_tip", ""), - ("verify_rustdesk_password_tip", ""), - ("remember_account_tip", ""), - ("os_account_desk_tip", ""), - ("OS Account", ""), - ("another_user_login_title_tip", ""), - ("another_user_login_text_tip", ""), - ("xorg_not_found_title_tip", ""), - ("xorg_not_found_text_tip", ""), - ("no_desktop_title_tip", ""), - ("no_desktop_text_tip", ""), - ("No need to elevate", ""), - ("System Sound", ""), - ("Default", ""), - ("New RDP", ""), - ("Fingerprint", ""), - ("Copy Fingerprint", ""), - ("no fingerprints", ""), - ("Select a peer", ""), - ("Select peers", ""), - ("Plugins", ""), - ("Uninstall", ""), - ("Update", ""), - ("Enable", ""), - ("Disable", ""), - ("Options", ""), - ("resolution_original_tip", ""), - ("resolution_fit_local_tip", ""), - ("resolution_custom_tip", ""), - ("Collapse toolbar", ""), - ("Accept and Elevate", ""), - ("accept_and_elevate_btn_tooltip", ""), - ("clipboard_wait_response_timeout_tip", ""), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), - ("logout_tip", ""), + ("wayland_experiment_tip", "Wayland este acceptat doar într-o formă experimentală. Folosește X11 dacă nu ai nevoie de acces supravegheat."), + ("Right click to select tabs", "Dă clic dreapta pentru a selecta file"), + ("Skipped", "Ignorat"), + ("Add to Address Book", "Adaugă la agendă"), + ("Group", "Grup"), + ("Search", "Caută"), + ("Closed manually by web console", "Conexiune închisă manual de consola web"), + ("Local keyboard type", "Tastatură locală"), + ("Select local keyboard type", "Selectează tastatura locală"), + ("software_render_tip", "Dacă ai o placă video Nvidia și folosești Linux, iar fereastra cu conexiunea la distanță se închide imediat după conectare, îți sugerăm să instalezi driverul gratuit Nouveau și să folosești randarea de software. Este necesară repornirea."), + ("Always use software rendering", "Utilizează mereu randarea de software"), + ("config_input", "Pentru a controla desktopul la distanță folosind tastatura, trebuie să acorzi RustDesk permisiunea Monitorizare intrare"), + ("config_microphone", "Pentru a desfășura un apel vocal, este nevoie să acorzi RustDesk permisiunea Înregistrare audio."), + ("request_elevation_tip", "Poți solicita sporirea privilegiilor și dacă este cineva la desktopul la distanță."), + ("Wait", "În curs..."), + ("Elevation Error", "Eroare la sporirea privilegiilor"), + ("Ask the remote user for authentication", "Solicită utilizatorului de la distanță să se autentifice"), + ("Choose this if the remote account is administrator", "Alege asta dacă contul la distanță este un cont de administrator"), + ("Transmit the username and password of administrator", "Transmite numele de utilizator și parola administratorului"), + ("still_click_uac_tip", "Este necesar ca utilizatorul la distanță să confirme în fereastra CCU din RustDesk care rulează."), + ("Request Elevation", "Solicită sporirea privilegiilor"), + ("wait_accept_uac_tip", "Așteaptă ca utilizatorul la distanță să accepte dialogul CCU."), + ("Elevate successfully", "Sporirea privilegiilor realizată cu succes"), + ("uppercase", "majuscule"), + ("lowercase", "minuscule"), + ("digit", "cifre"), + ("special character", "caractere speciale"), + ("length>=8", "lungime>=8"), + ("Weak", "Slabă"), + ("Medium", "Medie"), + ("Strong", "Puternică"), + ("Switch Sides", "Inversează controlul"), + ("Please confirm if you want to share your desktop?", "Confirmi că dorești să îți partajezi desktopul?"), + ("Display", "Afișare"), + ("Default View Style", "Stilul implicit de vizualizare"), + ("Default Scroll Style", "Stilul implicit de derulare"), + ("Default Image Quality", "Calitatea implicită a imaginii"), + ("Default Codec", "Codec implicit"), + ("Bitrate", "Rată de biți"), + ("FPS", "FPS"), + ("Auto", "Auto"), + ("Other Default Options", "Alte opțiuni implicite"), + ("Voice call", "Apel vocal"), + ("Text chat", "Conversație text"), + ("Stop voice call", "Încheie apel vocal"), + ("relay_hint_tip", "Este posibil să nu te poți conecta direct; poți încerca să te conectezi prin retransmisie. De asemenea, dacă dorești să te conectezi direct prin retransmisie, poți adăuga sufixul „/r” la ID sau să bifezi opțiunea Conectează-te mereu prin retransmisie."), + ("Reconnect", "Reconectează-te"), + ("Codec", "Codec"), + ("Resolution", "Rezoluție"), + ("No transfers in progress", "Niciun transfer nu este în desfășurare"), + ("Set one-time password length", "Definește lungimea parolei unice"), + ("install_cert_tip", "Instalează certificatul RustDesk"), + ("comfirm_install_cert_tip", "Acesta este un certificat de testare RustDesk și este de încredere. Certificatul va fi utilizat pentru a acorda încredere și instala drivere RustDesk atunci când este necesar."), + ("RDP Settings", "Setări RDP"), + ("Sort by", "Sortează după"), + ("New Connection", "Conexiune nouă"), + ("Restore", "Restaurează"), + ("Minimize", "Minimizează"), + ("Maximize", "Maximizează"), + ("Your Device", "Dispozitivul tău"), + ("empty_recent_tip", "Hopa! Nu există nicio sesiune recentă.\nPoate ar trebui să plănuiești una chiar acum!"), + ("empty_favorite_tip", "Încă nu ai niciun dispozitiv pereche favorit?\nHai să-ți găsim pe cineva cu care să te conectezi, iar apoi îi poți adăuga dispozitivul la Favorite!"), + ("empty_lan_tip", "Of! S-ar părea că încă nu am descoperit niciun dispozitiv."), + ("empty_address_book_tip", "Măi să fie! Se pare că deocamdată nu figurează niciun dispozitiv în agenda ta."), + ("eg: admin", "ex: admin"), + ("Empty Username", "Nume utilizator nespecificat"), + ("Empty Password", "Parolă nespecificată"), + ("Me", "Eu"), + ("identical_file_tip", "Acest fișier este identic cu cel al dispozitivului pereche."), + ("show_monitors_tip", "Afișează monitoare în bara de instrumente"), + ("View Mode", "Mod vizualizare"), + ("login_linux_tip", "Este necesar să te conectezi la contul de Linux de la distanță pentru a începe o sesiune cu un desktop care folosește X11"), + ("verify_rustdesk_password_tip", "Verifică parola RustDesk"), + ("remember_account_tip", "Reține contul"), + ("os_account_desk_tip", "Acest cont este utilizat pentru conectarea la sistemul de operare la distanță și începerea sesiunii cu desktopul în modul fără afișaj."), + ("OS Account", "Cont OS"), + ("another_user_login_title_tip", "Un alt utilizator este deja conectat"), + ("another_user_login_text_tip", "Deconectare"), + ("xorg_not_found_title_tip", "Xorg nu a fost găsit"), + ("xorg_not_found_text_tip", "Instalează Xorg"), + ("no_desktop_title_tip", "Nu este disponibil niciun mediu desktop"), + ("no_desktop_text_tip", "Instalează mediul desktop GNOME"), + ("No need to elevate", "Nu sunt necesare permisiuni de administrator"), + ("System Sound", "Sunet sistem"), + ("Default", "Implicit"), + ("New RDP", "RDP nou"), + ("Fingerprint", "Amprentă digitală"), + ("Copy Fingerprint", "Copiază amprenta digitală"), + ("no fingerprints", "Nicio amprentă digitală"), + ("Select a peer", "Selectează un dispozitiv pereche"), + ("Select peers", "Selectează dispozitive pereche"), + ("Plugins", "Pluginuri"), + ("Uninstall", "Dezinstalează"), + ("Update", "Actualizează"), + ("Enable", "Activează"), + ("Disable", "Dezactivează"), + ("Options", "Opțiuni"), + ("resolution_original_tip", "Rezoluție originală"), + ("resolution_fit_local_tip", "Adaptează la rezoluția locală"), + ("resolution_custom_tip", "Rezoluție personalizată"), + ("Collapse toolbar", "Restrânge bara de instrumente"), + ("Accept and Elevate", "Acceptă și sporește privilegii"), + ("accept_and_elevate_btn_tooltip", "Acceptă conectarea și sporește privilegiile CCU."), + ("clipboard_wait_response_timeout_tip", "Procesul a expirat așteptând un răspuns la copiere"), + ("Incoming connection", "Conexiune de intrare"), + ("Outgoing connection", "Conexiune de ieșire"), + ("Exit", "Ieși"), + ("Open", "Deschide"), + ("logout_tip", "Sigur vrei să te deconectezi?"), ].iter().cloned().collect(); } From 5dbfa71b2c9b585e308df72550ce750170f6afbc Mon Sep 17 00:00:00 2001 From: Yevhen Date: Wed, 19 Jul 2023 23:38:51 +0300 Subject: [PATCH 161/612] Update ua.rs Update Ukrainian UI translation --- src/lang/ua.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 3c362bf03..e92a7d1b4 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Імʼя користувача відсутнє"), ("Password missed", "Забули пароль"), ("Wrong credentials", "Неправильні дані"), - ("The verification code is incorrect or has expired", ""), + ("The verification code is incorrect or has expired", "Код підтвердження некоректний або протермінований"), ("Edit Tag", "Редагувати тег"), ("Unremember Password", "Не зберігати пароль"), ("Favorites", "Вибране"), @@ -289,7 +289,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("android_service_will_start_tip", "Увімкнення захоплення екрана автоматично запускає службу, дозволяючи іншим пристроям запитувати підключення до вашого пристрою."), ("android_stop_service_tip", "Зупинка служби автоматично завершить всі встановлені зʼєднання."), ("android_version_audio_tip", "Поточна версія Android не підтримує захоплення звуку, оновіть її до Android 10 або вище."), - ("android_start_service_tip", "Натисніть [Запустити службу] або увімкніть дозвіл на [Захоплення екрана], шоб запустити службу спільного доступу до екрана."), + ("android_start_service_tip", "Натисніть [Запустити службу] або увімкніть дозвіл на [Захоплення екрана], щоб запустити службу спільного доступу до екрана."), ("android_permission_may_not_change_tip", "Дозволи для встановлених зʼєднань можуть не змінитися миттєво аж до перепідключення."), ("Account", "Акаунт"), ("Overwrite", "Перезаписати"), @@ -451,17 +451,17 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("FPS", "FPS"), ("Auto", "Авто"), ("Other Default Options", "Інші типові параметри"), - ("Voice call", "Голосовий дзвінок"), + ("Voice call", "Голосовий виклик"), ("Text chat", "Текстовий чат"), - ("Stop voice call", "Покласти слухавку"), - ("relay_hint_tip", "Якщо відсутня можливості підключитись напряму, ви можете спробувати підключення по реле. \nТакож, якщо ви хочете відразу використовувати реле, можна додати суфікс \"/r\" до ID, або ж вибрати опцію \"Завжди підключатися через реле\" в картці вузла."), + ("Stop voice call", "Завершити голосовий виклик"), + ("relay_hint_tip", "Якщо відсутня можливості підключитись напряму, ви можете спробувати підключення по реле. \nТакож, якщо ви хочете відразу використовувати реле, можна додати суфікс \"/r\" до ID, або ж вибрати опцію \"Завжди підключатися через реле\" в картці нещодавніх сеансів."), ("Reconnect", "Перепідключитися"), ("Codec", "Кодек"), ("Resolution", "Роздільна здатність"), ("No transfers in progress", "Наразі нічого не пересилається"), ("Set one-time password length", "Вказати довжину одноразового пароля"), - ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("install_cert_tip", "Додати сертифікат Rustdesk"), + ("comfirm_install_cert_tip", "Це сертифікат тестування Rustdesk, якому можна довіряти. За потреби сертифікат буде використано для погодження та встановлення драйверів Rustdesk."), ("RDP Settings", "Налаштування RDP"), ("Sort by", "Сортувати за"), ("New Connection", "Нове підключення"), @@ -513,10 +513,10 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "Погодитись та розширити права"), ("accept_and_elevate_btn_tooltip", "Погодити підключення та розширити дозволи UAC."), ("clipboard_wait_response_timeout_tip", "Вийшов час очікування копіювання."), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), - ("logout_tip", ""), + ("Incoming connection", "Вхідне підключення"), + ("Outgoing connection", "Вихідне підключення"), + ("Exit", "Вийти"), + ("Open", "Відкрити"), + ("logout_tip", "Ви впевнені, що хочете вилогуватися?"), ].iter().cloned().collect(); } From 2ec773e9bf062cef84e8bec9e6af7825d2cae34e Mon Sep 17 00:00:00 2001 From: rustdesk Date: Thu, 20 Jul 2023 10:40:26 +0800 Subject: [PATCH 162/612] issue #5062 --- src/rendezvous_mediator.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index c0f02f2e3..30cf65d73 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -504,7 +504,8 @@ async fn direct_server(server: ServerPtr) { let mut listener = None; let mut port = 0; loop { - let disabled = Config::get_option("direct-server").is_empty(); + let disabled = Config::get_option("direct-server").is_empty() + || !Config::get_option("stop-service").is_empty(); if !disabled && listener.is_none() { port = get_direct_port(); match hbb_common::tcp::listen_any(port as _).await { From ef615baaebeb580d6d6d07dad171b6c80f7a9fae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C4=83lina-Ioana=20Popa?= Date: Thu, 20 Jul 2023 12:43:05 +0200 Subject: [PATCH 163/612] update romanian language --- src/lang/ro.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 032837575..e2fb9003b 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -4,7 +4,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Status", "Stare"), ("Your Desktop", "Desktopul tău"), ("desk_tip", "Desktopul tău poate fi accesat folosind ID-ul și parola de mai jos."), - ("Password", "Parola"), + ("Password", "Parolă"), ("Ready", "Pregătit"), ("Established", "Stabilit"), ("connecting_status", "În curs de conectare la rețeaua RustDesk..."), @@ -114,18 +114,18 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Speed", "Viteză"), ("Custom Image Quality", "Setează calitatea imaginii"), ("Privacy mode", "Mod privat"), - ("Block user input", "Blochează utilizator"), - ("Unblock user input", "Deblochează utilizator"), + ("Block user input", "Blochează intervenție utilizator"), + ("Unblock user input", "Deblochează intervenție utilizator"), ("Adjust Window", "Ajustează fereastra"), ("Original", "Dimensiune originală"), ("Shrink", "Micșorează"), ("Stretch", "Extinde"), ("Scrollbar", "Bară de derulare"), ("ScrollAuto", "Derulare automată"), - ("Good image quality", "Calitate bună"), - ("Balanced", "Calitate normală"), - ("Optimize reaction time", "Optimizează timpul de reacție"), - ("Custom", "Personalizează"), + ("Good image quality", "Calitate bună a imaginii"), + ("Balanced", "Calitate normală a imaginii"), + ("Optimize reaction time", "Timp de reacție optimizat"), + ("Custom", "Personalizat"), ("Show remote cursor", "Afișează cursor la distanță"), ("Show quality monitor", "Afișează detalii despre conexiune"), ("Disable clipboard", "Dezactivează clipboard"), @@ -144,7 +144,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Failed to connect via relay server", "Conectare prin intermediul serverului de retransmisie eșuată"), ("Failed to make direct connection to remote desktop", "Imposibil de stabilit o conexiune directă cu desktopul la distanță"), ("Set Password", "Setează parola"), - ("OS Password", "Parolă OS"), + ("OS Password", "Parolă sistem"), ("install_tip", "Din cauza restricțiilor CCU, este posibil ca RustDesk să nu funcționeze corespunzător. Pentru a evita acest lucru, dă clic pe butonul de mai jos pentru a instala RustDesk."), ("Click to upgrade", "Dă clic pentru a face upgrade"), ("Click to download", "Dă clic pentru a descărca"), @@ -172,7 +172,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Local Port", "Port local"), ("Local Address", "Adresă locală"), ("Change Local Port", "Modifică port local"), - ("setup_server_tip", "pentru o conexiune mai rapidă, îți poți configura propriul server."), + ("setup_server_tip", "Pentru o conexiune mai rapidă, îți poți configura propriul server."), ("Too short, at least 6 characters.", "Prea scurtă; trebuie cel puțin 6 caractere."), ("The confirmation is not identical.", "Cele două intrări nu corespund."), ("Permissions", "Permisiuni"), @@ -182,7 +182,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Allow using keyboard and mouse", "Permite utilizarea tastaturii și a mouse-ului"), ("Allow using clipboard", "Permite utilizarea clipboardului"), ("Allow hearing sound", "Permite auzirea sunetului"), - ("Allow file copy and paste", "Permite copierea/lipirea fișierelor"), + ("Allow file copy and paste", "Permite copierea și lipirea fișierelor"), ("Connected", "Conectat"), ("Direct and encrypted connection", "Conexiune directă criptată"), ("Relayed and encrypted connection", "Conexiune retransmisă criptată"), @@ -192,7 +192,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Enter your password", "Introdu parola"), ("Logging in...", "Se conectează..."), ("Enable RDP session sharing", "Activează partajarea sesiunii RDP"), - ("Auto Login", "Conectare automată (valid doar dacă funcția de blocare după deconectare este activă)"), + ("Auto Login", "Conectare automată (validă doar dacă opțiunea Blocare după deconectare este selectată)"), ("Enable Direct IP Access", "Activează accesul direct cu IP"), ("Rename", "Redenumește"), ("Space", "Spațiu"), @@ -264,8 +264,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Mouse Wheel", "Rotiță mouse"), ("Two-Finger Move", "Mișcă cu două degete"), ("Canvas Move", "Mută ecran"), - ("Pinch to Zoom", "Apropie degetele pentru zoom"), - ("Canvas Zoom", "Zoom ecran"), + ("Pinch to Zoom", "Apropie degetele pentru a mări"), + ("Canvas Zoom", "Mărire ecran"), ("Reset canvas", "Reinițializează ecranul"), ("No permission of file transfer", "Nicio permisiune pentru transferul de fișiere"), ("Note", "Reține"), @@ -448,7 +448,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Default Image Quality", "Calitatea implicită a imaginii"), ("Default Codec", "Codec implicit"), ("Bitrate", "Rată de biți"), - ("FPS", "FPS"), + ("FPS", "CPS"), ("Auto", "Auto"), ("Other Default Options", "Alte opțiuni implicite"), ("Voice call", "Apel vocal"), @@ -470,7 +470,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Maximize", "Maximizează"), ("Your Device", "Dispozitivul tău"), ("empty_recent_tip", "Hopa! Nu există nicio sesiune recentă.\nPoate ar trebui să plănuiești una chiar acum!"), - ("empty_favorite_tip", "Încă nu ai niciun dispozitiv pereche favorit?\nHai să-ți găsim pe cineva cu care să te conectezi, iar apoi îi poți adăuga dispozitivul la Favorite!"), + ("empty_favorite_tip", "Încă nu ai niciun dispozitiv pereche favorit?\nHai să-ți găsim pe cineva cu care să te conectezi, iar apoi poți adăuga dispozitivul la Favorite!"), ("empty_lan_tip", "Of! S-ar părea că încă nu am descoperit niciun dispozitiv."), ("empty_address_book_tip", "Măi să fie! Se pare că deocamdată nu figurează niciun dispozitiv în agenda ta."), ("eg: admin", "ex: admin"), @@ -511,7 +511,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("resolution_custom_tip", "Rezoluție personalizată"), ("Collapse toolbar", "Restrânge bara de instrumente"), ("Accept and Elevate", "Acceptă și sporește privilegii"), - ("accept_and_elevate_btn_tooltip", "Acceptă conectarea și sporește privilegiile CCU."), + ("accept_and_elevate_btn_tooltip", "Acceptă conectarea și sporește privilegiile CCU"), ("clipboard_wait_response_timeout_tip", "Procesul a expirat așteptând un răspuns la copiere"), ("Incoming connection", "Conexiune de intrare"), ("Outgoing connection", "Conexiune de ieșire"), From 893a88bb02ec680f7272bd7c6251703de8fc1636 Mon Sep 17 00:00:00 2001 From: "Miguel F. G" <116861809+flusheDData@users.noreply.github.com> Date: Fri, 21 Jul 2023 16:19:16 +0200 Subject: [PATCH 164/612] Update es.rs New terms added --- src/lang/es.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lang/es.rs b/src/lang/es.rs index 0c1cf113f..7e4809bfe 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -512,11 +512,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Collapse toolbar", "Contraer barra de herramientas"), ("Accept and Elevate", "Aceptar y Elevar"), ("accept_and_elevate_btn_tooltip", "Aceptar la conexión y elevar permisos UAC."), - ("clipboard_wait_response_timeout_tip", ""), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), - ("logout_tip", ""), + ("clipboard_wait_response_timeout_tip", "Tiempo de espera para copia agotado."), + ("Incoming connection", "Conexión entrante"), + ("Outgoing connection", "Conexión saliente"), + ("Exit", "Salir"), + ("Open", "Abrir"), + ("logout_tip", "¿Seguro que deseas cerrar sesión?"), ].iter().cloned().collect(); } From 07137ac5669caaffb53ce8824eca6c969250a8ac Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 22 Jul 2023 14:30:47 +0800 Subject: [PATCH 165/612] sys info --- Cargo.lock | 4 +- libs/hbb_common/Cargo.toml | 2 +- src/common.rs | 33 +++++++++++- src/core_main.rs | 6 ++- src/hbbs_http/sync.rs | 104 +++++++++++++++++++++++-------------- src/rendezvous_mediator.rs | 4 +- 6 files changed, 108 insertions(+), 45 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 42d0590ba..43de5e23c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5841,9 +5841,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.29.0" +version = "0.29.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02f1dc6930a439cc5d154221b5387d153f8183529b07c19aca24ea31e0a167e1" +checksum = "c7cb97a5a85a136d84e75d5c3cf89655090602efb1be0d8d5337b7e386af2908" dependencies = [ "cfg-if 1.0.0", "core-foundation-sys 0.8.4", diff --git a/libs/hbb_common/Cargo.toml b/libs/hbb_common/Cargo.toml index 74a2d40cc..4d008a866 100644 --- a/libs/hbb_common/Cargo.toml +++ b/libs/hbb_common/Cargo.toml @@ -37,11 +37,11 @@ libc = "0.2" dlopen = "0.1" toml = "0.7" uuid = { version = "1.3", features = ["v4"] } +sysinfo = "0.29" [target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies] mac_address = "1.1" machine-uid = { git = "https://github.com/21pages/machine-uid" } -sysinfo = "0.29" [features] quic = [] diff --git a/src/common.rs b/src/common.rs index 8f84509ae..74e8dc591 100644 --- a/src/common.rs +++ b/src/common.rs @@ -625,6 +625,12 @@ pub async fn get_rendezvous_server(ms_timeout: u64) -> (String, Vec, boo 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; + #[cfg(windows)] + if let Ok(lic) = crate::platform::get_license_from_exe_name() { + if !lic.host.is_empty() { + a = lic.host; + } + } let mut b: Vec = b .drain(..) .map(|x| socket_client::check_port(x, config::RENDEZVOUS_PORT)) @@ -743,6 +749,29 @@ pub fn hostname() -> String { return DEVICE_NAME.lock().unwrap().clone(); } +#[inline] +pub fn get_sysinfo() -> serde_json::Value { + use hbb_common::sysinfo::{CpuExt, System, SystemExt}; + let system = System::new_all(); + let memory = system.total_memory(); + let memory = (memory as f64 / 1024. / 1024. / 1024. * 100 as f64).round() / 100.; + let cpus = system.cpus(); + let cpu_name = cpus.first().map(|x| x.brand()).unwrap_or_default(); + let cpu_name = cpu_name.trim_end(); + let cpu_freq = cpus.first().map(|x| x.frequency()).unwrap_or_default(); + let num_cpus = num_cpus::get(); + let num_pcpus = num_cpus::get_physical(); + let os = system.name().unwrap_or(system.distribution_id()); + let os = format!("{} {}", os, system.os_version().unwrap_or_default()); + let hostname = system.host_name(); + serde_json::json!({ + "cpu": format!("{cpu_name}, {cpu_freq}MHz, {num_cpus}/{num_pcpus} cores"), + "memory": format!("{memory}GB"), + "os": os, + "hostname": hostname, + }) +} + #[inline] pub fn check_port(host: T, port: i32) -> String { hbb_common::socket_client::check_port(host, port) @@ -984,7 +1013,9 @@ pub fn decode64>(input: T) -> Result, base64::DecodeError pub async fn get_key(sync: bool) -> String { #[cfg(windows)] if let Ok(lic) = crate::platform::windows::get_license_from_exe_name() { - return lic.key; + if !lic.key.is_empty() { + return lic.key; + } } #[cfg(target_os = "ios")] let mut key = Config::get_option("key"); diff --git a/src/core_main.rs b/src/core_main.rs index e261ed5b2..cc0a4834f 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -280,7 +280,11 @@ pub fn core_main() -> Option> { { // arg: starting with `host=`, e.g. `host=127.0.0.1,api=https://test.com,key=asfs`, // or the filename (without ext) used in renaming exe. - let name = format!("{}.exe", args[1]); + let name = if args[1].ends_with(".exe") { + args[1].to_owned() + } else { + format!("{}.exe", args[1]) + }; if let Ok(lic) = crate::license::get_license_from_string(&name) { if !lic.host.is_empty() { crate::ui_interface::set_option("key".into(), lic.key); diff --git a/src/hbbs_http/sync.rs b/src/hbbs_http/sync.rs index 00fbc9933..e3df8f7d5 100644 --- a/src/hbbs_http/sync.rs +++ b/src/hbbs_http/sync.rs @@ -10,6 +10,7 @@ use serde::{Deserialize, Serialize}; use serde_json::{json, Value}; const TIME_HEARTBEAT: Duration = Duration::from_secs(15); +const UPLOAD_SYSINFO_TIMEOUT: Duration = Duration::from_secs(120); const TIME_CONN: Duration = Duration::from_secs(3); #[cfg(not(any(target_os = "ios")))] @@ -45,55 +46,80 @@ pub struct StrategyOptions { #[cfg(not(any(target_os = "ios")))] #[tokio::main(flavor = "current_thread")] async fn start_hbbs_sync_async() { - tokio::spawn(async move { - let mut interval = tokio::time::interval_at(Instant::now() + TIME_CONN, TIME_CONN); - let mut last_send = Instant::now(); - loop { - tokio::select! { - _ = interval.tick() => { - let url = heartbeat_url(); - if !url.is_empty() { - let conns = Connection::alive_conns(); - if conns.is_empty() && last_send.elapsed() < TIME_HEARTBEAT { - continue; + let mut interval = tokio::time::interval_at(Instant::now() + TIME_CONN, TIME_CONN); + let mut last_sent: Option = None; + let mut info_uploaded: (bool, String, Option) = (false, "".to_owned(), None); + loop { + tokio::select! { + _ = interval.tick() => { + let url = heartbeat_url(); + if url.is_empty() { + continue; + } + if !Config::get_option("stop-service").is_empty() { + continue; + } + let conns = Connection::alive_conns(); + if info_uploaded.0 && url != info_uploaded.1 { + info_uploaded.0 = false; + } + if !info_uploaded.0 && info_uploaded.2.map(|x| x.elapsed() >= UPLOAD_SYSINFO_TIMEOUT).unwrap_or(true){ + let mut v = crate::get_sysinfo(); + v["verion"] = json!(crate::VERSION); + v["id"] = json!(Config::get_id()); + v["uuid"] = json!(crate::encode64(hbb_common::get_uuid())); + match crate::post_request(url.replace("heartbeat", "sysinfo"), v.to_string(), "").await { + Ok(x) => { + if x == "SYSINFO_UPDATED" { + info_uploaded = (true, url.clone(), None); + hbb_common::log::info!("sysinfo updated"); + } else if x == "ID_NOT_FOUND" { + info_uploaded.2 = None; // next heartbeat will upload sysinfo again + } else { + info_uploaded.2 = Some(Instant::now()); + } } - last_send = Instant::now(); - let mut v = Value::default(); - v["id"] = json!(Config::get_id()); - v["ver"] = json!(hbb_common::get_version_number(crate::VERSION)); - if !conns.is_empty() { - v["conns"] = json!(conns); + _ => { + info_uploaded.2 = Some(Instant::now()); } - let modified_at = LocalConfig::get_option("strategy_timestamp").parse::().unwrap_or(0); - v["modified_at"] = json!(modified_at); - if let Ok(s) = crate::post_request(url.clone(), v.to_string(), "").await { - if let Ok(mut rsp) = serde_json::from_str::>(&s) { - if let Some(conns) = rsp.remove("disconnect") { - if let Ok(conns) = serde_json::from_value::>(conns) { - SENDER.lock().unwrap().send(conns).ok(); - } + } + } + if conns.is_empty() && last_sent.map(|x| x.elapsed() < TIME_HEARTBEAT).unwrap_or(false){ + continue; + } + last_sent = Some(Instant::now()); + let mut v = Value::default(); + v["id"] = json!(Config::get_id()); + v["ver"] = json!(hbb_common::get_version_number(crate::VERSION)); + if !conns.is_empty() { + v["conns"] = json!(conns); + } + let modified_at = LocalConfig::get_option("strategy_timestamp").parse::().unwrap_or(0); + v["modified_at"] = json!(modified_at); + if let Ok(s) = crate::post_request(url.clone(), v.to_string(), "").await { + if let Ok(mut rsp) = serde_json::from_str::>(&s) { + if let Some(conns) = rsp.remove("disconnect") { + if let Ok(conns) = serde_json::from_value::>(conns) { + SENDER.lock().unwrap().send(conns).ok(); } - if let Some(rsp_modified_at) = rsp.remove("modified_at") { - if let Ok(rsp_modified_at) = serde_json::from_value::(rsp_modified_at) { - if rsp_modified_at != modified_at { - LocalConfig::set_option("strategy_timestamp".to_string(), rsp_modified_at.to_string()); - } - } - } - if let Some(strategy) = rsp.remove("strategy") { - if let Ok(strategy) = serde_json::from_value::(strategy) { - handle_config_options(strategy.config_options); - } + } + if let Some(rsp_modified_at) = rsp.remove("modified_at") { + if let Ok(rsp_modified_at) = serde_json::from_value::(rsp_modified_at) { + if rsp_modified_at != modified_at { + LocalConfig::set_option("strategy_timestamp".to_string(), rsp_modified_at.to_string()); } } } + if let Some(strategy) = rsp.remove("strategy") { + if let Ok(strategy) = serde_json::from_value::(strategy) { + handle_config_options(strategy.config_options); + } + } } } } } - }) - .await - .ok(); + } } fn heartbeat_url() -> String { diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 30cf65d73..4b2e8bbc6 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -89,7 +89,9 @@ impl RendezvousMediator { for host in servers.clone() { let server = server.clone(); futs.push(tokio::spawn(async move { - allow_err!(Self::start(server, host).await); + if let Err(err) = Self::start(server, host).await { + log::error!("rendezvous mediator error: {err}"); + } // SHOULD_EXIT here is to ensure once one exits, the others also exit. SHOULD_EXIT.store(true, Ordering::SeqCst); })); From ac9e4a5582f582990377c167b6f4addd8b8f0364 Mon Sep 17 00:00:00 2001 From: "Miguel F. G" <116861809+flusheDData@users.noreply.github.com> Date: Sat, 22 Jul 2023 10:27:00 +0200 Subject: [PATCH 166/612] Update es.rs --- src/lang/es.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lang/es.rs b/src/lang/es.rs index 7e4809bfe..7f9361eb4 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -37,19 +37,19 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Clipboard is empty", "El portapapeles está vacío"), ("Stop service", "Detener servicio"), ("Change ID", "Cambiar ID"), - ("Your new ID", ""), - ("length %min% to %max%", ""), - ("starts with a letter", ""), - ("allowed characters", ""), + ("Your new ID", "Tu nueva ID"), + ("length %min% to %max%", "de %min% a %max% de longitud"), + ("starts with a letter", "comenzar con una letra"), + ("allowed characters", "Caracteres permitidos"), ("id_change_tip", "Solo puedes usar caracteres a-z, A-Z, 0-9 e _ (guion bajo). El primer carácter debe ser a-z o A-Z. La longitud debe estar entre 6 y 16 caracteres."), ("Website", "Sitio web"), ("About", "Acerca de"), ("Slogan_tip", "¡Hecho con corazón en este mundo caótico!"), ("Privacy Statement", "Declaración de privacidad"), ("Mute", "Silenciar"), - ("Build Date", ""), + ("Build Date", "Fecha de compilación"), ("Version", ""), - ("Home", ""), + ("Home", "Inicio"), ("Audio Input", "Entrada de audio"), ("Enhancements", "Mejoras"), ("Hardware Codec", "Códec de hardware"), From c763478f66cd43446373d0261fd3d42c83721e5e Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 22 Jul 2023 19:21:12 +0800 Subject: [PATCH 167/612] fix typo and os info --- src/common.rs | 4 ++-- src/hbbs_http/sync.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common.rs b/src/common.rs index 74e8dc591..d42e27285 100644 --- a/src/common.rs +++ b/src/common.rs @@ -761,8 +761,8 @@ pub fn get_sysinfo() -> serde_json::Value { let cpu_freq = cpus.first().map(|x| x.frequency()).unwrap_or_default(); let num_cpus = num_cpus::get(); let num_pcpus = num_cpus::get_physical(); - let os = system.name().unwrap_or(system.distribution_id()); - let os = format!("{} {}", os, system.os_version().unwrap_or_default()); + let os = system.distribution_id(); + let os = format!("{} / {}", os, system.long_os_version().unwrap_or_default()); let hostname = system.host_name(); serde_json::json!({ "cpu": format!("{cpu_name}, {cpu_freq}MHz, {num_cpus}/{num_pcpus} cores"), diff --git a/src/hbbs_http/sync.rs b/src/hbbs_http/sync.rs index e3df8f7d5..f30685aea 100644 --- a/src/hbbs_http/sync.rs +++ b/src/hbbs_http/sync.rs @@ -65,7 +65,7 @@ async fn start_hbbs_sync_async() { } if !info_uploaded.0 && info_uploaded.2.map(|x| x.elapsed() >= UPLOAD_SYSINFO_TIMEOUT).unwrap_or(true){ let mut v = crate::get_sysinfo(); - v["verion"] = json!(crate::VERSION); + v["version"] = json!(crate::VERSION); v["id"] = json!(Config::get_id()); v["uuid"] = json!(crate::encode64(hbb_common::get_uuid())); match crate::post_request(url.replace("heartbeat", "sysinfo"), v.to_string(), "").await { From 5662121cdb63c33923a8e33f08a1bded0f9616bf Mon Sep 17 00:00:00 2001 From: mehdi-song Date: Sun, 23 Jul 2023 04:24:50 +0000 Subject: [PATCH 168/612] Update fa.rs --- src/lang/fa.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lang/fa.rs b/src/lang/fa.rs index f745cd486..e5d29558a 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "نام کاربری وجود ندارد"), ("Password missed", "رمزعبور وجود ندارد"), ("Wrong credentials", "اعتبارنامه نادرست است"), - ("The verification code is incorrect or has expired", ""), + ("The verification code is incorrect or has expired", "کد تأیید نادرست است یا منقضی شده است"), ("Edit Tag", "ویرایش برچسب"), ("Unremember Password", "رمز عبور ذخیره نشود"), ("Favorites", "اتصالات دلخواه"), @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "وضوح"), ("No transfers in progress", "هیچ انتقالی در حال انجام نیست"), ("Set one-time password length", "طول رمز یکبار مصرف را تعیین کنید"), - ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("install_cert_tip", "RustDesk نصب گواهی"), + ("comfirm_install_cert_tip", "استفاده خواهد شد RustDesk است و شما می توانید به این گواهی اعتماد کنید. این گواهی برای اعتماد و نصب درایورهای RustDesk این گواهینامه یک گواهی تست"), ("RDP Settings", "RDP تنظیمات"), ("Sort by", "مرتب سازی بر اساس"), ("New Connection", "اتصال جدید"), @@ -517,6 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "اتصال خروجی"), ("Exit", "خروج"), ("Open", "باز کردن"), - ("logout_tip", ""), + ("logout_tip", "آیا برای خارج شدن مطمئن هستید؟"), ].iter().cloned().collect(); } From b80051bb35d6088e4befa7e3778732203e871a13 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 23 Jul 2023 17:07:30 +0800 Subject: [PATCH 169/612] fix, settings on main window Signed-off-by: dignow --- flutter/lib/common.dart | 13 + .../desktop/pages/desktop_setting_page.dart | 682 +++++++++--------- src/flutter_ffi.rs | 8 + 3 files changed, 347 insertions(+), 356 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 4d25e6d0d..71194b42a 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1269,6 +1269,19 @@ String bool2option(String option, bool b) { return res; } +mainSetBoolOption(String key, bool value) async { + String v = bool2option(key, value); + await bind.mainSetOption(key: key, value: v); +} + +Future mainGetBoolOption(String key) async { + return option2bool(key, await bind.mainGetOption(key: key)); +} + +bool mainGetBoolOptionSync(String key) { + return option2bool(key, bind.mainGetOptionSync(key: key)); +} + Future matchPeer(String searchText, Peer peer) async { if (searchText.isEmpty) { return true; diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 1ff8bc09e..d5a7c58fc 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -385,20 +385,17 @@ class _GeneralState extends State<_General> { Widget record(BuildContext context) { return futureBuilder(future: () async { - String customDirectory = - await bind.mainGetOption(key: 'video-save-directory'); String defaultDirectory = await bind.mainDefaultVideoSaveDirectory(); - String dir; - if (customDirectory.isNotEmpty) { - dir = customDirectory; - } else { - dir = defaultDirectory; - } // canLaunchUrl blocked on windows portable, user SYSTEM - return {'dir': dir, 'canlaunch': true}; + return {'dir': defaultDirectory, 'canlaunch': true}; }(), hasData: (data) { Map map = data as Map; String dir = map['dir']!; + String customDirectory = + bind.mainGetOptionSync(key: 'video-save-directory'); + if (customDirectory.isNotEmpty) { + dir = customDirectory; + } bool canlaunch = map['canlaunch']! as bool; return _Card(title: 'Recording', children: [ @@ -444,8 +441,7 @@ class _GeneralState extends State<_General> { Widget language() { return futureBuilder(future: () async { String langs = await bind.mainGetLangs(); - String lang = bind.mainGetLocalOption(key: kCommConfKeyLang); - return {'langs': langs, 'lang': lang}; + return {'langs': langs}; }(), hasData: (res) { Map data = res as Map; List langsList = jsonDecode(data['langs']!); @@ -454,7 +450,7 @@ class _GeneralState extends State<_General> { List values = langsMap.values.toList(); keys.insert(0, ''); values.insert(0, translate('Default')); - String currentKey = data['lang']!; + String currentKey = bind.mainGetLocalOption(key: kCommConfKeyLang); if (!keys.contains(currentKey)) { currentKey = ''; } @@ -529,79 +525,75 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin { Widget permissions(context) { bool enabled = !locked; - return futureBuilder(future: () async { - return await bind.mainGetOption(key: 'access-mode'); - }(), hasData: (data) { - String accessMode = data! as String; - _AccessMode mode; - if (accessMode == 'full') { - mode = _AccessMode.full; - } else if (accessMode == 'view') { - mode = _AccessMode.view; - } else { - mode = _AccessMode.custom; - } - String initialKey; - bool? fakeValue; - switch (mode) { - case _AccessMode.custom: - initialKey = ''; - fakeValue = null; - break; - case _AccessMode.full: - initialKey = 'full'; - fakeValue = true; - break; - case _AccessMode.view: - initialKey = 'view'; - fakeValue = false; - break; - } + String accessMode = bind.mainGetOptionSync(key: 'access-mode'); + _AccessMode mode; + if (accessMode == 'full') { + mode = _AccessMode.full; + } else if (accessMode == 'view') { + mode = _AccessMode.view; + } else { + mode = _AccessMode.custom; + } + String initialKey; + bool? fakeValue; + switch (mode) { + case _AccessMode.custom: + initialKey = ''; + fakeValue = null; + break; + case _AccessMode.full: + initialKey = 'full'; + fakeValue = true; + break; + case _AccessMode.view: + initialKey = 'view'; + fakeValue = false; + break; + } - return _Card(title: 'Permissions', children: [ - _ComboBox( - keys: [ - '', - 'full', - 'view', - ], - values: [ - translate('Custom'), - translate('Full Access'), - translate('Screen Share'), - ], - enabled: enabled, - initialKey: initialKey, - onChanged: (mode) async { - await bind.mainSetOption(key: 'access-mode', value: mode); - setState(() {}); - }).marginOnly(left: _kContentHMargin), - Column( - children: [ - _OptionCheckBox(context, 'Enable Keyboard/Mouse', 'enable-keyboard', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox(context, 'Enable Clipboard', 'enable-clipboard', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox( - context, 'Enable File Transfer', 'enable-file-transfer', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox(context, 'Enable Audio', 'enable-audio', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox(context, 'Enable TCP Tunneling', 'enable-tunnel', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox( - context, 'Enable Remote Restart', 'enable-remote-restart', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox( - context, 'Enable Recording Session', 'enable-record-session', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox(context, 'Enable remote configuration modification', - 'allow-remote-config-modification', - enabled: enabled, fakeValue: fakeValue), + return _Card(title: 'Permissions', children: [ + _ComboBox( + keys: [ + '', + 'full', + 'view', ], - ), - ]); - }); + values: [ + translate('Custom'), + translate('Full Access'), + translate('Screen Share'), + ], + enabled: enabled, + initialKey: initialKey, + onChanged: (mode) async { + await bind.mainSetOption(key: 'access-mode', value: mode); + setState(() {}); + }).marginOnly(left: _kContentHMargin), + Column( + children: [ + _OptionCheckBox(context, 'Enable Keyboard/Mouse', 'enable-keyboard', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox(context, 'Enable Clipboard', 'enable-clipboard', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox( + context, 'Enable File Transfer', 'enable-file-transfer', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox(context, 'Enable Audio', 'enable-audio', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox(context, 'Enable TCP Tunneling', 'enable-tunnel', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox( + context, 'Enable Remote Restart', 'enable-remote-restart', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox( + context, 'Enable Recording Session', 'enable-record-session', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox(context, 'Enable remote configuration modification', + 'allow-remote-config-modification', + enabled: enabled, fakeValue: fakeValue), + ], + ), + ]); } Widget password(BuildContext context) { @@ -759,106 +751,94 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin { return [ _OptionCheckBox(context, 'Enable Direct IP Access', 'direct-server', update: update, enabled: !locked), - futureBuilder( - future: () async { - String enabled = await bind.mainGetOption(key: 'direct-server'); - String port = await bind.mainGetOption(key: 'direct-access-port'); - return {'enabled': enabled, 'port': port}; - }(), - hasData: (data) { - bool enabled = - option2bool('direct-server', data['enabled'].toString()); - if (!enabled) applyEnabled.value = false; - controller.text = data['port'].toString(); - return Offstage( - offstage: !enabled, - child: _SubLabeledWidget( - context, - 'Port', - Row(children: [ - SizedBox( - width: 95, - child: TextField( - controller: controller, - enabled: enabled && !locked, - onChanged: (_) => applyEnabled.value = true, - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - r'^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$')), - ], - decoration: const InputDecoration( - hintText: '21118', - contentPadding: - EdgeInsets.symmetric(vertical: 12, horizontal: 12), + () { + bool enabled = option2bool( + 'direct-server', bind.mainGetOptionSync(key: 'direct-server')); + if (!enabled) applyEnabled.value = false; + controller.text = bind.mainGetOptionSync(key: 'direct-access-port'); + return Offstage( + offstage: !enabled, + child: _SubLabeledWidget( + context, + 'Port', + Row(children: [ + SizedBox( + width: 95, + child: TextField( + controller: controller, + enabled: enabled && !locked, + onChanged: (_) => applyEnabled.value = true, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + r'^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$')), + ], + decoration: const InputDecoration( + hintText: '21118', + contentPadding: + EdgeInsets.symmetric(vertical: 12, horizontal: 12), + ), + ).marginOnly(right: 15), + ), + Obx(() => ElevatedButton( + onPressed: applyEnabled.value && enabled && !locked + ? () async { + applyEnabled.value = false; + await bind.mainSetOption( + key: 'direct-access-port', + value: controller.text); + } + : null, + child: Text( + translate('Apply'), ), - ).marginOnly(right: 15), - ), - Obx(() => ElevatedButton( - onPressed: applyEnabled.value && enabled && !locked - ? () async { - applyEnabled.value = false; - await bind.mainSetOption( - key: 'direct-access-port', - value: controller.text); - } - : null, - child: Text( - translate('Apply'), - ), - )) - ]), - enabled: enabled && !locked, - ), - ); - }, - ), + )) + ]), + enabled: enabled && !locked, + ), + ); + }(), ]; } Widget whitelist() { bool enabled = !locked; - return futureBuilder(future: () async { - return await bind.mainGetOption(key: 'whitelist'); - }(), hasData: (data) { - RxBool hasWhitelist = (data as String).isNotEmpty.obs; - update() async { - hasWhitelist.value = - (await bind.mainGetOption(key: 'whitelist')).isNotEmpty; - } + RxBool hasWhitelist = + bind.mainGetOptionSync(key: 'whitelist').isNotEmpty.obs; + update() async { + hasWhitelist.value = bind.mainGetOptionSync(key: 'whitelist').isNotEmpty; + } - onChanged(bool? checked) async { - changeWhiteList(callback: update); - } + onChanged(bool? checked) async { + changeWhiteList(callback: update); + } - return GestureDetector( - child: Tooltip( - message: translate('whitelist_tip'), - child: Obx(() => Row( - children: [ - Checkbox( - value: hasWhitelist.value, - onChanged: enabled ? onChanged : null) + return GestureDetector( + child: Tooltip( + message: translate('whitelist_tip'), + child: Obx(() => Row( + children: [ + Checkbox( + value: hasWhitelist.value, + onChanged: enabled ? onChanged : null) + .marginOnly(right: 5), + Offstage( + offstage: !hasWhitelist.value, + child: const Icon(Icons.warning_amber_rounded, + color: Color.fromARGB(255, 255, 204, 0)) .marginOnly(right: 5), - Offstage( - offstage: !hasWhitelist.value, - child: const Icon(Icons.warning_amber_rounded, - color: Color.fromARGB(255, 255, 204, 0)) - .marginOnly(right: 5), - ), - Expanded( - child: Text( - translate('Use IP Whitelisting'), - style: - TextStyle(color: _disabledTextColor(context, enabled)), - )) - ], - )), - ), - onTap: () { - onChanged(!hasWhitelist.value); - }, - ).marginOnly(left: _kCheckBoxLeftMargin); - }); + ), + Expanded( + child: Text( + translate('Use IP Whitelisting'), + style: TextStyle(color: _disabledTextColor(context, enabled)), + )) + ], + )), + ), + onTap: () { + onChanged(!hasWhitelist.value); + }, + ).marginOnly(left: _kCheckBoxLeftMargin); } Widget hide_cm(bool enabled) { @@ -943,154 +923,150 @@ class _NetworkState extends State<_Network> with AutomaticKeepAliveClientMixin { } server(bool enabled) { - return futureBuilder(future: () async { - return await bind.mainGetOptions(); - }(), hasData: (data) { - // Setting page is not modal, oldOptions should only be used when getting options, never when setting. - Map oldOptions = jsonDecode(data! as String); - old(String key) { - return (oldOptions[key] ?? '').trim(); - } + // Setting page is not modal, oldOptions should only be used when getting options, never when setting. + Map oldOptions = + jsonDecode(bind.mainGetOptionsSync() as String); + old(String key) { + return (oldOptions[key] ?? '').trim(); + } - RxString idErrMsg = ''.obs; - RxString relayErrMsg = ''.obs; - RxString apiErrMsg = ''.obs; - var idController = - TextEditingController(text: old('custom-rendezvous-server')); - var relayController = TextEditingController(text: old('relay-server')); - var apiController = TextEditingController(text: old('api-server')); - var keyController = TextEditingController(text: old('key')); + RxString idErrMsg = ''.obs; + RxString relayErrMsg = ''.obs; + RxString apiErrMsg = ''.obs; + var idController = + TextEditingController(text: old('custom-rendezvous-server')); + var relayController = TextEditingController(text: old('relay-server')); + var apiController = TextEditingController(text: old('api-server')); + var keyController = TextEditingController(text: old('key')); - set(String idServer, String relayServer, String apiServer, - String key) async { - idServer = idServer.trim(); - relayServer = relayServer.trim(); - apiServer = apiServer.trim(); - key = key.trim(); - if (idServer.isNotEmpty) { - idErrMsg.value = - translate(await bind.mainTestIfValidServer(server: idServer)); - if (idErrMsg.isNotEmpty) { - return false; - } - } - if (relayServer.isNotEmpty) { - relayErrMsg.value = - translate(await bind.mainTestIfValidServer(server: relayServer)); - if (relayErrMsg.isNotEmpty) { - return false; - } - } - if (apiServer.isNotEmpty) { - if (!apiServer.startsWith('http://') && - !apiServer.startsWith('https://')) { - apiErrMsg.value = - '${translate("API Server")}: ${translate("invalid_http")}'; - return false; - } - } - final old = await bind.mainGetOption(key: 'custom-rendezvous-server'); - if (old.isNotEmpty && old != idServer) { - await gFFI.userModel.logOut(); - } - // should set one by one - await bind.mainSetOption( - key: 'custom-rendezvous-server', value: idServer); - await bind.mainSetOption(key: 'relay-server', value: relayServer); - await bind.mainSetOption(key: 'api-server', value: apiServer); - await bind.mainSetOption(key: 'key', value: key); - return true; - } - - submit() async { - bool result = await set(idController.text, relayController.text, - apiController.text, keyController.text); - if (result) { - setState(() {}); - showToast(translate('Successful')); - } else { - showToast(translate('Failed')); + set(String idServer, String relayServer, String apiServer, + String key) async { + idServer = idServer.trim(); + relayServer = relayServer.trim(); + apiServer = apiServer.trim(); + key = key.trim(); + if (idServer.isNotEmpty) { + idErrMsg.value = + translate(await bind.mainTestIfValidServer(server: idServer)); + if (idErrMsg.isNotEmpty) { + return false; } } + if (relayServer.isNotEmpty) { + relayErrMsg.value = + translate(await bind.mainTestIfValidServer(server: relayServer)); + if (relayErrMsg.isNotEmpty) { + return false; + } + } + if (apiServer.isNotEmpty) { + if (!apiServer.startsWith('http://') && + !apiServer.startsWith('https://')) { + apiErrMsg.value = + '${translate("API Server")}: ${translate("invalid_http")}'; + return false; + } + } + final old = await bind.mainGetOption(key: 'custom-rendezvous-server'); + if (old.isNotEmpty && old != idServer) { + await gFFI.userModel.logOut(); + } + // should set one by one + await bind.mainSetOption( + key: 'custom-rendezvous-server', value: idServer); + await bind.mainSetOption(key: 'relay-server', value: relayServer); + await bind.mainSetOption(key: 'api-server', value: apiServer); + await bind.mainSetOption(key: 'key', value: key); + return true; + } - import() { - Clipboard.getData(Clipboard.kTextPlain).then((value) { - final text = value?.text; - if (text != null && text.isNotEmpty) { - try { - final sc = ServerConfig.decode(text); - if (sc.idServer.isNotEmpty) { - idController.text = sc.idServer; - relayController.text = sc.relayServer; - apiController.text = sc.apiServer; - keyController.text = sc.key; - Future success = - set(sc.idServer, sc.relayServer, sc.apiServer, sc.key); - success.then((value) { - if (value) { - showToast( - translate('Import server configuration successfully')); - } else { - showToast(translate('Invalid server configuration')); - } - }); - } else { - showToast(translate('Invalid server configuration')); - } - } catch (e) { + submit() async { + bool result = await set(idController.text, relayController.text, + apiController.text, keyController.text); + if (result) { + setState(() {}); + showToast(translate('Successful')); + } else { + showToast(translate('Failed')); + } + } + + import() { + Clipboard.getData(Clipboard.kTextPlain).then((value) { + final text = value?.text; + if (text != null && text.isNotEmpty) { + try { + final sc = ServerConfig.decode(text); + if (sc.idServer.isNotEmpty) { + idController.text = sc.idServer; + relayController.text = sc.relayServer; + apiController.text = sc.apiServer; + keyController.text = sc.key; + Future success = + set(sc.idServer, sc.relayServer, sc.apiServer, sc.key); + success.then((value) { + if (value) { + showToast( + translate('Import server configuration successfully')); + } else { + showToast(translate('Invalid server configuration')); + } + }); + } else { showToast(translate('Invalid server configuration')); } - } else { - showToast(translate('Clipboard is empty')); + } catch (e) { + showToast(translate('Invalid server configuration')); } - }); - } + } else { + showToast(translate('Clipboard is empty')); + } + }); + } - export() { - final text = ServerConfig( - idServer: idController.text, - relayServer: relayController.text, - apiServer: apiController.text, - key: keyController.text) - .encode(); - debugPrint("ServerConfig export: $text"); + export() { + final text = ServerConfig( + idServer: idController.text, + relayServer: relayController.text, + apiServer: apiController.text, + key: keyController.text) + .encode(); + debugPrint("ServerConfig export: $text"); - Clipboard.setData(ClipboardData(text: text)); - showToast(translate('Export server configuration successfully')); - } + Clipboard.setData(ClipboardData(text: text)); + showToast(translate('Export server configuration successfully')); + } - bool secure = !enabled; - return _Card(title: 'ID/Relay Server', title_suffix: [ - Tooltip( - message: translate('Import Server Config'), + bool secure = !enabled; + return _Card(title: 'ID/Relay Server', title_suffix: [ + Tooltip( + message: translate('Import Server Config'), + child: IconButton( + icon: Icon(Icons.paste, color: Colors.grey), + onPressed: enabled ? import : null), + ), + Tooltip( + message: translate('Export Server Config'), child: IconButton( - icon: Icon(Icons.paste, color: Colors.grey), - onPressed: enabled ? import : null), - ), - Tooltip( - message: translate('Export Server Config'), - child: IconButton( - icon: Icon(Icons.copy, color: Colors.grey), - onPressed: enabled ? export : null)), - ], children: [ - Column( - children: [ - Obx(() => _LabeledTextField(context, 'ID Server', idController, - idErrMsg.value, enabled, secure)), - Obx(() => _LabeledTextField(context, 'Relay Server', - relayController, relayErrMsg.value, enabled, secure)), - Obx(() => _LabeledTextField(context, 'API Server', apiController, - apiErrMsg.value, enabled, secure)), - _LabeledTextField( - context, 'Key', keyController, '', enabled, secure), - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [_Button('Apply', submit, enabled: enabled)], - ).marginOnly(top: 10), - ], - ) - ]); - }); + icon: Icon(Icons.copy, color: Colors.grey), + onPressed: enabled ? export : null)), + ], children: [ + Column( + children: [ + Obx(() => _LabeledTextField(context, 'ID Server', idController, + idErrMsg.value, enabled, secure)), + Obx(() => _LabeledTextField(context, 'Relay Server', relayController, + relayErrMsg.value, enabled, secure)), + Obx(() => _LabeledTextField(context, 'API Server', apiController, + apiErrMsg.value, enabled, secure)), + _LabeledTextField(context, 'Key', keyController, '', enabled, secure), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [_Button('Apply', submit, enabled: enabled)], + ).marginOnly(top: 10), + ], + ) + ]); } } @@ -1662,53 +1638,47 @@ Widget _OptionCheckBox(BuildContext context, String label, String key, bool enabled = true, Icon? checkedIcon, bool? fakeValue}) { - return futureBuilder( - future: bind.mainGetOption(key: key), - hasData: (data) { - bool value = option2bool(key, data.toString()); - if (reverse) value = !value; - var ref = value.obs; - onChanged(option) async { - if (option != null) { - ref.value = option; - if (reverse) option = !option; - String value = bool2option(key, option); - await bind.mainSetOption(key: key, value: value); - update?.call(); + bool value = mainGetBoolOptionSync(key); + if (reverse) value = !value; + var ref = value.obs; + onChanged(option) async { + if (option != null) { + if (reverse) option = !option; + await mainSetBoolOption(key, option); + ref.value = mainGetBoolOptionSync(key); + update?.call(); + } + } + + if (fakeValue != null) { + ref.value = fakeValue; + enabled = false; + } + + return GestureDetector( + child: Obx( + () => Row( + children: [ + Checkbox(value: ref.value, onChanged: enabled ? onChanged : null) + .marginOnly(right: 5), + Offstage( + offstage: !ref.value || checkedIcon == null, + child: checkedIcon?.marginOnly(right: 5), + ), + Expanded( + child: Text( + translate(label), + style: TextStyle(color: _disabledTextColor(context, enabled)), + )) + ], + ), + ).marginOnly(left: _kCheckBoxLeftMargin), + onTap: enabled + ? () { + onChanged(!ref.value); } - } - - if (fakeValue != null) { - ref.value = fakeValue; - enabled = false; - } - - return GestureDetector( - child: Obx( - () => Row( - children: [ - Checkbox( - value: ref.value, onChanged: enabled ? onChanged : null) - .marginOnly(right: 5), - Offstage( - offstage: !ref.value || checkedIcon == null, - child: checkedIcon?.marginOnly(right: 5), - ), - Expanded( - child: Text( - translate(label), - style: TextStyle(color: _disabledTextColor(context, enabled)), - )) - ], - ), - ).marginOnly(left: _kCheckBoxLeftMargin), - onTap: enabled - ? () { - onChanged(!ref.value); - } - : null, - ); - }); + : null, + ); } // ignore: non_constant_identifier_names diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 011c1b098..c25ac78b0 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -606,6 +606,10 @@ pub fn main_get_option(key: String) -> String { get_option(key) } +pub fn main_get_option_sync(key: String) -> SyncReturn { + SyncReturn(get_option(key)) +} + pub fn main_get_error() -> String { get_error() } @@ -626,6 +630,10 @@ pub fn main_get_options() -> String { get_options() } +pub fn main_get_options_sync() -> SyncReturn { + SyncReturn(get_options()) +} + pub fn main_set_options(json: String) { let map: HashMap = serde_json::from_str(&json).unwrap_or(HashMap::new()); if !map.is_empty() { From dfd5ea8a7f29cab040f2010eaafeb9b99df63ebc Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 23 Jul 2023 18:01:00 +0800 Subject: [PATCH 170/612] add wrapper for min modifications Signed-off-by: dignow --- .../desktop/pages/desktop_setting_page.dart | 575 +++++++++--------- 1 file changed, 299 insertions(+), 276 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index d5a7c58fc..b89929ad9 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -525,75 +525,80 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin { Widget permissions(context) { bool enabled = !locked; - String accessMode = bind.mainGetOptionSync(key: 'access-mode'); - _AccessMode mode; - if (accessMode == 'full') { - mode = _AccessMode.full; - } else if (accessMode == 'view') { - mode = _AccessMode.view; - } else { - mode = _AccessMode.custom; - } - String initialKey; - bool? fakeValue; - switch (mode) { - case _AccessMode.custom: - initialKey = ''; - fakeValue = null; - break; - case _AccessMode.full: - initialKey = 'full'; - fakeValue = true; - break; - case _AccessMode.view: - initialKey = 'view'; - fakeValue = false; - break; + // Simple temp wrapper for PR check + tmpWrapper() { + String accessMode = bind.mainGetOptionSync(key: 'access-mode'); + _AccessMode mode; + if (accessMode == 'full') { + mode = _AccessMode.full; + } else if (accessMode == 'view') { + mode = _AccessMode.view; + } else { + mode = _AccessMode.custom; + } + String initialKey; + bool? fakeValue; + switch (mode) { + case _AccessMode.custom: + initialKey = ''; + fakeValue = null; + break; + case _AccessMode.full: + initialKey = 'full'; + fakeValue = true; + break; + case _AccessMode.view: + initialKey = 'view'; + fakeValue = false; + break; + } + + return _Card(title: 'Permissions', children: [ + _ComboBox( + keys: [ + '', + 'full', + 'view', + ], + values: [ + translate('Custom'), + translate('Full Access'), + translate('Screen Share'), + ], + enabled: enabled, + initialKey: initialKey, + onChanged: (mode) async { + await bind.mainSetOption(key: 'access-mode', value: mode); + setState(() {}); + }).marginOnly(left: _kContentHMargin), + Column( + children: [ + _OptionCheckBox(context, 'Enable Keyboard/Mouse', 'enable-keyboard', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox(context, 'Enable Clipboard', 'enable-clipboard', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox( + context, 'Enable File Transfer', 'enable-file-transfer', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox(context, 'Enable Audio', 'enable-audio', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox(context, 'Enable TCP Tunneling', 'enable-tunnel', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox( + context, 'Enable Remote Restart', 'enable-remote-restart', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox( + context, 'Enable Recording Session', 'enable-record-session', + enabled: enabled, fakeValue: fakeValue), + _OptionCheckBox(context, 'Enable remote configuration modification', + 'allow-remote-config-modification', + enabled: enabled, fakeValue: fakeValue), + ], + ), + ]); } - return _Card(title: 'Permissions', children: [ - _ComboBox( - keys: [ - '', - 'full', - 'view', - ], - values: [ - translate('Custom'), - translate('Full Access'), - translate('Screen Share'), - ], - enabled: enabled, - initialKey: initialKey, - onChanged: (mode) async { - await bind.mainSetOption(key: 'access-mode', value: mode); - setState(() {}); - }).marginOnly(left: _kContentHMargin), - Column( - children: [ - _OptionCheckBox(context, 'Enable Keyboard/Mouse', 'enable-keyboard', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox(context, 'Enable Clipboard', 'enable-clipboard', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox( - context, 'Enable File Transfer', 'enable-file-transfer', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox(context, 'Enable Audio', 'enable-audio', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox(context, 'Enable TCP Tunneling', 'enable-tunnel', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox( - context, 'Enable Remote Restart', 'enable-remote-restart', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox( - context, 'Enable Recording Session', 'enable-record-session', - enabled: enabled, fakeValue: fakeValue), - _OptionCheckBox(context, 'Enable remote configuration modification', - 'allow-remote-config-modification', - enabled: enabled, fakeValue: fakeValue), - ], - ), - ]); + return tmpWrapper(); } Widget password(BuildContext context) { @@ -752,93 +757,105 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin { _OptionCheckBox(context, 'Enable Direct IP Access', 'direct-server', update: update, enabled: !locked), () { - bool enabled = option2bool( - 'direct-server', bind.mainGetOptionSync(key: 'direct-server')); - if (!enabled) applyEnabled.value = false; - controller.text = bind.mainGetOptionSync(key: 'direct-access-port'); - return Offstage( - offstage: !enabled, - child: _SubLabeledWidget( - context, - 'Port', - Row(children: [ - SizedBox( - width: 95, - child: TextField( - controller: controller, - enabled: enabled && !locked, - onChanged: (_) => applyEnabled.value = true, - inputFormatters: [ - FilteringTextInputFormatter.allow(RegExp( - r'^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$')), - ], - decoration: const InputDecoration( - hintText: '21118', - contentPadding: - EdgeInsets.symmetric(vertical: 12, horizontal: 12), - ), - ).marginOnly(right: 15), - ), - Obx(() => ElevatedButton( - onPressed: applyEnabled.value && enabled && !locked - ? () async { - applyEnabled.value = false; - await bind.mainSetOption( - key: 'direct-access-port', - value: controller.text); - } - : null, - child: Text( - translate('Apply'), + // Simple temp wrapper for PR check + tmpWrapper() { + bool enabled = option2bool( + 'direct-server', bind.mainGetOptionSync(key: 'direct-server')); + if (!enabled) applyEnabled.value = false; + controller.text = bind.mainGetOptionSync(key: 'direct-access-port'); + return Offstage( + offstage: !enabled, + child: _SubLabeledWidget( + context, + 'Port', + Row(children: [ + SizedBox( + width: 95, + child: TextField( + controller: controller, + enabled: enabled && !locked, + onChanged: (_) => applyEnabled.value = true, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp( + r'^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$')), + ], + decoration: const InputDecoration( + hintText: '21118', + contentPadding: + EdgeInsets.symmetric(vertical: 12, horizontal: 12), ), - )) - ]), - enabled: enabled && !locked, - ), - ); + ).marginOnly(right: 15), + ), + Obx(() => ElevatedButton( + onPressed: applyEnabled.value && enabled && !locked + ? () async { + applyEnabled.value = false; + await bind.mainSetOption( + key: 'direct-access-port', + value: controller.text); + } + : null, + child: Text( + translate('Apply'), + ), + )) + ]), + enabled: enabled && !locked, + ), + ); + } + + return tmpWrapper(); }(), ]; } Widget whitelist() { bool enabled = !locked; - RxBool hasWhitelist = - bind.mainGetOptionSync(key: 'whitelist').isNotEmpty.obs; - update() async { - hasWhitelist.value = bind.mainGetOptionSync(key: 'whitelist').isNotEmpty; - } + // Simple temp wrapper for PR check + tmpWrapper() { + RxBool hasWhitelist = + bind.mainGetOptionSync(key: 'whitelist').isNotEmpty.obs; + update() async { + hasWhitelist.value = + bind.mainGetOptionSync(key: 'whitelist').isNotEmpty; + } - onChanged(bool? checked) async { - changeWhiteList(callback: update); - } + onChanged(bool? checked) async { + changeWhiteList(callback: update); + } - return GestureDetector( - child: Tooltip( - message: translate('whitelist_tip'), - child: Obx(() => Row( - children: [ - Checkbox( - value: hasWhitelist.value, - onChanged: enabled ? onChanged : null) - .marginOnly(right: 5), - Offstage( - offstage: !hasWhitelist.value, - child: const Icon(Icons.warning_amber_rounded, - color: Color.fromARGB(255, 255, 204, 0)) + return GestureDetector( + child: Tooltip( + message: translate('whitelist_tip'), + child: Obx(() => Row( + children: [ + Checkbox( + value: hasWhitelist.value, + onChanged: enabled ? onChanged : null) .marginOnly(right: 5), - ), - Expanded( - child: Text( - translate('Use IP Whitelisting'), - style: TextStyle(color: _disabledTextColor(context, enabled)), - )) - ], - )), - ), - onTap: () { - onChanged(!hasWhitelist.value); - }, - ).marginOnly(left: _kCheckBoxLeftMargin); + Offstage( + offstage: !hasWhitelist.value, + child: const Icon(Icons.warning_amber_rounded, + color: Color.fromARGB(255, 255, 204, 0)) + .marginOnly(right: 5), + ), + Expanded( + child: Text( + translate('Use IP Whitelisting'), + style: + TextStyle(color: _disabledTextColor(context, enabled)), + )) + ], + )), + ), + onTap: () { + onChanged(!hasWhitelist.value); + }, + ).marginOnly(left: _kCheckBoxLeftMargin); + } + + return tmpWrapper(); } Widget hide_cm(bool enabled) { @@ -923,150 +940,156 @@ class _NetworkState extends State<_Network> with AutomaticKeepAliveClientMixin { } server(bool enabled) { - // Setting page is not modal, oldOptions should only be used when getting options, never when setting. - Map oldOptions = - jsonDecode(bind.mainGetOptionsSync() as String); - old(String key) { - return (oldOptions[key] ?? '').trim(); - } + // Simple temp wrapper for PR check + tmpWrapper() { + // Setting page is not modal, oldOptions should only be used when getting options, never when setting. + Map oldOptions = + jsonDecode(bind.mainGetOptionsSync() as String); + old(String key) { + return (oldOptions[key] ?? '').trim(); + } - RxString idErrMsg = ''.obs; - RxString relayErrMsg = ''.obs; - RxString apiErrMsg = ''.obs; - var idController = - TextEditingController(text: old('custom-rendezvous-server')); - var relayController = TextEditingController(text: old('relay-server')); - var apiController = TextEditingController(text: old('api-server')); - var keyController = TextEditingController(text: old('key')); + RxString idErrMsg = ''.obs; + RxString relayErrMsg = ''.obs; + RxString apiErrMsg = ''.obs; + var idController = + TextEditingController(text: old('custom-rendezvous-server')); + var relayController = TextEditingController(text: old('relay-server')); + var apiController = TextEditingController(text: old('api-server')); + var keyController = TextEditingController(text: old('key')); - set(String idServer, String relayServer, String apiServer, - String key) async { - idServer = idServer.trim(); - relayServer = relayServer.trim(); - apiServer = apiServer.trim(); - key = key.trim(); - if (idServer.isNotEmpty) { - idErrMsg.value = - translate(await bind.mainTestIfValidServer(server: idServer)); - if (idErrMsg.isNotEmpty) { - return false; + set(String idServer, String relayServer, String apiServer, + String key) async { + idServer = idServer.trim(); + relayServer = relayServer.trim(); + apiServer = apiServer.trim(); + key = key.trim(); + if (idServer.isNotEmpty) { + idErrMsg.value = + translate(await bind.mainTestIfValidServer(server: idServer)); + if (idErrMsg.isNotEmpty) { + return false; + } + } + if (relayServer.isNotEmpty) { + relayErrMsg.value = + translate(await bind.mainTestIfValidServer(server: relayServer)); + if (relayErrMsg.isNotEmpty) { + return false; + } + } + if (apiServer.isNotEmpty) { + if (!apiServer.startsWith('http://') && + !apiServer.startsWith('https://')) { + apiErrMsg.value = + '${translate("API Server")}: ${translate("invalid_http")}'; + return false; + } + } + final old = await bind.mainGetOption(key: 'custom-rendezvous-server'); + if (old.isNotEmpty && old != idServer) { + await gFFI.userModel.logOut(); + } + // should set one by one + await bind.mainSetOption( + key: 'custom-rendezvous-server', value: idServer); + await bind.mainSetOption(key: 'relay-server', value: relayServer); + await bind.mainSetOption(key: 'api-server', value: apiServer); + await bind.mainSetOption(key: 'key', value: key); + return true; + } + + submit() async { + bool result = await set(idController.text, relayController.text, + apiController.text, keyController.text); + if (result) { + setState(() {}); + showToast(translate('Successful')); + } else { + showToast(translate('Failed')); } } - if (relayServer.isNotEmpty) { - relayErrMsg.value = - translate(await bind.mainTestIfValidServer(server: relayServer)); - if (relayErrMsg.isNotEmpty) { - return false; - } - } - if (apiServer.isNotEmpty) { - if (!apiServer.startsWith('http://') && - !apiServer.startsWith('https://')) { - apiErrMsg.value = - '${translate("API Server")}: ${translate("invalid_http")}'; - return false; - } - } - final old = await bind.mainGetOption(key: 'custom-rendezvous-server'); - if (old.isNotEmpty && old != idServer) { - await gFFI.userModel.logOut(); - } - // should set one by one - await bind.mainSetOption( - key: 'custom-rendezvous-server', value: idServer); - await bind.mainSetOption(key: 'relay-server', value: relayServer); - await bind.mainSetOption(key: 'api-server', value: apiServer); - await bind.mainSetOption(key: 'key', value: key); - return true; - } - submit() async { - bool result = await set(idController.text, relayController.text, - apiController.text, keyController.text); - if (result) { - setState(() {}); - showToast(translate('Successful')); - } else { - showToast(translate('Failed')); - } - } - - import() { - Clipboard.getData(Clipboard.kTextPlain).then((value) { - final text = value?.text; - if (text != null && text.isNotEmpty) { - try { - final sc = ServerConfig.decode(text); - if (sc.idServer.isNotEmpty) { - idController.text = sc.idServer; - relayController.text = sc.relayServer; - apiController.text = sc.apiServer; - keyController.text = sc.key; - Future success = - set(sc.idServer, sc.relayServer, sc.apiServer, sc.key); - success.then((value) { - if (value) { - showToast( - translate('Import server configuration successfully')); - } else { - showToast(translate('Invalid server configuration')); - } - }); - } else { + import() { + Clipboard.getData(Clipboard.kTextPlain).then((value) { + final text = value?.text; + if (text != null && text.isNotEmpty) { + try { + final sc = ServerConfig.decode(text); + if (sc.idServer.isNotEmpty) { + idController.text = sc.idServer; + relayController.text = sc.relayServer; + apiController.text = sc.apiServer; + keyController.text = sc.key; + Future success = + set(sc.idServer, sc.relayServer, sc.apiServer, sc.key); + success.then((value) { + if (value) { + showToast( + translate('Import server configuration successfully')); + } else { + showToast(translate('Invalid server configuration')); + } + }); + } else { + showToast(translate('Invalid server configuration')); + } + } catch (e) { showToast(translate('Invalid server configuration')); } - } catch (e) { - showToast(translate('Invalid server configuration')); + } else { + showToast(translate('Clipboard is empty')); } - } else { - showToast(translate('Clipboard is empty')); - } - }); - } + }); + } - export() { - final text = ServerConfig( - idServer: idController.text, - relayServer: relayController.text, - apiServer: apiController.text, - key: keyController.text) - .encode(); - debugPrint("ServerConfig export: $text"); + export() { + final text = ServerConfig( + idServer: idController.text, + relayServer: relayController.text, + apiServer: apiController.text, + key: keyController.text) + .encode(); + debugPrint("ServerConfig export: $text"); - Clipboard.setData(ClipboardData(text: text)); - showToast(translate('Export server configuration successfully')); - } + Clipboard.setData(ClipboardData(text: text)); + showToast(translate('Export server configuration successfully')); + } - bool secure = !enabled; - return _Card(title: 'ID/Relay Server', title_suffix: [ - Tooltip( - message: translate('Import Server Config'), - child: IconButton( - icon: Icon(Icons.paste, color: Colors.grey), - onPressed: enabled ? import : null), - ), - Tooltip( - message: translate('Export Server Config'), + bool secure = !enabled; + return _Card(title: 'ID/Relay Server', title_suffix: [ + Tooltip( + message: translate('Import Server Config'), child: IconButton( - icon: Icon(Icons.copy, color: Colors.grey), - onPressed: enabled ? export : null)), - ], children: [ - Column( - children: [ - Obx(() => _LabeledTextField(context, 'ID Server', idController, - idErrMsg.value, enabled, secure)), - Obx(() => _LabeledTextField(context, 'Relay Server', relayController, - relayErrMsg.value, enabled, secure)), - Obx(() => _LabeledTextField(context, 'API Server', apiController, - apiErrMsg.value, enabled, secure)), - _LabeledTextField(context, 'Key', keyController, '', enabled, secure), - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [_Button('Apply', submit, enabled: enabled)], - ).marginOnly(top: 10), - ], - ) - ]); + icon: Icon(Icons.paste, color: Colors.grey), + onPressed: enabled ? import : null), + ), + Tooltip( + message: translate('Export Server Config'), + child: IconButton( + icon: Icon(Icons.copy, color: Colors.grey), + onPressed: enabled ? export : null)), + ], children: [ + Column( + children: [ + Obx(() => _LabeledTextField(context, 'ID Server', idController, + idErrMsg.value, enabled, secure)), + Obx(() => _LabeledTextField(context, 'Relay Server', + relayController, relayErrMsg.value, enabled, secure)), + Obx(() => _LabeledTextField(context, 'API Server', apiController, + apiErrMsg.value, enabled, secure)), + _LabeledTextField( + context, 'Key', keyController, '', enabled, secure), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [_Button('Apply', submit, enabled: enabled)], + ).marginOnly(top: 10), + ], + ) + ]); + } + + return tmpWrapper(); } } From fd9f5475f395998b3c2e40e2c435a85d67a543e2 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 18 Jul 2023 12:39:27 +0800 Subject: [PATCH 171/612] multiuser video qos and client increace fps support Signed-off-by: 21pages --- libs/hbb_common/protos/message.proto | 1 + src/client.rs | 2 +- src/client/io_loop.rs | 70 +++-- src/server/connection.rs | 22 +- src/server/video_qos.rs | 367 +++++++++++++++------------ src/server/video_service.rs | 15 +- 6 files changed, 288 insertions(+), 189 deletions(-) diff --git a/libs/hbb_common/protos/message.proto b/libs/hbb_common/protos/message.proto index 2f732539c..ca12eb908 100644 --- a/libs/hbb_common/protos/message.proto +++ b/libs/hbb_common/protos/message.proto @@ -662,6 +662,7 @@ message Misc { Resolution change_resolution = 24; PluginRequest plugin_request = 25; PluginFailure plugin_failure = 26; + uint32 full_speed_fps = 27; } } diff --git a/src/client.rs b/src/client.rs index ccdae0512..18a4bcb83 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1820,7 +1820,7 @@ where ); } // Clear to get real-time fps - if count > 300 { + if count > 150 { count = 0; duration = Duration::ZERO; } diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 8fe32b4cb..fb0bba5a9 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -234,7 +234,7 @@ impl Remote { } } _ = status_timer.tick() => { - self.fps_control(); + self.fps_control(direct); let elapsed = fps_instant.elapsed().as_millis(); if elapsed < 1000 { continue; @@ -864,23 +864,56 @@ impl Remote { } } #[inline] - fn fps_control(&mut self) { + fn fps_control(&mut self, direct: bool) { let len = self.video_queue.len(); let ctl = &mut self.fps_control; // Current full speed decoding fps let decode_fps = self.decode_fps.load(std::sync::atomic::Ordering::Relaxed); - // 500ms - let debounce = if decode_fps > 10 { decode_fps / 2 } else { 5 }; - if len < debounce || decode_fps == 0 { + if decode_fps == 0 { return; } - // First setting , or the length of the queue still increases after setting, or exceed the size of the last setting again - if ctl.set_times < 10 // enough - && (ctl.set_times == 0 - || (len > ctl.last_queue_size && ctl.last_set_instant.elapsed().as_secs() > 30)) + let limited_fps = if direct { + decode_fps * 9 / 10 // 30 got 27 + } else { + decode_fps * 4 / 5 // 30 got 24 + }; + // send full speed fps + let version = self.handler.lc.read().unwrap().version; + let max_encode_speed = 144 * 10 / 9; + if version >= hbb_common::get_version_number("1.2.1") + && (ctl.last_full_speed_fps.is_none() // First time + || ((ctl.last_full_speed_fps.unwrap_or_default() - decode_fps as i32).abs() >= 5 // diff 5 + && !(decode_fps > max_encode_speed // already exceed max encoding speed + && ctl.last_full_speed_fps.unwrap_or_default() > max_encode_speed as i32))) { - // 80% fps to ensure decoding is faster than encoding - let mut custom_fps = decode_fps as i32 * 4 / 5; + let mut misc = Misc::new(); + misc.set_full_speed_fps(decode_fps as _); + let mut msg = Message::new(); + msg.set_misc(misc); + self.sender.send(Data::Message(msg)).ok(); + ctl.last_full_speed_fps = Some(decode_fps as _); + } + // decrease judgement + let debounce = if decode_fps > 10 { decode_fps / 2 } else { 5 }; // 500ms + let should_decrease = len >= debounce && len > ctl.last_queue_size + 5; // exceed debounce or still caching + + // increase judgement + if len <= 1 { + ctl.idle_counter += 1; + } else { + ctl.idle_counter = 0; + } + let mut should_increase = false; + if let Some(last_custom_fps) = ctl.last_custom_fps { + // ever set + if last_custom_fps + 5 < limited_fps as i32 && ctl.idle_counter > 3 { + // limited_fps is 5 larger than last set, and idle time is more than 3 seconds + should_increase = true; + } + } + if should_decrease || should_increase { + // limited_fps to ensure decoding is faster than encoding + let mut custom_fps = limited_fps as i32; if custom_fps < 1 { custom_fps = 1; } @@ -894,8 +927,7 @@ impl Remote { msg.set_misc(misc); self.sender.send(Data::Message(msg)).ok(); ctl.last_queue_size = len; - ctl.set_times += 1; - ctl.last_set_instant = Instant::now(); + ctl.last_custom_fps = Some(custom_fps); } // send refresh if ctl.refresh_times < 10 // enough @@ -1406,7 +1438,7 @@ impl Remote { } Some(message::Union::PeerInfo(pi)) => { self.handler.set_displays(&pi.displays); - }, + } _ => {} } } @@ -1604,20 +1636,22 @@ impl RemoveJob { struct FpsControl { last_queue_size: usize, - set_times: usize, refresh_times: usize, - last_set_instant: Instant, last_refresh_instant: Instant, + last_full_speed_fps: Option, + last_custom_fps: Option, + idle_counter: usize, } impl Default for FpsControl { fn default() -> Self { Self { last_queue_size: Default::default(), - set_times: Default::default(), refresh_times: Default::default(), - last_set_instant: Instant::now(), last_refresh_instant: Instant::now(), + last_full_speed_fps: None, + last_custom_fps: None, + idle_counter: 0, } } } diff --git a/src/server/connection.rs b/src/server/connection.rs index c91b813ff..4f2321f9d 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -155,6 +155,7 @@ pub struct Connection { restart: bool, recording: bool, last_test_delay: i64, + network_delay: Option, lock_after_session_end: bool, show_remote_cursor: bool, // by peer @@ -292,6 +293,7 @@ impl Connection { restart: Connection::permission("enable-remote-restart"), recording: Connection::permission("enable-record-session"), last_test_delay: 0, + network_delay: None, lock_after_session_end: false, show_remote_cursor: false, ip: "".to_owned(), @@ -597,8 +599,8 @@ impl Connection { let qos = video_service::VIDEO_QOS.lock().unwrap(); msg_out.set_test_delay(TestDelay{ time, - last_delay:qos.current_delay, - target_bitrate:qos.target_bitrate, + last_delay:conn.network_delay.unwrap_or_default(), + target_bitrate:qos.bitrate(), ..Default::default() }); conn.inner.send(msg_out.into()); @@ -622,7 +624,6 @@ impl Connection { ); video_service::notify_video_frame_fetched(id, None); scrap::codec::Encoder::update(id, scrap::codec::EncodingUpdate::Remove); - video_service::VIDEO_QOS.lock().unwrap().reset(); if conn.authorized { password::update_temporary_password(); } @@ -1550,7 +1551,8 @@ impl Connection { video_service::VIDEO_QOS .lock() .unwrap() - .update_network_delay(new_delay); + .user_network_delay(self.inner.id(), new_delay); + self.network_delay = Some(new_delay); } } else if let Some(message::Union::SwitchSidesResponse(_s)) = msg.union { #[cfg(feature = "flutter")] @@ -1929,6 +1931,10 @@ impl Connection { crate::plugin::handle_client_event(&p.id, &self.lr.my_id, &p.content); self.send(msg).await; } + Some(misc::Union::FullSpeedFps(fps)) => video_service::VIDEO_QOS + .lock() + .unwrap() + .user_full_speed_fps(self.inner.id(), fps), _ => {} }, Some(message::Union::AudioFrame(frame)) => { @@ -2043,14 +2049,14 @@ impl Connection { video_service::VIDEO_QOS .lock() .unwrap() - .update_image_quality(image_quality); + .user_image_quality(self.inner.id(), image_quality); } } if o.custom_fps > 0 { video_service::VIDEO_QOS .lock() .unwrap() - .update_user_fps(o.custom_fps as _); + .user_custom_fps(self.inner.id(), o.custom_fps as _); } if let Some(q) = o.supported_decoding.clone().take() { scrap::codec::Encoder::update(self.inner.id(), scrap::codec::EncodingUpdate::New(q)); @@ -2581,6 +2587,10 @@ mod raii { if active_conns_lock.is_empty() { crate::privacy_win_mag::stop(); } + video_service::VIDEO_QOS + .lock() + .unwrap() + .on_connection_close(self.0); } } } diff --git a/src/server/video_qos.rs b/src/server/video_qos.rs index d53053691..727c1ea35 100644 --- a/src/server/video_qos.rs +++ b/src/server/video_qos.rs @@ -1,8 +1,8 @@ use super::*; use std::time::Duration; -pub const FPS: u8 = 30; -pub const MIN_FPS: u8 = 1; -pub const MAX_FPS: u8 = 120; +pub const FPS: u32 = 30; +pub const MIN_FPS: u32 = 1; +pub const MAX_FPS: u32 = 120; trait Percent { fn as_percent(&self) -> u32; } @@ -18,22 +18,24 @@ impl Percent for ImageQuality { } } +#[derive(Default, Debug)] +struct UserData { + full_speed_fps: Option, + custom_fps: Option, + quality: Option<(i32, i64)>, // (quality, time) + delay: Option<(DelayState, u32, usize)>, // (state, ms, counter) +} + pub struct VideoQoS { width: u32, height: u32, - user_image_quality: u32, - current_image_quality: u32, - enable_abr: bool, - pub current_delay: u32, - pub fps: u8, // abr - pub user_fps: u8, - pub target_bitrate: u32, // abr + fps: u32, + target_bitrate: u32, updated: bool, - state: DelayState, - debounce_count: u32, + users: HashMap, } -#[derive(PartialEq, Debug)] +#[derive(PartialEq, Debug, Clone, Copy)] enum DelayState { Normal = 0, LowDelay = 200, @@ -59,17 +61,11 @@ impl Default for VideoQoS { fn default() -> Self { VideoQoS { fps: FPS, - user_fps: FPS, - user_image_quality: ImageQuality::Balanced.as_percent(), - current_image_quality: ImageQuality::Balanced.as_percent(), - enable_abr: false, width: 0, height: 0, - current_delay: 0, target_bitrate: 0, updated: false, - state: DelayState::Normal, - debounce_count: 0, + users: Default::default(), } } } @@ -83,133 +79,16 @@ impl VideoQoS { self.height = height; } - pub fn spf(&mut self) -> Duration { - if self.fps < MIN_FPS || self.fps > MAX_FPS { - self.fps = self.base_fps(); - } + pub fn spf(&self) -> Duration { Duration::from_secs_f32(1. / (self.fps as f32)) } - fn base_fps(&self) -> u8 { - if self.user_fps >= MIN_FPS && self.user_fps <= MAX_FPS { - return self.user_fps; - } - return FPS; + pub fn fps(&self) -> u32 { + self.fps } - // update_network_delay periodically - // decrease the bitrate when the delay gets bigger - pub fn update_network_delay(&mut self, delay: u32) { - if self.current_delay.eq(&0) { - self.current_delay = delay; - return; - } - - self.current_delay = delay / 2 + self.current_delay / 2; - log::trace!( - "VideoQoS update_network_delay:{}, {}, state:{:?}", - self.current_delay, - delay, - self.state, - ); - - // ABR - if !self.enable_abr { - return; - } - let current_state = DelayState::from_delay(self.current_delay); - if current_state != self.state && self.debounce_count > 5 { - log::debug!( - "VideoQoS state changed:{:?} -> {:?}", - self.state, - current_state - ); - self.state = current_state; - self.debounce_count = 0; - self.refresh_quality(); - } else { - self.debounce_count += 1; - } - } - - fn refresh_quality(&mut self) { - match self.state { - DelayState::Normal => { - self.fps = self.base_fps(); - self.current_image_quality = self.user_image_quality; - } - DelayState::LowDelay => { - self.fps = self.base_fps(); - self.current_image_quality = std::cmp::min(self.user_image_quality, 50); - } - DelayState::HighDelay => { - self.fps = self.base_fps() / 2; - self.current_image_quality = std::cmp::min(self.user_image_quality, 25); - } - DelayState::Broken => { - self.fps = self.base_fps() / 4; - self.current_image_quality = 10; - } - } - let _ = self.generate_bitrate().ok(); - self.updated = true; - } - - // handle image_quality change from peer - pub fn update_image_quality(&mut self, image_quality: i32) { - if image_quality == ImageQuality::Low.value() - || image_quality == ImageQuality::Balanced.value() - || image_quality == ImageQuality::Best.value() - { - // not custom - self.user_fps = FPS; - self.fps = FPS; - } - let image_quality = Self::convert_quality(image_quality) as _; - if self.current_image_quality != image_quality { - self.current_image_quality = image_quality; - let _ = self.generate_bitrate().ok(); - self.updated = true; - } - - self.user_image_quality = self.current_image_quality; - } - - pub fn update_user_fps(&mut self, fps: u8) { - if fps >= MIN_FPS && fps <= MAX_FPS { - if self.user_fps != fps { - self.user_fps = fps; - self.fps = fps; - self.updated = true; - } - } - } - - pub fn generate_bitrate(&mut self) -> ResultType { - // https://www.nvidia.com/en-us/geforce/guides/broadcasting-guide/ - if self.width == 0 || self.height == 0 { - bail!("Fail to generate_bitrate, width or height is not set"); - } - if self.current_image_quality == 0 { - self.current_image_quality = ImageQuality::Balanced.as_percent(); - } - - let base_bitrate = ((self.width * self.height) / 800) as u32; - - #[cfg(target_os = "android")] - { - // fix when android screen shrinks - 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; - Ok(self.target_bitrate) - } - #[cfg(not(target_os = "android"))] - { - self.target_bitrate = base_bitrate * self.current_image_quality / 100; - Ok(self.target_bitrate) - } + pub fn bitrate(&self) -> u32 { + self.target_bitrate } pub fn check_if_updated(&mut self) -> bool { @@ -220,26 +99,198 @@ impl VideoQoS { return false; } - pub fn reset(&mut self) { - self.fps = FPS; - self.user_fps = FPS; - self.updated = true; + pub fn abr_enabled() -> bool { + "N" != Config::get_option("enable-abr") } - pub fn check_abr_config(&mut self) -> bool { - self.enable_abr = "N" != Config::get_option("enable-abr"); - self.enable_abr - } + pub fn refresh(&mut self) { + let mut updated = false; + // fps + let user_fps = |u: &UserData| { + // full_speed_fps + let mut fps = u.full_speed_fps.unwrap_or_default() * 9 / 10; + // custom_fps + if let Some(custom_fps) = u.custom_fps { + if fps == 0 || custom_fps < fps { + fps = custom_fps; + } + } + // delay + if let Some(delay) = u.delay { + fps = match delay.0 { + DelayState::Normal => fps, + DelayState::LowDelay => fps, + DelayState::HighDelay => fps / 2, + DelayState::Broken => fps / 4, + } + } + return fps; + }; + let mut fps = self + .users + .iter() + .map(|(_, u)| user_fps(u)) + .filter(|u| *u >= MIN_FPS) + .min() + .unwrap_or(FPS); + if fps > MAX_FPS { + fps = MAX_FPS; + } + if fps != self.fps { + self.fps = fps; + updated = true; + } - pub fn convert_quality(q: i32) -> i32 { - if q == ImageQuality::Balanced.value() { - 100 * 2 / 3 - } else if q == ImageQuality::Low.value() { - 100 / 2 - } else if q == ImageQuality::Best.value() { - 100 + // quality + // latest image quality + let latest = self + .users + .iter() + // .map(|(_, u)| u.quality) + .filter(|u| u.1.quality != None) + .max_by(|u1, u2| { + u1.1.quality + .unwrap_or_default() + .1 + .cmp(&u2.1.quality.unwrap_or_default().1) + }); + let quality = if let Some((id, data)) = latest { + let mut quality = data.quality.unwrap_or_default().0; + if quality <= 0 { + quality = ImageQuality::Balanced.as_percent() as _; + } + // use latest's delay for quality + if Self::abr_enabled() { + if let Some(Some((delay, _, _))) = self.users.get(id).map(|u| u.delay) { + quality = match delay { + DelayState::Normal => quality, + DelayState::LowDelay => std::cmp::min(quality, 50), + DelayState::HighDelay => std::cmp::min(quality, 25), + DelayState::Broken => 10, + }; + } + } + quality } else { - (q >> 8 & 0xFF) * 2 + ImageQuality::Balanced.as_percent() as _ + }; + // bitrate + #[allow(unused_mut)] + let mut base_bitrate = ((self.width * self.height) / 800) as u32; + if base_bitrate == 0 { + base_bitrate = 1920 * 1080 / 800; + } + #[cfg(target_os = "android")] + { + // fix when android screen shrinks + let fix = scrap::Display::fix_quality() as u32; + log::debug!("Android screen, fix quality:{}", fix); + base_bitrate = base_bitrate * fix; + } + let target_bitrate = base_bitrate * quality as u32 / 100; + if self.target_bitrate != target_bitrate { + self.target_bitrate = target_bitrate; + updated = true; + } + + self.updated = updated; + } + + pub fn user_custom_fps(&mut self, id: i32, fps: u32) { + if fps < MIN_FPS { + return; + } + if let Some(user) = self.users.get_mut(&id) { + user.custom_fps = Some(fps); + } else { + self.users.insert( + id, + UserData { + custom_fps: Some(fps), + ..Default::default() + }, + ); + } + self.refresh(); + } + + pub fn user_full_speed_fps(&mut self, id: i32, full_speed_fps: u32) { + if let Some(user) = self.users.get_mut(&id) { + user.full_speed_fps = Some(full_speed_fps); + } else { + self.users.insert( + id, + UserData { + full_speed_fps: Some(full_speed_fps), + ..Default::default() + }, + ); + } + self.refresh(); + } + + pub fn user_image_quality(&mut self, id: i32, image_quality: i32) { + let convert_quality = |q: i32| -> i32 { + if q == ImageQuality::Balanced.value() { + 100 * 2 / 3 + } else if q == ImageQuality::Low.value() { + 100 / 2 + } else if q == ImageQuality::Best.value() { + 100 + } else { + (q >> 8 & 0xFF) * 2 + } + }; + + let quality = Some((convert_quality(image_quality), hbb_common::get_time())); + if let Some(user) = self.users.get_mut(&id) { + user.quality = quality; + } else { + self.users.insert( + id, + UserData { + quality, + ..Default::default() + }, + ); + } + self.refresh(); + } + + pub fn user_network_delay(&mut self, id: i32, delay: u32) { + let mut refresh = true; + let state = DelayState::from_delay(delay); + if let Some(user) = self.users.get_mut(&id) { + if let Some((old_state, old_delay, mut counter)) = user.delay { + let new_delay = (delay + old_delay) / 2; + let new_state = DelayState::from_delay(new_delay); + if old_state == new_state { + counter += 1; + } else { + counter = 0; + } + let debounce = 3; + refresh = counter == debounce; + user.delay = Some((new_state, new_delay, counter)); + } else { + user.delay = Some((state, delay, 0)); + } + } else { + self.users.insert( + id, + UserData { + delay: Some((state, delay, 0)), + ..Default::default() + }, + ); + } + if refresh { + self.refresh(); } } + + pub fn on_connection_close(&mut self, id: i32) { + self.users.remove(&id); + self.refresh(); + } } diff --git a/src/server/video_service.rs b/src/server/video_service.rs index 9d6968c99..e917c205c 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -515,9 +515,10 @@ fn run(sp: GenericService) -> ResultType<()> { let mut video_qos = VIDEO_QOS.lock().unwrap(); video_qos.set_size(c.width as _, c.height as _); + video_qos.refresh(); let mut spf = video_qos.spf(); - let bitrate = video_qos.generate_bitrate()?; - let abr = video_qos.check_abr_config(); + let bitrate = video_qos.bitrate(); + let abr = VideoQoS::abr_enabled(); drop(video_qos); log::info!("init bitrate={}, abr enabled:{}", bitrate, abr); @@ -608,13 +609,15 @@ fn run(sp: GenericService) -> ResultType<()> { check_uac_switch(c.privacy_mode_id, c._capturer_privacy_mode_id)?; let mut video_qos = VIDEO_QOS.lock().unwrap(); - if video_qos.check_if_updated() && video_qos.target_bitrate > 0 { + if video_qos.check_if_updated() { log::debug!( "qos is updated, target_bitrate:{}, fps:{}", - video_qos.target_bitrate, - video_qos.fps + video_qos.bitrate(), + video_qos.fps() ); - allow_err!(encoder.set_bitrate(video_qos.target_bitrate)); + if video_qos.bitrate() > 0 { + allow_err!(encoder.set_bitrate(video_qos.bitrate())); + } spf = video_qos.spf(); } drop(video_qos); From 22ca7177a6ad34926de64dbb4292621d4993a1b4 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 18 Jul 2023 13:48:28 +0800 Subject: [PATCH 172/612] Revert "fix ci" This reverts commit a0e09d3e330d34d80e235f8fa4649dbb2563ddfd. --- libs/scrap/src/common/vpxcodec.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/scrap/src/common/vpxcodec.rs b/libs/scrap/src/common/vpxcodec.rs index 54ff14d3f..090df2cc2 100644 --- a/libs/scrap/src/common/vpxcodec.rs +++ b/libs/scrap/src/common/vpxcodec.rs @@ -522,7 +522,6 @@ mod webrtc { ); call_ctl!(ctx, VP9E_SET_AQ_MODE, if ADAPTIVE_QP_MODE { 3 } else { 0 }); call_ctl!(ctx, VP9E_SET_FRAME_PARALLEL_DECODING, 0); - #[cfg(not(any(target_arch = "arm", target_arch = "aarch64", target_os = "android")))] call_ctl!(ctx, VP9E_SET_SVC_GF_TEMPORAL_REF, 0); call_ctl!( ctx, From 633c80d5e44969eb365e1fae600ec15cdaaf0a34 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 18 Jul 2023 13:49:52 +0800 Subject: [PATCH 173/612] Revert "vpx use webrtc parameter" This reverts commit d23fd902d766cbcdf6e81d9ec7991a9e8eabbfe1. --- libs/scrap/examples/benchmark.rs | 2 + libs/scrap/examples/record-screen.rs | 2 + libs/scrap/src/common/aom.rs | 2 +- libs/scrap/src/common/vpxcodec.rs | 457 +++++---------------------- src/server/video_service.rs | 2 + 5 files changed, 88 insertions(+), 377 deletions(-) diff --git a/libs/scrap/examples/benchmark.rs b/libs/scrap/examples/benchmark.rs index dd1380995..eccf502d9 100644 --- a/libs/scrap/examples/benchmark.rs +++ b/libs/scrap/examples/benchmark.rs @@ -101,8 +101,10 @@ fn test_vpx( let config = EncoderCfg::VPX(VpxEncoderConfig { width: width as _, height: height as _, + timebase: [1, 1000], bitrate: bitrate_k as _, codec: codec_id, + num_threads: (num_cpus::get() / 2) as _, }); let mut encoder = VpxEncoder::new(config).unwrap(); let mut vpxs = vec![]; diff --git a/libs/scrap/examples/record-screen.rs b/libs/scrap/examples/record-screen.rs index 48f73052a..10ad66e09 100644 --- a/libs/scrap/examples/record-screen.rs +++ b/libs/scrap/examples/record-screen.rs @@ -101,8 +101,10 @@ fn main() -> io::Result<()> { let mut vpx = vpx_encode::VpxEncoder::new(EncoderCfg::VPX(vpx_encode::VpxEncoderConfig { width, height, + timebase: [1, 1000], bitrate: args.flag_bv, codec: vpx_codec, + num_threads: 0, })) .unwrap(); diff --git a/libs/scrap/src/common/aom.rs b/libs/scrap/src/common/aom.rs index 2c614feec..b9748efda 100644 --- a/libs/scrap/src/common/aom.rs +++ b/libs/scrap/src/common/aom.rs @@ -78,7 +78,7 @@ mod webrtc { } else { // Use 2 threads for low res on ARM. #[cfg(any(target_arch = "arm", target_arch = "aarch64", target_os = "android"))] - if width * height >= 320 * 180 && number_of_cores > 2 { + if (width * height >= 320 * 180 && number_of_cores > 2) { return 2; } // 1 thread less than VGA. diff --git a/libs/scrap/src/common/vpxcodec.rs b/libs/scrap/src/common/vpxcodec.rs index 090df2cc2..801527811 100644 --- a/libs/scrap/src/common/vpxcodec.rs +++ b/libs/scrap/src/common/vpxcodec.rs @@ -10,14 +10,13 @@ use hbb_common::ResultType; use crate::codec::EncoderApi; use crate::{GoogleImage, STRIDE_ALIGN}; -use super::vpx::{vpx_codec_err_t::*, *}; +use super::vpx::{vp8e_enc_control_id::*, vpx_codec_err_t::*, *}; use crate::{generate_call_macro, generate_call_ptr_macro, Error, Result}; use hbb_common::bytes::Bytes; -use std::os::raw::c_uint; +use std::os::raw::{c_int, c_uint}; use std::{ptr, slice}; generate_call_macro!(call_vpx, false); -generate_call_macro!(call_vpx_allow_err, true); generate_call_ptr_macro!(call_vpx_ptr); #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] @@ -54,11 +53,40 @@ impl EncoderApi for VpxEncoder { VpxVideoCodecId::VP8 => call_vpx_ptr!(vpx_codec_vp8_cx()), VpxVideoCodecId::VP9 => call_vpx_ptr!(vpx_codec_vp9_cx()), }; + let mut c = unsafe { std::mem::MaybeUninit::zeroed().assume_init() }; + call_vpx!(vpx_codec_enc_config_default(i, &mut c, 0)); - let c = match config.codec { - VpxVideoCodecId::VP8 => webrtc::vp8::enc_cfg(i, &config)?, - VpxVideoCodecId::VP9 => webrtc::vp9::enc_cfg(i, &config)?, + // https://www.webmproject.org/docs/encoder-parameters/ + // default: c.rc_min_quantizer = 0, c.rc_max_quantizer = 63 + // try rc_resize_allowed later + + c.g_w = config.width; + c.g_h = config.height; + c.g_timebase.num = config.timebase[0]; + c.g_timebase.den = config.timebase[1]; + c.rc_target_bitrate = config.bitrate; + c.rc_undershoot_pct = 95; + c.rc_dropframe_thresh = 25; + c.g_threads = if config.num_threads == 0 { + num_cpus::get() as _ + } else { + config.num_threads }; + c.g_error_resilient = VPX_ERROR_RESILIENT_DEFAULT; + // https://developers.google.com/media/vp9/bitrate-modes/ + // Constant Bitrate mode (CBR) is recommended for live streaming with VP9. + c.rc_end_usage = vpx_rc_mode::VPX_CBR; + // c.kf_min_dist = 0; + // c.kf_max_dist = 999999; + c.kf_mode = vpx_kf_mode::VPX_KF_DISABLED; // reduce bandwidth a lot + + /* + The VPX encoder supports two-pass encoding for rate control purposes. + In two-pass encoding, the entire encoding process is performed twice. + The first pass generates new control parameters for the second pass. + + This approach enables the best PSNR at the same bit rate. + */ let mut ctx = Default::default(); call_vpx!(vpx_codec_enc_init_ver( @@ -68,9 +96,50 @@ impl EncoderApi for VpxEncoder { 0, VPX_ENCODER_ABI_VERSION as _ )); - match config.codec { - VpxVideoCodecId::VP8 => webrtc::vp8::set_control(&mut ctx, &c)?, - VpxVideoCodecId::VP9 => webrtc::vp9::set_control(&mut ctx, &c)?, + + if config.codec == VpxVideoCodecId::VP9 { + // set encoder internal speed settings + // in ffmpeg, it is --speed option + /* + set to 0 or a positive value 1-16, the codec will try to adapt its + complexity depending on the time it spends encoding. Increasing this + number will make the speed go up and the quality go down. + Negative values mean strict enforcement of this + while positive values are adaptive + */ + /* https://developers.google.com/media/vp9/live-encoding + Speed 5 to 8 should be used for live / real-time encoding. + Lower numbers (5 or 6) are higher quality but require more CPU power. + Higher numbers (7 or 8) will be lower quality but more manageable for lower latency + use cases and also for lower CPU power devices such as mobile. + */ + call_vpx!(vpx_codec_control_(&mut ctx, VP8E_SET_CPUUSED as _, 7,)); + // set row level multi-threading + /* + as some people in comments and below have already commented, + more recent versions of libvpx support -row-mt 1 to enable tile row + multi-threading. This can increase the number of tiles by up to 4x in VP9 + (since the max number of tile rows is 4, regardless of video height). + To enable this, use -tile-rows N where N is the number of tile rows in + log2 units (so -tile-rows 1 means 2 tile rows and -tile-rows 2 means 4 tile + rows). The total number of active threads will then be equal to + $tile_rows * $tile_columns + */ + call_vpx!(vpx_codec_control_( + &mut ctx, + VP9E_SET_ROW_MT as _, + 1 as c_int + )); + + call_vpx!(vpx_codec_control_( + &mut ctx, + VP9E_SET_TILE_COLUMNS as _, + 4 as c_int + )); + } else if config.codec == VpxVideoCodecId::VP8 { + // https://github.com/webmproject/libvpx/blob/972149cafeb71d6f08df89e91a0130d6a38c4b15/vpx/vp8cx.h#L172 + // https://groups.google.com/a/webmproject.org/g/webm-discuss/c/DJhSrmfQ61M + call_vpx!(vpx_codec_control_(&mut ctx, VP8E_SET_CPUUSED as _, 12,)); } Ok(Self { @@ -218,10 +287,13 @@ pub struct VpxEncoderConfig { pub width: c_uint, /// The height (in pixels). pub height: c_uint, + /// The timebase numerator and denominator (in seconds). + pub timebase: [c_int; 2], /// The target bitrate (in kilobits per second). pub bitrate: c_uint, /// The codec pub codec: VpxVideoCodecId, + pub num_threads: u32, } #[derive(Clone, Copy, Debug)] @@ -417,370 +489,3 @@ impl Drop for Image { } unsafe impl Send for vpx_codec_ctx_t {} - -mod webrtc { - use super::*; - - const K_QP_MAX: u32 = 25; // worth adjusting - const MODE: VideoCodecMode = VideoCodecMode::KScreensharing; - const K_RTP_TICKS_PER_SECOND: i32 = 90000; - const NUMBER_OF_TEMPORAL_LAYERS: u32 = 1; - const DENOISING_ON: bool = true; - const FRAME_DROP_ENABLED: bool = false; - - #[allow(dead_code)] - #[derive(Debug, PartialEq, Eq)] - enum VideoCodecMode { - KRealtimeVideo, - KScreensharing, - } - - #[allow(dead_code)] - #[derive(Debug, PartialEq, Eq)] - enum VideoCodecComplexity { - KComplexityLow = -1, - KComplexityNormal = 0, - KComplexityHigh = 1, - KComplexityHigher = 2, - KComplexityMax = 3, - } - - // https://webrtc.googlesource.com/src/+/refs/heads/main/modules/video_coding/codecs/vp9/libvpx_vp9_encoder.cc - pub mod vp9 { - use super::*; - const SVC: bool = false; - // https://webrtc.googlesource.com/src/+/refs/heads/main/api/video_codecs/video_encoder.cc#35 - const KEY_FRAME_INTERVAL: u32 = 3000; - const ADAPTIVE_QP_MODE: bool = true; - - pub fn enc_cfg( - i: *const vpx_codec_iface_t, - cfg: &VpxEncoderConfig, - ) -> ResultType { - let mut c: vpx_codec_enc_cfg_t = - unsafe { std::mem::MaybeUninit::zeroed().assume_init() }; - call_vpx!(vpx_codec_enc_config_default(i, &mut c, 0)); - - // kProfile0 - c.g_bit_depth = vpx_bit_depth::VPX_BITS_8; - c.g_profile = 0; - c.g_input_bit_depth = 8; - - c.g_w = cfg.width; - c.g_h = cfg.height; - c.rc_target_bitrate = cfg.bitrate; // in kbit/s - c.g_error_resilient = if SVC { VPX_ERROR_RESILIENT_DEFAULT } else { 0 }; - c.g_timebase.num = 1; - c.g_timebase.den = K_RTP_TICKS_PER_SECOND; - c.g_lag_in_frames = 0; - c.rc_dropframe_thresh = if FRAME_DROP_ENABLED { 30 } else { 0 }; - c.rc_end_usage = vpx_rc_mode::VPX_CBR; - c.g_pass = vpx_enc_pass::VPX_RC_ONE_PASS; - c.rc_min_quantizer = if MODE == VideoCodecMode::KScreensharing { - 8 - } else { - 2 - }; - c.rc_max_quantizer = K_QP_MAX; - c.rc_undershoot_pct = 50; - c.rc_overshoot_pct = 50; - c.rc_buf_initial_sz = 500; - c.rc_buf_optimal_sz = 600; - c.rc_buf_sz = 1000; - // Key-frame interval is enforced manually by this wrapper. - c.kf_mode = vpx_kf_mode::VPX_KF_DISABLED; - // TODO(webm:1592): work-around for libvpx issue, as it can still - // put some key-frames at will even in VPX_KF_DISABLED kf_mode. - c.kf_max_dist = KEY_FRAME_INTERVAL; - c.kf_min_dist = c.kf_max_dist; - c.rc_resize_allowed = 0; - // Determine number of threads based on the image size and #cores. - c.g_threads = number_of_threads(c.g_w, c.g_h, num_cpus::get()); - - c.temporal_layering_mode = - vp9e_temporal_layering_mode::VP9E_TEMPORAL_LAYERING_MODE_NOLAYERING as _; - c.ts_number_layers = 1; - c.ts_rate_decimator[0] = 1; - c.ts_periodicity = 1; - c.ts_layer_id[0] = 0; - - Ok(c) - } - - pub fn set_control(ctx: *mut vpx_codec_ctx_t, cfg: &vpx_codec_enc_cfg_t) -> ResultType<()> { - use vp8e_enc_control_id::*; - - macro_rules! call_ctl { - ($ctx:expr, $vpxe:expr, $arg:expr) => {{ - call_vpx_allow_err!(vpx_codec_control_($ctx, $vpxe as i32, $arg)); - }}; - } - call_ctl!( - ctx, - VP8E_SET_MAX_INTRA_BITRATE_PCT, - max_intra_target(cfg.rc_buf_optimal_sz) - ); - call_ctl!(ctx, VP9E_SET_AQ_MODE, if ADAPTIVE_QP_MODE { 3 } else { 0 }); - call_ctl!(ctx, VP9E_SET_FRAME_PARALLEL_DECODING, 0); - call_ctl!(ctx, VP9E_SET_SVC_GF_TEMPORAL_REF, 0); - call_ctl!( - ctx, - VP8E_SET_CPUUSED, - get_default_performance_flags(cfg.g_w, cfg.g_h).0 - ); - call_ctl!(ctx, VP9E_SET_TILE_COLUMNS, cfg.g_threads >> 1); - // Turn on row-based multithreading. - call_ctl!(ctx, VP9E_SET_ROW_MT, 1); - let denoising = DENOISING_ON - && allow_denoising() - && get_default_performance_flags(cfg.g_w, cfg.g_h).1; - call_ctl!( - ctx, - VP9E_SET_NOISE_SENSITIVITY, - if denoising { 1 } else { 0 } - ); - if MODE == VideoCodecMode::KScreensharing { - call_ctl!(ctx, VP9E_SET_TUNE_CONTENT, 1); - } - // Enable encoder skip of static/low content blocks. - call_ctl!(ctx, VP8E_SET_STATIC_THRESHOLD, 1); - - Ok(()) - } - - // return (base_layer_speed, allow_denoising) - fn get_default_performance_flags(width: u32, height: u32) -> (u32, bool) { - if cfg!(any( - target_arch = "arm", - target_arch = "aarch64", - target_os = "android" - )) { - (8, true) - } else if width * height < 352 * 288 { - (5, true) - } else if width * height < 1920 * 1080 { - (7, true) - } else { - (9, false) - } - } - - fn allow_denoising() -> bool { - // Do not enable the denoiser on ARM since optimization is pending. - // Denoiser is on by default on other platforms. - if cfg!(any( - target_arch = "arm", - target_arch = "aarch64", - target_os = "android" - )) { - false - } else { - true - } - } - - fn number_of_threads(width: u32, height: u32, number_of_cores: usize) -> u32 { - // Keep the number of encoder threads equal to the possible number of column - // tiles, which is (1, 2, 4, 8). See comments below for VP9E_SET_TILE_COLUMNS. - if width * height >= 1280 * 720 && number_of_cores > 4 { - return 4; - } else if width * height >= 640 * 360 && number_of_cores > 2 { - return 2; - } else { - // Use 2 threads for low res on ARM. - #[cfg(any(target_arch = "arm", target_arch = "aarch64", target_os = "android"))] - if width * height >= 320 * 180 && number_of_cores > 2 { - return 2; - } - // 1 thread less than VGA. - return 1; - } - } - } - - // https://webrtc.googlesource.com/src/+/refs/heads/main/modules/video_coding/codecs/vp8/libvpx_vp8_encoder.cc - pub mod vp8 { - use super::*; - // https://webrtc.googlesource.com/src/+/refs/heads/main/api/video_codecs/video_encoder.cc#23 - const DISABLE_KEY_FRAME_INTERVAL: bool = true; - const KEY_FRAME_INTERVAL: u32 = 3000; - const COMPLEXITY: VideoCodecComplexity = VideoCodecComplexity::KComplexityNormal; - const K_TOKEN_PARTITIONS: vp8e_token_partitions = - vp8e_token_partitions::VP8_ONE_TOKENPARTITION; - - pub fn enc_cfg( - i: *const vpx_codec_iface_t, - cfg: &VpxEncoderConfig, - ) -> ResultType { - let mut c: vpx_codec_enc_cfg_t = - unsafe { std::mem::MaybeUninit::zeroed().assume_init() }; - call_vpx!(vpx_codec_enc_config_default(i, &mut c, 0)); - - c.g_w = cfg.width; - c.g_h = cfg.height; - c.g_timebase.num = 1; - c.g_timebase.den = K_RTP_TICKS_PER_SECOND; - c.g_lag_in_frames = 0; - c.g_error_resilient = if NUMBER_OF_TEMPORAL_LAYERS > 1 { - VPX_ERROR_RESILIENT_DEFAULT - } else { - 0 - }; - c.rc_end_usage = vpx_rc_mode::VPX_CBR; - c.g_pass = vpx_enc_pass::VPX_RC_ONE_PASS; - c.rc_resize_allowed = 0; - c.rc_min_quantizer = if MODE == VideoCodecMode::KScreensharing { - 12 - } else { - 2 - }; - c.rc_max_quantizer = K_QP_MAX; - c.rc_undershoot_pct = 100; - c.rc_overshoot_pct = 15; - c.rc_buf_initial_sz = 500; - c.rc_buf_optimal_sz = 600; - c.rc_buf_sz = 1000; - if !DISABLE_KEY_FRAME_INTERVAL && KEY_FRAME_INTERVAL > 0 { - c.kf_mode = vpx_kf_mode::VPX_KF_AUTO; - c.kf_max_dist = KEY_FRAME_INTERVAL; - } else { - c.kf_mode = vpx_kf_mode::VPX_KF_DISABLED; - } - c.g_threads = number_of_threads(c.g_w, c.g_h, num_cpus::get()); - c.rc_target_bitrate = cfg.bitrate; - c.rc_dropframe_thresh = if FRAME_DROP_ENABLED { 30 } else { 0 }; - - Ok(c) - } - - pub fn set_control(ctx: *mut vpx_codec_ctx_t, cfg: &vpx_codec_enc_cfg_t) -> ResultType<()> { - use vp8e_enc_control_id::*; - - macro_rules! call_ctl { - ($ctx:expr, $vpxe:expr, $arg:expr) => {{ - call_vpx_allow_err!(vpx_codec_control_($ctx, $vpxe as i32, $arg)); - }}; - } - call_ctl!( - ctx, - VP8E_SET_STATIC_THRESHOLD, - if MODE == VideoCodecMode::KScreensharing { - 100 - } else { - 1 - } - ); - call_ctl!( - ctx, - VP8E_SET_CPUUSED, - get_cpu_speed(cfg.g_w, cfg.g_h, num_cpus::get()) - ); - - call_ctl!(ctx, VP8E_SET_TOKEN_PARTITIONS, K_TOKEN_PARTITIONS); - call_ctl!( - ctx, - VP8E_SET_MAX_INTRA_BITRATE_PCT, - max_intra_target(cfg.rc_buf_optimal_sz) - ); - call_ctl!( - ctx, - VP8E_SET_SCREEN_CONTENT_MODE, - if MODE == VideoCodecMode::KScreensharing { - 2 // On with more aggressive rate control. - } else { - 0 - } - ); - - Ok(()) - } - - fn get_cpu_speed_default() -> i32 { - match COMPLEXITY { - VideoCodecComplexity::KComplexityHigh => -5, - VideoCodecComplexity::KComplexityHigher => -4, - VideoCodecComplexity::KComplexityMax => -3, - _ => -6, - } - } - - fn get_cpu_speed(width: u32, height: u32, number_of_cores: usize) -> i32 { - if cfg!(any( - target_arch = "arm", - target_arch = "aarch64", - target_os = "android" - )) { - if number_of_cores <= 3 { - -12 - } else if width * height <= 352 * 288 { - -8 - } else if width * height <= 640 * 480 { - -10 - } else { - -12 - } - } else { - let cpu_speed_default = get_cpu_speed_default(); - if width * height < 352 * 288 { - if cpu_speed_default < -4 { - -4 - } else { - cpu_speed_default - } - } else { - cpu_speed_default - } - } - } - - fn number_of_threads(width: u32, height: u32, cpus: usize) -> u32 { - if cfg!(target_os = "android") { - if width * height >= 320 * 180 { - if cpus >= 4 { - // 3 threads for CPUs with 4 and more cores since most of times only 4 - // cores will be active. - 3 - } else if cpus == 3 || cpus == 2 { - 2 - } else { - 1 - } - } else { - 1 - } - } else { - if width * height >= 1920 * 1080 && cpus > 8 { - 8 // 8 threads for 1080p on high perf machines. - } else if width * height > 1280 * 960 && cpus >= 6 { - // 3 threads for 1080p. - return 3; - } else if width * height > 640 * 480 && cpus >= 3 { - // Default 2 threads for qHD/HD, but allow 3 if core count is high enough, - // as this will allow more margin for high-core/low clock machines or if - // not built with highest optimization. - if cpus >= 6 { - 3 - } else { - 2 - } - } else { - // 1 thread for VGA or less. - 1 - } - } - } - } - - fn max_intra_target(optimal_buffer_size: u32) -> u32 { - const MAX_FRAMERATE: u32 = 60; // TODO - let scale_par: f32 = 0.5; - let target_pct: u32 = - ((optimal_buffer_size as f32) * scale_par * MAX_FRAMERATE as f32 / 10.0) as u32; - let min_intra_size: u32 = 300; - if target_pct < min_intra_size { - min_intra_size - } else { - target_pct - } - } -} diff --git a/src/server/video_service.rs b/src/server/video_service.rs index e917c205c..ad83e71d6 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -535,12 +535,14 @@ fn run(sp: GenericService) -> ResultType<()> { EncoderCfg::VPX(VpxEncoderConfig { width: c.width as _, height: c.height as _, + timebase: [1, 1000], // Output timestamp precision bitrate, codec: if name == scrap::CodecName::VP8 { VpxVideoCodecId::VP8 } else { VpxVideoCodecId::VP9 }, + num_threads: (num_cpus::get() / 2) as _, }) } scrap::CodecName::AV1 => EncoderCfg::AOM(AomEncoderConfig { From 2133f910899629d88ad59d89a4d3de119129c82e Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 19 Jul 2023 13:11:24 +0800 Subject: [PATCH 174/612] codec set quality seperately and refactor network delay Signed-off-by: 21pages --- libs/scrap/examples/benchmark.rs | 46 +++-- libs/scrap/examples/record-screen.rs | 36 ++-- libs/scrap/src/common/aom.rs | 79 ++++++-- libs/scrap/src/common/codec.rs | 36 +++- libs/scrap/src/common/hwcodec.rs | 39 +++- libs/scrap/src/common/vpxcodec.rs | 78 +++++++- src/server/connection.rs | 15 +- src/server/video_qos.rs | 277 +++++++++++++++++---------- src/server/video_service.rs | 32 ++-- 9 files changed, 457 insertions(+), 181 deletions(-) diff --git a/libs/scrap/examples/benchmark.rs b/libs/scrap/examples/benchmark.rs index eccf502d9..c121636d3 100644 --- a/libs/scrap/examples/benchmark.rs +++ b/libs/scrap/examples/benchmark.rs @@ -2,7 +2,7 @@ use docopt::Docopt; use hbb_common::env_logger::{init_from_env, Env, DEFAULT_FILTER_ENV}; use scrap::{ aom::{AomDecoder, AomDecoderConfig, AomEncoder, AomEncoderConfig}, - codec::{EncoderApi, EncoderCfg}, + codec::{EncoderApi, EncoderCfg, Quality as Q}, Capturer, Display, TraitCapturer, VpxDecoder, VpxDecoderConfig, VpxEncoder, VpxEncoderConfig, VpxVideoCodecId::{self, *}, STRIDE_ALIGN, @@ -15,13 +15,14 @@ const USAGE: &'static str = " Codec benchmark. Usage: - benchmark [--count=COUNT] [--bitrate=KBS] [--hw-pixfmt=PIXFMT] + benchmark [--count=COUNT] [--quality=QUALITY] [--hw-pixfmt=PIXFMT] benchmark (-h | --help) Options: -h --help Show this screen. --count=COUNT Capture frame count [default: 100]. - --bitrate=KBS Video bitrate in kilobits per second [default: 5000]. + --quality=QUALITY Video quality [default: Balanced]. + Valid values: Best, Balanced, Low. --hw-pixfmt=PIXFMT Hardware codec pixfmt. [default: i420] Valid values: i420, nv12. "; @@ -29,7 +30,7 @@ Options: #[derive(Debug, serde::Deserialize)] struct Args { flag_count: usize, - flag_bitrate: usize, + flag_quality: Quality, flag_hw_pixfmt: Pixfmt, } @@ -39,20 +40,32 @@ enum Pixfmt { NV12, } +#[derive(Debug, serde::Deserialize)] +enum Quality { + Best, + Balanced, + Low, +} + fn main() { init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "info")); let args: Args = Docopt::new(USAGE) .and_then(|d| d.deserialize()) .unwrap_or_else(|e| e.exit()); - let bitrate_k = args.flag_bitrate; + let quality = args.flag_quality; let yuv_count = args.flag_count; let (yuvs, width, height) = capture_yuv(yuv_count); println!( - "benchmark {}x{} bitrate:{}k hw_pixfmt:{:?}", - width, height, bitrate_k, args.flag_hw_pixfmt + "benchmark {}x{} quality:{:?}k hw_pixfmt:{:?}", + width, height, quality, args.flag_hw_pixfmt ); - [VP8, VP9].map(|c| test_vpx(c, &yuvs, width, height, bitrate_k, yuv_count)); - test_av1(&yuvs, width, height, bitrate_k, yuv_count); + let quality = match quality { + Quality::Best => Q::Best, + Quality::Balanced => Q::Balanced, + Quality::Low => Q::Low, + }; + [VP8, VP9].map(|c| test_vpx(c, &yuvs, width, height, quality, yuv_count)); + test_av1(&yuvs, width, height, quality, yuv_count); #[cfg(feature = "hwcodec")] { use hwcodec::AVPixelFormat; @@ -61,7 +74,7 @@ fn main() { Pixfmt::NV12 => AVPixelFormat::AV_PIX_FMT_NV12, }; let yuvs = hw::vpx_yuv_to_hw_yuv(yuvs, width, height, hw_pixfmt); - hw::test(&yuvs, width, height, bitrate_k, yuv_count, hw_pixfmt); + hw::test(&yuvs, width, height, quality, yuv_count, hw_pixfmt); } } @@ -95,14 +108,14 @@ fn test_vpx( yuvs: &Vec>, width: usize, height: usize, - bitrate_k: usize, + quality: Q, yuv_count: usize, ) { let config = EncoderCfg::VPX(VpxEncoderConfig { width: width as _, height: height as _, timebase: [1, 1000], - bitrate: bitrate_k as _, + quality, codec: codec_id, num_threads: (num_cpus::get() / 2) as _, }); @@ -148,11 +161,11 @@ fn test_vpx( ); } -fn test_av1(yuvs: &Vec>, width: usize, height: usize, bitrate_k: usize, yuv_count: usize) { +fn test_av1(yuvs: &Vec>, width: usize, height: usize, quality: Q, yuv_count: usize) { let config = EncoderCfg::AOM(AomEncoderConfig { width: width as _, height: height as _, - bitrate: bitrate_k as _, + quality, }); let mut encoder = AomEncoder::new(config).unwrap(); let start = Instant::now(); @@ -208,17 +221,18 @@ mod hw { yuvs: &Vec>, width: usize, height: usize, - bitrate_k: usize, + quality: Q, yuv_count: usize, pixfmt: AVPixelFormat, ) { + let bitrate = scrap::hwcodec::HwEncoder::convert_quality(quality); let ctx = EncodeContext { name: String::from(""), width: width as _, height: height as _, pixfmt, align: 0, - bitrate: (bitrate_k * 1000) as _, + bitrate: bitrate as i32 * 1000, timebase: [1, 30], gop: 60, quality: Quality_Default, diff --git a/libs/scrap/examples/record-screen.rs b/libs/scrap/examples/record-screen.rs index 10ad66e09..5b8d40d4a 100644 --- a/libs/scrap/examples/record-screen.rs +++ b/libs/scrap/examples/record-screen.rs @@ -13,7 +13,7 @@ use std::time::{Duration, Instant}; use std::{io, thread}; use docopt::Docopt; -use scrap::codec::{EncoderApi, EncoderCfg}; +use scrap::codec::{EncoderApi, EncoderCfg, Quality as Q}; use webm::mux; use webm::mux::Track; @@ -24,17 +24,18 @@ const USAGE: &'static str = " Simple WebM screen capture. Usage: - record-screen [--time=] [--fps=] [--bv=] [--ba=] [--codec CODEC] + record-screen [--time=] [--fps=] [--quality=] [--ba=] [--codec CODEC] record-screen (-h | --help) Options: - -h --help Show this screen. - --time= Recording duration in seconds. - --fps= Frames per second [default: 30]. - --bv= Video bitrate in kilobits per second [default: 5000]. - --ba= Audio bitrate in kilobits per second [default: 96]. - --codec CODEC Configure the codec used. [default: vp9] - Valid values: vp8, vp9. + -h --help Show this screen. + --time= Recording duration in seconds. + --fps= Frames per second [default: 30]. + --quality= Video quality [default: Balanced]. + Valid values: Best, Balanced, Low. + --ba= Audio bitrate in kilobits per second [default: 96]. + --codec CODEC Configure the codec used. [default: vp9] + Valid values: vp8, vp9. "; #[derive(Debug, serde::Deserialize)] @@ -43,7 +44,14 @@ struct Args { flag_codec: Codec, flag_time: Option, flag_fps: u64, - flag_bv: u32, + flag_quality: Quality, +} + +#[derive(Debug, serde::Deserialize)] +enum Quality { + Best, + Balanced, + Low, } #[derive(Debug, serde::Deserialize)] @@ -97,12 +105,16 @@ fn main() -> io::Result<()> { let mut vt = webm.add_video_track(width, height, None, mux_codec); // Setup the encoder. - + let quality = match args.flag_quality { + Quality::Best => Q::Best, + Quality::Balanced => Q::Balanced, + Quality::Low => Q::Low, + }; let mut vpx = vpx_encode::VpxEncoder::new(EncoderCfg::VPX(vpx_encode::VpxEncoderConfig { width, height, timebase: [1, 1000], - bitrate: args.flag_bv, + quality, codec: vpx_codec, num_threads: 0, })) diff --git a/libs/scrap/src/common/aom.rs b/libs/scrap/src/common/aom.rs index b9748efda..a2064e4c2 100644 --- a/libs/scrap/src/common/aom.rs +++ b/libs/scrap/src/common/aom.rs @@ -6,6 +6,7 @@ include!(concat!(env!("OUT_DIR"), "/aom_ffi.rs")); +use crate::codec::{base_bitrate, Quality}; use crate::{codec::EncoderApi, EncodeFrame, STRIDE_ALIGN}; use crate::{common::GoogleImage, generate_call_macro, generate_call_ptr_macro, Error, Result}; use hbb_common::{ @@ -43,7 +44,7 @@ impl Default for aom_image_t { pub struct AomEncoderConfig { pub width: u32, pub height: u32, - pub bitrate: u32, + pub quality: Quality, } pub struct AomEncoder { @@ -56,7 +57,6 @@ pub struct AomEncoder { mod webrtc { use super::*; - const kQpMin: u32 = 10; const kUsageProfile: u32 = AOM_USAGE_REALTIME; const kMinQindex: u32 = 145; // Min qindex threshold for QP scaling. const kMaxQindex: u32 = 205; // Max qindex threshold for QP scaling. @@ -65,7 +65,8 @@ mod webrtc { const kRtpTicksPerSecond: i32 = 90000; const kMinimumFrameRate: f64 = 1.0; - const kQpMax: u32 = 25; // to-do: webrtc use dynamic value, no more than 63 + pub const DEFAULT_Q_MAX: u32 = 56; // no more than 63 + pub const DEFAULT_Q_MIN: u32 = 12; // no more than 63, litter than q_max fn number_of_threads(width: u32, height: u32, number_of_cores: usize) -> u32 { // Keep the number of encoder threads equal to the possible number of @@ -78,7 +79,7 @@ mod webrtc { } else { // Use 2 threads for low res on ARM. #[cfg(any(target_arch = "arm", target_arch = "aarch64", target_os = "android"))] - if (width * height >= 320 * 180 && number_of_cores > 2) { + if width * height >= 320 * 180 && number_of_cores > 2 { return 2; } // 1 thread less than VGA. @@ -122,11 +123,23 @@ mod webrtc { c.g_threads = number_of_threads(cfg.width, cfg.height, num_cpus::get()); c.g_timebase.num = 1; c.g_timebase.den = kRtpTicksPerSecond; - c.rc_target_bitrate = cfg.bitrate; // kilobits/sec. c.g_input_bit_depth = kBitDepth; c.kf_mode = aom_kf_mode::AOM_KF_DISABLED; - c.rc_min_quantizer = kQpMin; - c.rc_max_quantizer = kQpMax; + let (q_min, q_max, b) = AomEncoder::convert_quality(cfg.quality); + if q_min > 0 && q_min < q_max && q_max < 64 { + c.rc_min_quantizer = q_min; + c.rc_max_quantizer = q_max; + } else { + c.rc_min_quantizer = DEFAULT_Q_MIN; + c.rc_max_quantizer = DEFAULT_Q_MAX; + } + let base_bitrate = base_bitrate(cfg.width as _, cfg.height as _); + let bitrate = base_bitrate * b / 100; + if bitrate > 0 { + c.rc_target_bitrate = bitrate; + } else { + c.rc_target_bitrate = base_bitrate; + } c.rc_undershoot_pct = 50; c.rc_overshoot_pct = 50; c.rc_buf_initial_sz = 600; @@ -259,11 +272,24 @@ impl EncoderApi for AomEncoder { true } - fn set_bitrate(&mut self, bitrate: u32) -> ResultType<()> { - let mut new_enc_cfg = unsafe { *self.ctx.config.enc.to_owned() }; - new_enc_cfg.rc_target_bitrate = bitrate; - call_aom!(aom_codec_enc_config_set(&mut self.ctx, &new_enc_cfg)); - return Ok(()); + fn set_quality(&mut self, quality: Quality) -> ResultType<()> { + let mut c = unsafe { *self.ctx.config.enc.to_owned() }; + let (q_min, q_max, b) = Self::convert_quality(quality); + if q_min > 0 && q_min < q_max && q_max < 64 { + c.rc_min_quantizer = q_min; + c.rc_max_quantizer = q_max; + } + let bitrate = base_bitrate(self.width as _, self.height as _) * b / 100; + if bitrate > 0 { + c.rc_target_bitrate = bitrate; + } + call_aom!(aom_codec_enc_config_set(&mut self.ctx, &c)); + Ok(()) + } + + fn bitrate(&self) -> u32 { + let c = unsafe { *self.ctx.config.enc.to_owned() }; + c.rc_target_bitrate } } @@ -319,6 +345,35 @@ impl AomEncoder { ..Default::default() } } + + pub fn convert_quality(quality: Quality) -> (u32, u32, u32) { + // we can use lower bitrate for av1 + match quality { + Quality::Best => (12, 25, 100), + Quality::Balanced => (12, 35, 100 * 2 / 3), + Quality::Low => (18, 45, 50), + Quality::Custom(b) => { + let (q_min, q_max) = Self::calc_q_values(b); + (q_min, q_max, b) + } + } + } + + #[inline] + fn calc_q_values(b: u32) -> (u32, u32) { + let b = std::cmp::min(b, 200); + let q_min1: i32 = 24; + let q_min2 = 12; + let q_max1 = 45; + let q_max2 = 25; + + let t = b as f32 / 200.0; + + let q_min: u32 = ((1.0 - t) * q_min1 as f32 + t * q_min2 as f32).round() as u32; + let q_max = ((1.0 - t) * q_max1 as f32 + t * q_max2 as f32).round() as u32; + + (q_min, q_max) + } } impl Drop for AomEncoder { diff --git a/libs/scrap/src/common/codec.rs b/libs/scrap/src/common/codec.rs index 03e8a19a2..90b65c6cf 100644 --- a/libs/scrap/src/common/codec.rs +++ b/libs/scrap/src/common/codec.rs @@ -42,7 +42,7 @@ pub struct HwEncoderConfig { pub name: String, pub width: usize, pub height: usize, - pub bitrate: i32, + pub quality: Quality, } #[derive(Debug, Clone)] @@ -61,7 +61,9 @@ pub trait EncoderApi { fn use_yuv(&self) -> bool; - fn set_bitrate(&mut self, bitrate: u32) -> ResultType<()>; + fn set_quality(&mut self, quality: Quality) -> ResultType<()>; + + fn bitrate(&self) -> u32; } pub struct Encoder { @@ -471,3 +473,33 @@ fn enable_hwcodec_option() -> bool { } return true; // default is true } + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Quality { + Best, + Balanced, + Low, + Custom(u32), +} + +impl Default for Quality { + fn default() -> Self { + Self::Balanced + } +} + +pub fn base_bitrate(width: u32, height: u32) -> u32 { + #[allow(unused_mut)] + let mut base_bitrate = ((width * height) / 1000) as u32; // same as 1.1.9 + if base_bitrate == 0 { + base_bitrate = 1920 * 1080 / 1000; + } + #[cfg(target_os = "android")] + { + // fix when android screen shrinks + let fix = crate::Display::fix_quality() as u32; + log::debug!("Android screen, fix quality:{}", fix); + base_bitrate = base_bitrate * fix; + } + base_bitrate +} diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index 50ad33099..76c475970 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -1,5 +1,5 @@ use crate::{ - codec::{EncoderApi, EncoderCfg}, + codec::{base_bitrate, EncoderApi, EncoderCfg}, hw, ImageFormat, ImageRgb, HW_STRIDE_ALIGN, }; use hbb_common::{ @@ -34,6 +34,9 @@ pub struct HwEncoder { yuv: Vec, pub format: DataFormat, pub pixfmt: AVPixelFormat, + width: u32, + height: u32, + bitrate: u32, //kbs } impl EncoderApi for HwEncoder { @@ -43,13 +46,19 @@ impl EncoderApi for HwEncoder { { match cfg { EncoderCfg::HW(config) => { + let b = Self::convert_quality(config.quality); + let base_bitrate = base_bitrate(config.width as _, config.height as _); + let mut bitrate = base_bitrate * b / 100; + if base_bitrate <= 0 { + bitrate = base_bitrate; + } let ctx = EncodeContext { name: config.name.clone(), width: config.width as _, height: config.height as _, pixfmt: DEFAULT_PIXFMT, align: HW_STRIDE_ALIGN as _, - bitrate: config.bitrate * 1000, + bitrate: bitrate as i32 * 1000, timebase: DEFAULT_TIME_BASE, gop: DEFAULT_GOP, quality: DEFAULT_HW_QUALITY, @@ -70,6 +79,9 @@ impl EncoderApi for HwEncoder { yuv: vec![], format, pixfmt: ctx.pixfmt, + width: ctx.width as _, + height: ctx.height as _, + bitrate, }), Err(_) => Err(anyhow!(format!("Failed to create encoder"))), } @@ -114,10 +126,19 @@ impl EncoderApi for HwEncoder { false } - fn set_bitrate(&mut self, bitrate: u32) -> ResultType<()> { - self.encoder.set_bitrate((bitrate * 1000) as _).ok(); + fn set_quality(&mut self, quality: crate::codec::Quality) -> ResultType<()> { + let b = Self::convert_quality(quality); + let bitrate = base_bitrate(self.width as _, self.height as _) * b / 100; + if bitrate > 0 { + self.encoder.set_bitrate((bitrate * 1000) as _).ok(); + self.bitrate = bitrate; + } Ok(()) } + + fn bitrate(&self) -> u32 { + self.bitrate + } } impl HwEncoder { @@ -159,6 +180,16 @@ impl HwEncoder { Err(_) => Ok(Vec::::new()), } } + + pub fn convert_quality(quality: crate::codec::Quality) -> u32 { + use crate::codec::Quality; + match quality { + Quality::Best => 150, + Quality::Balanced => 100, + Quality::Low => 50, + Quality::Custom(b) => b, + } + } } pub struct HwDecoder { diff --git a/libs/scrap/src/common/vpxcodec.rs b/libs/scrap/src/common/vpxcodec.rs index 801527811..1717047b8 100644 --- a/libs/scrap/src/common/vpxcodec.rs +++ b/libs/scrap/src/common/vpxcodec.rs @@ -7,7 +7,7 @@ use hbb_common::log; use hbb_common::message_proto::{EncodedVideoFrame, EncodedVideoFrames, Message, VideoFrame}; use hbb_common::ResultType; -use crate::codec::EncoderApi; +use crate::codec::{base_bitrate, EncoderApi, Quality}; use crate::{GoogleImage, STRIDE_ALIGN}; use super::vpx::{vp8e_enc_control_id::*, vpx_codec_err_t::*, *}; @@ -19,6 +19,9 @@ use std::{ptr, slice}; generate_call_macro!(call_vpx, false); generate_call_ptr_macro!(call_vpx_ptr); +const DEFAULT_QP_MAX: u32 = 56; // no more than 63 +const DEFAULT_QP_MIN: u32 = 12; // no more than 63 + #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] pub enum VpxVideoCodecId { VP8, @@ -64,8 +67,9 @@ impl EncoderApi for VpxEncoder { c.g_h = config.height; c.g_timebase.num = config.timebase[0]; c.g_timebase.den = config.timebase[1]; - c.rc_target_bitrate = config.bitrate; c.rc_undershoot_pct = 95; + // When the data buffer falls below this percentage of fullness, a dropped frame is indicated. Set the threshold to zero (0) to disable this feature. + // In dynamic scenes, low bitrate gets low fps while high bitrate gets high fps. c.rc_dropframe_thresh = 25; c.g_threads = if config.num_threads == 0 { num_cpus::get() as _ @@ -79,6 +83,21 @@ impl EncoderApi for VpxEncoder { // c.kf_min_dist = 0; // c.kf_max_dist = 999999; c.kf_mode = vpx_kf_mode::VPX_KF_DISABLED; // reduce bandwidth a lot + let (q_min, q_max, b) = Self::convert_quality(config.quality); + if q_min > 0 && q_min < q_max && q_max < 64 { + c.rc_min_quantizer = q_min; + c.rc_max_quantizer = q_max; + } else { + c.rc_min_quantizer = DEFAULT_QP_MIN; + c.rc_max_quantizer = DEFAULT_QP_MAX; + } + let base_bitrate = base_bitrate(config.width as _, config.height as _); + let bitrate = base_bitrate * b / 100; + if bitrate > 0 { + c.rc_target_bitrate = bitrate; + } else { + c.rc_target_bitrate = base_bitrate; + } /* The VPX encoder supports two-pass encoding for rate control purposes. @@ -177,11 +196,24 @@ impl EncoderApi for VpxEncoder { true } - fn set_bitrate(&mut self, bitrate: u32) -> ResultType<()> { - let mut new_enc_cfg = unsafe { *self.ctx.config.enc.to_owned() }; - new_enc_cfg.rc_target_bitrate = bitrate; - call_vpx!(vpx_codec_enc_config_set(&mut self.ctx, &new_enc_cfg)); - return Ok(()); + fn set_quality(&mut self, quality: Quality) -> ResultType<()> { + let mut c = unsafe { *self.ctx.config.enc.to_owned() }; + let (q_min, q_max, b) = Self::convert_quality(quality); + if q_min > 0 && q_min < q_max && q_max < 64 { + c.rc_min_quantizer = q_min; + c.rc_max_quantizer = q_max; + } + let bitrate = base_bitrate(self.width as _, self.height as _) * b / 100; + if bitrate > 0 { + c.rc_target_bitrate = bitrate; + } + call_vpx!(vpx_codec_enc_config_set(&mut self.ctx, &c)); + Ok(()) + } + + fn bitrate(&self) -> u32 { + let c = unsafe { *self.ctx.config.enc.to_owned() }; + c.rc_target_bitrate } } @@ -258,6 +290,34 @@ impl VpxEncoder { ..Default::default() } } + + fn convert_quality(quality: Quality) -> (u32, u32, u32) { + match quality { + Quality::Best => (6, 45, 150), + Quality::Balanced => (12, 56, 100 * 2 / 3), + Quality::Low => (18, 56, 50), + Quality::Custom(b) => { + let (q_min, q_max) = Self::calc_q_values(b); + (q_min, q_max, b) + } + } + } + + #[inline] + fn calc_q_values(b: u32) -> (u32, u32) { + let b = std::cmp::min(b, 200); + let q_min1: i32 = 36; + let q_min2 = 12; + let q_max1 = 56; + let q_max2 = 37; + + let t = b as f32 / 200.0; + + let q_min: u32 = ((1.0 - t) * q_min1 as f32 + t * q_min2 as f32).round() as u32; + let q_max = ((1.0 - t) * q_max1 as f32 + t * q_max2 as f32).round() as u32; + + (q_min, q_max) + } } impl Drop for VpxEncoder { @@ -289,8 +349,8 @@ pub struct VpxEncoderConfig { pub height: c_uint, /// The timebase numerator and denominator (in seconds). pub timebase: [c_int; 2], - /// The target bitrate (in kilobits per second). - pub bitrate: c_uint, + /// The image quality + pub quality: Quality, /// The codec pub codec: VpxVideoCodecId, pub num_threads: u32, diff --git a/src/server/connection.rs b/src/server/connection.rs index 4f2321f9d..84f540027 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -196,6 +196,7 @@ pub struct Connection { #[cfg(not(any(feature = "flatpak", feature = "appimage")))] tx_desktop_ready: mpsc::Sender<()>, closed: bool, + delay_response_instant: Instant, } impl ConnInner { @@ -326,6 +327,7 @@ impl Connection { #[cfg(not(any(feature = "flatpak", feature = "appimage")))] tx_desktop_ready: _tx_desktop_ready, closed: false, + delay_response_instant: Instant::now(), }; if !conn.on_open(addr).await { conn.closed = true; @@ -593,18 +595,19 @@ impl Connection { break; } let time = get_time(); + let mut qos = video_service::VIDEO_QOS.lock().unwrap(); if time > 0 && conn.last_test_delay == 0 { conn.last_test_delay = time; let mut msg_out = Message::new(); - let qos = video_service::VIDEO_QOS.lock().unwrap(); msg_out.set_test_delay(TestDelay{ time, last_delay:conn.network_delay.unwrap_or_default(), - target_bitrate:qos.bitrate(), + target_bitrate: qos.bitrate(), ..Default::default() }); conn.inner.send(msg_out.into()); } + qos.user_delay_response_elapsed(conn.inner.id(), conn.delay_response_instant.elapsed().as_millis()); } } } @@ -1188,7 +1191,9 @@ impl Connection { #[inline] #[cfg(not(any(target_os = "android", target_os = "ios")))] fn input_pointer(&self, msg: PointerDeviceEvent, conn_id: i32) { - self.tx_input.send(MessageInput::Pointer((msg, conn_id))).ok(); + self.tx_input + .send(MessageInput::Pointer((msg, conn_id))) + .ok(); } #[inline] @@ -1553,6 +1558,7 @@ impl Connection { .unwrap() .user_network_delay(self.inner.id(), new_delay); self.network_delay = Some(new_delay); + self.delay_response_instant = Instant::now(); } } else if let Some(message::Union::SwitchSidesResponse(_s)) = msg.union { #[cfg(feature = "flutter")] @@ -1590,7 +1596,8 @@ impl Connection { self.input_mouse(me, self.inner.id()); } } - Some(message::Union::PointerDeviceEvent(pde)) => { + Some(message::Union::PointerDeviceEvent(pde)) => + { #[cfg(not(any(target_os = "android", target_os = "ios")))] if self.peer_keyboard_enabled() { MOUSE_MOVE_TIME.store(get_time(), Ordering::SeqCst); diff --git a/src/server/video_qos.rs b/src/server/video_qos.rs index 727c1ea35..18b5f50de 100644 --- a/src/server/video_qos.rs +++ b/src/server/video_qos.rs @@ -1,4 +1,5 @@ use super::*; +use scrap::codec::Quality; use std::time::Duration; pub const FPS: u32 = 30; pub const MIN_FPS: u32 = 1; @@ -18,21 +19,29 @@ impl Percent for ImageQuality { } } -#[derive(Default, Debug)] +#[derive(Default, Debug, Copy, Clone)] +struct Delay { + state: DelayState, + staging_state: DelayState, + delay: u32, + counter: u32, + slower_than_old_state: Option, +} + +#[derive(Default, Debug, Copy, Clone)] struct UserData { full_speed_fps: Option, custom_fps: Option, - quality: Option<(i32, i64)>, // (quality, time) - delay: Option<(DelayState, u32, usize)>, // (state, ms, counter) + quality: Option<(i64, Quality)>, // (time, quality) + delay: Option, + response_delayed: bool, } pub struct VideoQoS { - width: u32, - height: u32, fps: u32, - target_bitrate: u32, - updated: bool, + quality: Quality, users: HashMap, + bitrate_store: u32, } #[derive(PartialEq, Debug, Clone, Copy)] @@ -43,6 +52,12 @@ enum DelayState { Broken = 1000, } +impl Default for DelayState { + fn default() -> Self { + DelayState::Normal + } +} + impl DelayState { fn from_delay(delay: u32) -> Self { if delay > DelayState::Broken as u32 { @@ -61,24 +76,19 @@ impl Default for VideoQoS { fn default() -> Self { VideoQoS { fps: FPS, - width: 0, - height: 0, - target_bitrate: 0, - updated: false, + quality: Default::default(), users: Default::default(), + bitrate_store: 0, } } } -impl VideoQoS { - pub fn set_size(&mut self, width: u32, height: u32) { - if width == 0 || height == 0 { - return; - } - self.width = width; - self.height = height; - } +#[derive(Debug, PartialEq, Eq)] +pub enum RefreshType { + SetImageQuality, +} +impl VideoQoS { pub fn spf(&self) -> Duration { Duration::from_secs_f32(1. / (self.fps as f32)) } @@ -87,24 +97,23 @@ impl VideoQoS { self.fps } - pub fn bitrate(&self) -> u32 { - self.target_bitrate + pub fn store_bitrate(&mut self, bitrate: u32) { + self.bitrate_store = bitrate; } - pub fn check_if_updated(&mut self) -> bool { - if self.updated { - self.updated = false; - return true; - } - return false; + pub fn bitrate(&self) -> u32 { + self.bitrate_store + } + + pub fn quality(&self) -> Quality { + self.quality } pub fn abr_enabled() -> bool { "N" != Config::get_option("enable-abr") } - pub fn refresh(&mut self) { - let mut updated = false; + pub fn refresh(&mut self, typ: Option) { // fps let user_fps = |u: &UserData| { // full_speed_fps @@ -117,13 +126,19 @@ impl VideoQoS { } // delay if let Some(delay) = u.delay { - fps = match delay.0 { + fps = match delay.state { DelayState::Normal => fps, DelayState::LowDelay => fps, DelayState::HighDelay => fps / 2, DelayState::Broken => fps / 4, } } + // delay response + if u.response_delayed { + if fps > MIN_FPS + 2 { + fps = MIN_FPS + 2; + } + } return fps; }; let mut fps = self @@ -136,64 +151,79 @@ impl VideoQoS { if fps > MAX_FPS { fps = MAX_FPS; } - if fps != self.fps { - self.fps = fps; - updated = true; - } + self.fps = fps; // quality // latest image quality - let latest = self + let latest_quality = self .users .iter() - // .map(|(_, u)| u.quality) - .filter(|u| u.1.quality != None) - .max_by(|u1, u2| { - u1.1.quality - .unwrap_or_default() - .1 - .cmp(&u2.1.quality.unwrap_or_default().1) - }); - let quality = if let Some((id, data)) = latest { - let mut quality = data.quality.unwrap_or_default().0; - if quality <= 0 { - quality = ImageQuality::Balanced.as_percent() as _; - } - // use latest's delay for quality - if Self::abr_enabled() { - if let Some(Some((delay, _, _))) = self.users.get(id).map(|u| u.delay) { - quality = match delay { - DelayState::Normal => quality, - DelayState::LowDelay => std::cmp::min(quality, 50), - DelayState::HighDelay => std::cmp::min(quality, 25), - DelayState::Broken => 10, - }; + .map(|(_, u)| u.quality) + .filter(|q| *q != None) + .max_by(|a, b| a.unwrap_or_default().0.cmp(&b.unwrap_or_default().0)) + .unwrap_or_default() + .unwrap_or_default() + .1; + let mut quality = latest_quality; + + // network delay + if Self::abr_enabled() && typ != Some(RefreshType::SetImageQuality) { + // max delay + let delay = self + .users + .iter() + .map(|u| u.1.delay) + .filter(|d| d.is_some()) + .max_by(|a, b| { + (a.unwrap_or_default().state as u32).cmp(&(b.unwrap_or_default().state as u32)) + }); + let delay = delay.unwrap_or_default().unwrap_or_default().state; + if delay != DelayState::Normal { + match self.quality { + Quality::Best => { + quality = Quality::Balanced; + } + Quality::Balanced => { + quality = Quality::Low; + } + Quality::Low => { + quality = Quality::Low; + } + Quality::Custom(b) => match delay { + DelayState::LowDelay => { + quality = + Quality::Custom(if b >= 150 { 100 } else { std::cmp::min(50, b) }); + } + DelayState::HighDelay => { + quality = + Quality::Custom(if b >= 100 { 50 } else { std::cmp::min(25, b) }); + } + DelayState::Broken => { + quality = + Quality::Custom(if b >= 50 { 25 } else { std::cmp::min(10, b) }); + } + DelayState::Normal => {} + }, + } + } else { + match self.quality { + Quality::Low => { + if latest_quality == Quality::Best { + quality = Quality::Balanced; + } + } + Quality::Custom(current_b) => { + if let Quality::Custom(latest_b) = latest_quality { + if current_b < latest_b / 2 { + quality = Quality::Custom(latest_b / 2); + } + } + } + _ => {} } } - quality - } else { - ImageQuality::Balanced.as_percent() as _ - }; - // bitrate - #[allow(unused_mut)] - let mut base_bitrate = ((self.width * self.height) / 800) as u32; - if base_bitrate == 0 { - base_bitrate = 1920 * 1080 / 800; } - #[cfg(target_os = "android")] - { - // fix when android screen shrinks - let fix = scrap::Display::fix_quality() as u32; - log::debug!("Android screen, fix quality:{}", fix); - base_bitrate = base_bitrate * fix; - } - let target_bitrate = base_bitrate * quality as u32 / 100; - if self.target_bitrate != target_bitrate { - self.target_bitrate = target_bitrate; - updated = true; - } - - self.updated = updated; + self.quality = quality; } pub fn user_custom_fps(&mut self, id: i32, fps: u32) { @@ -211,7 +241,7 @@ impl VideoQoS { }, ); } - self.refresh(); + self.refresh(None); } pub fn user_full_speed_fps(&mut self, id: i32, full_speed_fps: u32) { @@ -226,23 +256,27 @@ impl VideoQoS { }, ); } - self.refresh(); + self.refresh(None); } pub fn user_image_quality(&mut self, id: i32, image_quality: i32) { - let convert_quality = |q: i32| -> i32 { + // https://github.com/rustdesk/rustdesk/blob/d716e2b40c38737f1aa3f16de0dec67394a6ac68/src/server/video_service.rs#L493 + let convert_quality = |q: i32| { if q == ImageQuality::Balanced.value() { - 100 * 2 / 3 + Quality::Balanced } else if q == ImageQuality::Low.value() { - 100 / 2 + Quality::Low } else if q == ImageQuality::Best.value() { - 100 + Quality::Best } else { - (q >> 8 & 0xFF) * 2 + let mut b = (q >> 8 & 0xFF) * 2; + b = std::cmp::max(b, 10); + b = std::cmp::min(b, 200); + Quality::Custom(b as u32) } }; - let quality = Some((convert_quality(image_quality), hbb_common::get_time())); + let quality = Some((hbb_common::get_time(), convert_quality(image_quality))); if let Some(user) = self.users.get_mut(&id) { user.quality = quality; } else { @@ -254,43 +288,78 @@ impl VideoQoS { }, ); } - self.refresh(); + self.refresh(Some(RefreshType::SetImageQuality)); } pub fn user_network_delay(&mut self, id: i32, delay: u32) { - let mut refresh = true; let state = DelayState::from_delay(delay); + let debounce = 3; if let Some(user) = self.users.get_mut(&id) { - if let Some((old_state, old_delay, mut counter)) = user.delay { - let new_delay = (delay + old_delay) / 2; - let new_state = DelayState::from_delay(new_delay); - if old_state == new_state { - counter += 1; + if let Some(d) = &mut user.delay { + d.delay = (delay + d.delay) / 2; + let new_state = DelayState::from_delay(d.delay); + let slower_than_old_state = new_state as i32 - d.staging_state as i32; + let slower_than_old_state = if slower_than_old_state > 0 { + Some(true) + } else if slower_than_old_state < 0 { + Some(false) } else { - counter = 0; + None + }; + if d.slower_than_old_state == slower_than_old_state { + let old_counter = d.counter; + d.counter += delay / 1000 + 1; + if old_counter < debounce && d.counter >= debounce { + d.counter = 0; + d.state = d.staging_state; + d.staging_state = new_state; + } + if d.counter % debounce == 0 { + self.refresh(None); + } + } else { + d.counter = 0; + d.staging_state = new_state; + d.slower_than_old_state = slower_than_old_state; } - let debounce = 3; - refresh = counter == debounce; - user.delay = Some((new_state, new_delay, counter)); } else { - user.delay = Some((state, delay, 0)); + user.delay = Some(Delay { + state: DelayState::Normal, + staging_state: state, + delay, + counter: 0, + slower_than_old_state: None, + }); } } else { self.users.insert( id, UserData { - delay: Some((state, delay, 0)), + delay: Some(Delay { + state: DelayState::Normal, + staging_state: state, + delay, + counter: 0, + slower_than_old_state: None, + }), ..Default::default() }, ); } - if refresh { - self.refresh(); + } + + pub fn user_delay_response_elapsed(&mut self, id: i32, elapsed: u128) { + if let Some(user) = self.users.get_mut(&id) { + let old = user.response_delayed; + user.response_delayed = elapsed > 3000; + if old != user.response_delayed { + self.refresh(None); + } } } pub fn on_connection_close(&mut self, id: i32) { self.users.remove(&id); - self.refresh(); + self.refresh(None); } } diff --git a/src/server/video_service.rs b/src/server/video_service.rs index ad83e71d6..7c63acb68 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -514,13 +514,12 @@ fn run(sp: GenericService) -> ResultType<()> { let mut c = get_capturer(true, last_portable_service_running)?; let mut video_qos = VIDEO_QOS.lock().unwrap(); - video_qos.set_size(c.width as _, c.height as _); - video_qos.refresh(); - let mut spf = video_qos.spf(); - let bitrate = video_qos.bitrate(); + video_qos.refresh(None); + let mut spf; + let mut quality = video_qos.quality(); let abr = VideoQoS::abr_enabled(); drop(video_qos); - log::info!("init bitrate={}, abr enabled:{}", bitrate, abr); + log::info!("init quality={:?}, abr enabled:{}", quality, abr); let encoder_cfg = match Encoder::negotiated_codec() { scrap::CodecName::H264(name) | scrap::CodecName::H265(name) => { @@ -528,7 +527,7 @@ fn run(sp: GenericService) -> ResultType<()> { name, width: c.width, height: c.height, - bitrate: bitrate as _, + quality, }) } name @ (scrap::CodecName::VP8 | scrap::CodecName::VP9) => { @@ -536,7 +535,7 @@ fn run(sp: GenericService) -> ResultType<()> { width: c.width as _, height: c.height as _, timebase: [1, 1000], // Output timestamp precision - bitrate, + quality, codec: if name == scrap::CodecName::VP8 { VpxVideoCodecId::VP8 } else { @@ -548,7 +547,7 @@ fn run(sp: GenericService) -> ResultType<()> { scrap::CodecName::AV1 => EncoderCfg::AOM(AomEncoderConfig { width: c.width as _, height: c.height as _, - bitrate: bitrate as _, + quality, }), }; @@ -558,6 +557,7 @@ fn run(sp: GenericService) -> ResultType<()> { Err(err) => bail!("Failed to create encoder: {}", err), } c.set_use_yuv(encoder.use_yuv()); + VIDEO_QOS.lock().unwrap().store_bitrate(encoder.bitrate()); if *SWITCH.lock().unwrap() { log::debug!("Broadcasting display switch"); @@ -611,16 +611,12 @@ fn run(sp: GenericService) -> ResultType<()> { check_uac_switch(c.privacy_mode_id, c._capturer_privacy_mode_id)?; let mut video_qos = VIDEO_QOS.lock().unwrap(); - if video_qos.check_if_updated() { - log::debug!( - "qos is updated, target_bitrate:{}, fps:{}", - video_qos.bitrate(), - video_qos.fps() - ); - if video_qos.bitrate() > 0 { - allow_err!(encoder.set_bitrate(video_qos.bitrate())); - } - spf = video_qos.spf(); + spf = video_qos.spf(); + if quality != video_qos.quality() { + log::debug!("quality: {:?} -> {:?}", quality, video_qos.quality()); + quality = video_qos.quality(); + allow_err!(encoder.set_quality(quality)); + video_qos.store_bitrate(encoder.bitrate()); } drop(video_qos); From 31b3c5d721a10545caec08d930cfc78cd65ead03 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 20 Jul 2023 21:16:38 +0800 Subject: [PATCH 175/612] codec thread count depending on cpu condition Signed-off-by: 21pages --- Cargo.lock | 4 +- libs/hbb_common/src/lib.rs | 1 - libs/hbb_common/src/platform/mod.rs | 3 + libs/hbb_common/src/platform/windows.rs | 149 ++++++++++++++++++++++++ libs/scrap/examples/benchmark.rs | 18 +-- libs/scrap/examples/record-screen.rs | 1 - libs/scrap/src/common/aom.rs | 35 +----- libs/scrap/src/common/codec.rs | 56 +++++++-- libs/scrap/src/common/hwcodec.rs | 5 +- libs/scrap/src/common/vpxcodec.rs | 16 +-- src/client.rs | 37 ++++++ src/ipc.rs | 12 ++ src/platform/windows.rs | 12 +- src/server.rs | 22 ++-- src/server/video_service.rs | 1 - 15 files changed, 281 insertions(+), 91 deletions(-) create mode 100644 libs/hbb_common/src/platform/windows.rs diff --git a/Cargo.lock b/Cargo.lock index 43de5e23c..dec261d9d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2987,8 +2987,8 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hwcodec" -version = "0.1.0" -source = "git+https://github.com/21pages/hwcodec?branch=stable#3ea79865a10387b7e1b7630c2ae068bd2081f680" +version = "0.1.1" +source = "git+https://github.com/21pages/hwcodec?branch=stable#d5daa75d8cb273781dc21676cb00edda5a4cf8b9" dependencies = [ "bindgen 0.59.2", "cc", diff --git a/libs/hbb_common/src/lib.rs b/libs/hbb_common/src/lib.rs index 22347840c..5c618182f 100644 --- a/libs/hbb_common/src/lib.rs +++ b/libs/hbb_common/src/lib.rs @@ -46,7 +46,6 @@ pub mod keyboard; pub use dlopen; #[cfg(not(any(target_os = "android", target_os = "ios")))] pub use machine_uid; -#[cfg(not(any(target_os = "android", target_os = "ios")))] pub use sysinfo; pub use toml; pub use uuid; diff --git a/libs/hbb_common/src/platform/mod.rs b/libs/hbb_common/src/platform/mod.rs index 137868e12..78cf61e97 100644 --- a/libs/hbb_common/src/platform/mod.rs +++ b/libs/hbb_common/src/platform/mod.rs @@ -4,6 +4,9 @@ pub mod linux; #[cfg(target_os = "macos")] pub mod macos; +#[cfg(target_os = "windows")] +pub mod windows; + #[cfg(not(debug_assertions))] use crate::{config::Config, log}; #[cfg(not(debug_assertions))] diff --git a/libs/hbb_common/src/platform/windows.rs b/libs/hbb_common/src/platform/windows.rs new file mode 100644 index 000000000..250ca8d3e --- /dev/null +++ b/libs/hbb_common/src/platform/windows.rs @@ -0,0 +1,149 @@ +use std::{ + collections::VecDeque, + os::windows::raw::HANDLE, + sync::{Arc, Mutex}, + time::Instant, +}; +use winapi::{ + shared::minwindef::{DWORD, FALSE}, + um::{ + handleapi::CloseHandle, + pdh::{ + PdhAddCounterA, PdhCloseQuery, PdhCollectQueryData, PdhCollectQueryDataEx, + PdhGetFormattedCounterValue, PdhOpenQueryA, PDH_FMT_COUNTERVALUE, PDH_FMT_DOUBLE, + PDH_HCOUNTER, PDH_HQUERY, + }, + synchapi::{CreateEventA, WaitForSingleObject}, + winbase::{INFINITE, WAIT_OBJECT_0}, + }, +}; + +lazy_static::lazy_static! { + static ref CPU_USAGE_ONE_MINUTE: Arc>> = Arc::new(Mutex::new(None)); +} + +// https://github.com/mgostIH/process_list/blob/master/src/windows/mod.rs +#[repr(transparent)] +pub struct RAIIHandle(pub HANDLE); + +impl Drop for RAIIHandle { + fn drop(&mut self) { + // This never gives problem except when running under a debugger. + unsafe { CloseHandle(self.0) }; + } +} + +#[repr(transparent)] +pub(self) struct RAIIPDHQuery(pub PDH_HQUERY); + +impl Drop for RAIIPDHQuery { + fn drop(&mut self) { + unsafe { PdhCloseQuery(self.0) }; + } +} + +pub unsafe fn start_cpu_performance_monitor() { + // Code from: + // https://learn.microsoft.com/en-us/windows/win32/perfctrs/collecting-performance-data + // https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhcollectquerydataex + // Why value lower than taskManager: + // https://aaron-margosis.medium.com/task-managers-cpu-numbers-are-all-but-meaningless-2d165b421e43 + // Therefore we should compare with Precess Explorer rather than taskManager + + std::thread::spawn(|| { + // load avg or cpu usage, test with prime95. + // Prefer cpu usage because we can get accurate value from Precess Explorer. + // const COUNTER_PATH: &'static str = "\\System\\Processor Queue Length\0"; + const COUNTER_PATH: &'static str = "\\Processor(_total)\\% Processor Time\0"; + const SAMPLE_INTERVAL: DWORD = 2; // 2 second + + let mut ret; + let mut query: PDH_HQUERY = std::mem::zeroed(); + ret = PdhOpenQueryA(std::ptr::null() as _, 0, &mut query); + if ret != 0 { + log::error!("PdhOpenQueryA failed: 0x{:X}", ret); + return; + } + let _query = RAIIPDHQuery(query); + let mut counter: PDH_HCOUNTER = std::mem::zeroed(); + ret = PdhAddCounterA(query, COUNTER_PATH.as_ptr() as _, 0, &mut counter); + if ret != 0 { + log::error!("PdhAddCounterA failed: 0x{:X}", ret); + return; + } + ret = PdhCollectQueryData(query); + if ret != 0 { + log::error!("PdhCollectQueryData failed: 0x{:X}", ret); + return; + } + let mut _counter_type: DWORD = 0; + let mut counter_value: PDH_FMT_COUNTERVALUE = std::mem::zeroed(); + let event = CreateEventA(std::ptr::null_mut(), FALSE, FALSE, std::ptr::null() as _); + if event.is_null() { + log::error!("CreateEventA failed: 0x{:X}", ret); + return; + } + let _event: RAIIHandle = RAIIHandle(event); + ret = PdhCollectQueryDataEx(query, SAMPLE_INTERVAL, event); + if ret != 0 { + log::error!("PdhCollectQueryDataEx failed: 0x{:X}", ret); + return; + } + + let mut queue: VecDeque = VecDeque::new(); + let mut recent_valid: VecDeque = VecDeque::new(); + loop { + // latest one minute + if queue.len() == 31 { + queue.pop_front(); + } + if recent_valid.len() == 31 { + recent_valid.pop_front(); + } + // allow get value within one minute + if queue.len() > 0 && recent_valid.iter().filter(|v| **v).count() > queue.len() / 2 { + let sum: f64 = queue.iter().map(|f| f.to_owned()).sum(); + let avg = sum / (queue.len() as f64); + *CPU_USAGE_ONE_MINUTE.lock().unwrap() = Some((avg, Instant::now())); + } else { + *CPU_USAGE_ONE_MINUTE.lock().unwrap() = None; + } + if WAIT_OBJECT_0 != WaitForSingleObject(event, INFINITE) { + recent_valid.push_back(false); + continue; + } + if PdhGetFormattedCounterValue( + counter, + PDH_FMT_DOUBLE, + &mut _counter_type, + &mut counter_value, + ) != 0 + || counter_value.CStatus != 0 + { + recent_valid.push_back(false); + continue; + } + queue.push_back(counter_value.u.doubleValue().clone()); + recent_valid.push_back(true); + } + }); +} + +pub fn cpu_uage_one_minute() -> Option { + let v = CPU_USAGE_ONE_MINUTE.lock().unwrap().clone(); + if let Some((v, instant)) = v { + if instant.elapsed().as_secs() < 30 { + return Some(v); + } + } + None +} + +pub fn sync_cpu_usage(cpu_usage: Option) { + let v = match cpu_usage { + Some(cpu_usage) => Some((cpu_usage, Instant::now())), + None => None, + }; + *CPU_USAGE_ONE_MINUTE.lock().unwrap() = v; + log::info!("cpu usage synced: {:?}", cpu_usage); +} diff --git a/libs/scrap/examples/benchmark.rs b/libs/scrap/examples/benchmark.rs index c121636d3..18e636d0c 100644 --- a/libs/scrap/examples/benchmark.rs +++ b/libs/scrap/examples/benchmark.rs @@ -1,8 +1,8 @@ use docopt::Docopt; use hbb_common::env_logger::{init_from_env, Env, DEFAULT_FILTER_ENV}; use scrap::{ - aom::{AomDecoder, AomDecoderConfig, AomEncoder, AomEncoderConfig}, - codec::{EncoderApi, EncoderCfg, Quality as Q}, + aom::{AomDecoder, AomEncoder, AomEncoderConfig}, + codec::{codec_thread_num, EncoderApi, EncoderCfg, Quality as Q}, Capturer, Display, TraitCapturer, VpxDecoder, VpxDecoderConfig, VpxEncoder, VpxEncoderConfig, VpxVideoCodecId::{self, *}, STRIDE_ALIGN, @@ -117,7 +117,6 @@ fn test_vpx( timebase: [1, 1000], quality, codec: codec_id, - num_threads: (num_cpus::get() / 2) as _, }); let mut encoder = VpxEncoder::new(config).unwrap(); let mut vpxs = vec![]; @@ -144,11 +143,7 @@ fn test_vpx( size / yuv_count ); - let mut decoder = VpxDecoder::new(VpxDecoderConfig { - codec: codec_id, - num_threads: (num_cpus::get() / 2) as _, - }) - .unwrap(); + let mut decoder = VpxDecoder::new(VpxDecoderConfig { codec: codec_id }).unwrap(); let start = Instant::now(); for vpx in vpxs { let _ = decoder.decode(&vpx); @@ -186,10 +181,7 @@ fn test_av1(yuvs: &Vec>, width: usize, height: usize, quality: Q, yuv_co start.elapsed() / yuv_count as _, size / yuv_count ); - let mut decoder = AomDecoder::new(AomDecoderConfig { - num_threads: (num_cpus::get() / 2) as _, - }) - .unwrap(); + let mut decoder = AomDecoder::new().unwrap(); let start = Instant::now(); for av1 in av1s { let _ = decoder.decode(&av1); @@ -237,6 +229,7 @@ mod hw { gop: 60, quality: Quality_Default, rc: RC_DEFAULT, + thread_count: codec_thread_num() as _, }; let encoders = Encoder::available_encoders(ctx.clone()); @@ -289,6 +282,7 @@ mod hw { let ctx = DecodeContext { name: info.name, device_type: info.hwdevice, + thread_count: codec_thread_num() as _, }; let mut decoder = Decoder::new(ctx.clone()).unwrap(); diff --git a/libs/scrap/examples/record-screen.rs b/libs/scrap/examples/record-screen.rs index 5b8d40d4a..2430e2872 100644 --- a/libs/scrap/examples/record-screen.rs +++ b/libs/scrap/examples/record-screen.rs @@ -116,7 +116,6 @@ fn main() -> io::Result<()> { timebase: [1, 1000], quality, codec: vpx_codec, - num_threads: 0, })) .unwrap(); diff --git a/libs/scrap/src/common/aom.rs b/libs/scrap/src/common/aom.rs index a2064e4c2..10886075d 100644 --- a/libs/scrap/src/common/aom.rs +++ b/libs/scrap/src/common/aom.rs @@ -6,7 +6,7 @@ include!(concat!(env!("OUT_DIR"), "/aom_ffi.rs")); -use crate::codec::{base_bitrate, Quality}; +use crate::codec::{base_bitrate, codec_thread_num, Quality}; use crate::{codec::EncoderApi, EncodeFrame, STRIDE_ALIGN}; use crate::{common::GoogleImage, generate_call_macro, generate_call_ptr_macro, Error, Result}; use hbb_common::{ @@ -68,25 +68,6 @@ mod webrtc { pub const DEFAULT_Q_MAX: u32 = 56; // no more than 63 pub const DEFAULT_Q_MIN: u32 = 12; // no more than 63, litter than q_max - fn number_of_threads(width: u32, height: u32, number_of_cores: usize) -> u32 { - // Keep the number of encoder threads equal to the possible number of - // column/row tiles, which is (1, 2, 4, 8). See comments below for - // AV1E_SET_TILE_COLUMNS/ROWS. - if width * height >= 640 * 360 && number_of_cores > 4 { - return 4; - } else if width * height >= 320 * 180 && number_of_cores > 2 { - return 2; - } else { - // Use 2 threads for low res on ARM. - #[cfg(any(target_arch = "arm", target_arch = "aarch64", target_os = "android"))] - if width * height >= 320 * 180 && number_of_cores > 2 { - return 2; - } - // 1 thread less than VGA. - return 1; - } - } - // Only positive speeds, range for real-time coding currently is: 6 - 8. // Lower means slower/better quality, higher means fastest/lower quality. fn get_cpu_speed(width: u32, height: u32) -> u32 { @@ -120,7 +101,7 @@ mod webrtc { // Overwrite default config with input encoder settings & RTC-relevant values. c.g_w = cfg.width; c.g_h = cfg.height; - c.g_threads = number_of_threads(cfg.width, cfg.height, num_cpus::get()); + c.g_threads = codec_thread_num() as _; c.g_timebase.num = 1; c.g_timebase.den = kRtpTicksPerSecond; c.g_input_bit_depth = kBitDepth; @@ -415,24 +396,16 @@ impl<'a> Iterator for EncodeFrames<'a> { } } -pub struct AomDecoderConfig { - pub num_threads: u32, -} - pub struct AomDecoder { ctx: aom_codec_ctx_t, } impl AomDecoder { - pub fn new(cfg: AomDecoderConfig) -> Result { + pub fn new() -> Result { let i = call_aom_ptr!(aom_codec_av1_dx()); let mut ctx = Default::default(); let cfg = aom_codec_dec_cfg_t { - threads: if cfg.num_threads == 0 { - num_cpus::get() as _ - } else { - cfg.num_threads - }, + threads: codec_thread_num() as _, w: 0, h: 0, allow_lowbitdepth: 1, diff --git a/libs/scrap/src/common/codec.rs b/libs/scrap/src/common/codec.rs index 90b65c6cf..11b42e769 100644 --- a/libs/scrap/src/common/codec.rs +++ b/libs/scrap/src/common/codec.rs @@ -11,14 +11,12 @@ use crate::mediacodec::{ MediaCodecDecoder, MediaCodecDecoders, H264_DECODER_SUPPORT, H265_DECODER_SUPPORT, }; use crate::{ - aom::{self, AomDecoder, AomDecoderConfig, AomEncoder, AomEncoderConfig}, + aom::{self, AomDecoder, AomEncoder, AomEncoderConfig}, common::GoogleImage, vpxcodec::{self, VpxDecoder, VpxDecoderConfig, VpxEncoder, VpxEncoderConfig, VpxVideoCodecId}, CodecName, ImageRgb, }; -#[cfg(not(any(target_os = "android", target_os = "ios")))] -use hbb_common::sysinfo::{System, SystemExt}; use hbb_common::{ anyhow::anyhow, config::PeerConfig, @@ -31,10 +29,15 @@ use hbb_common::{ }; #[cfg(any(feature = "hwcodec", feature = "mediacodec"))] use hbb_common::{config::Config2, lazy_static}; +use hbb_common::{ + sysinfo::{System, SystemExt}, + tokio::time::Instant, +}; lazy_static::lazy_static! { static ref PEER_DECODINGS: Arc>> = Default::default(); static ref CODEC_NAME: Arc> = Arc::new(Mutex::new(CodecName::VP9)); + static ref THREAD_LOG_TIME: Arc>> = Arc::new(Mutex::new(None)); } #[derive(Debug, Clone)] @@ -192,7 +195,6 @@ impl Encoder { #[allow(unused_mut)] let mut auto_codec = CodecName::VP9; - #[cfg(not(any(target_os = "android", target_os = "ios")))] if vp8_useable && System::new_all().total_memory() <= 4 * 1024 * 1024 * 1024 { // 4 Gb auto_codec = CodecName::VP8 @@ -276,18 +278,13 @@ impl Decoder { pub fn new() -> Decoder { let vp8 = VpxDecoder::new(VpxDecoderConfig { codec: VpxVideoCodecId::VP8, - num_threads: (num_cpus::get() / 2) as _, }) .unwrap(); let vp9 = VpxDecoder::new(VpxDecoderConfig { codec: VpxVideoCodecId::VP9, - num_threads: (num_cpus::get() / 2) as _, - }) - .unwrap(); - let av1 = AomDecoder::new(AomDecoderConfig { - num_threads: (num_cpus::get() / 2) as _, }) .unwrap(); + let av1 = AomDecoder::new().unwrap(); Decoder { vp8, vp9, @@ -503,3 +500,42 @@ pub fn base_bitrate(width: u32, height: u32) -> u32 { } base_bitrate } + +pub fn codec_thread_num() -> usize { + let max: usize = num_cpus::get(); + let mut res = 0; + let info; + #[cfg(windows)] + { + let percent = hbb_common::platform::windows::cpu_uage_one_minute(); + info = format!("cpu usage:{:?}", percent); + if let Some(pecent) = percent { + if pecent < 100.0 { + res = ((100.0 - pecent) * (max as f64) / 200.0).round() as usize; + } + } + } + #[cfg(not(windows))] + { + let s = System::new_all(); + // https://man7.org/linux/man-pages/man3/getloadavg.3.html + let avg = s.load_average(); + info = format!("cpu loadavg:{}", avg.one); + res = (((max as f64) - avg.one) * 0.5).round() as usize; + } + res = if res > 0 && res <= max / 2 { + res + } else { + std::cmp::max(1, max / 2) + }; + // avoid frequent log + let log = match THREAD_LOG_TIME.lock().unwrap().clone() { + Some(instant) => instant.elapsed().as_secs() > 1, + None => true, + }; + if log { + log::info!("cpu num: {max}, {info}, codec thread: {res}"); + *THREAD_LOG_TIME.lock().unwrap() = Some(Instant::now()); + } + res +} diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index 76c475970..94c30447e 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -1,5 +1,5 @@ use crate::{ - codec::{base_bitrate, EncoderApi, EncoderCfg}, + codec::{base_bitrate, codec_thread_num, EncoderApi, EncoderCfg}, hw, ImageFormat, ImageRgb, HW_STRIDE_ALIGN, }; use hbb_common::{ @@ -63,6 +63,7 @@ impl EncoderApi for HwEncoder { gop: DEFAULT_GOP, quality: DEFAULT_HW_QUALITY, rc: DEFAULT_RC, + thread_count: codec_thread_num() as _, // ffmpeg's thread_count is used for cpu }; let format = match Encoder::format_from_name(config.name.clone()) { Ok(format) => format, @@ -239,6 +240,7 @@ impl HwDecoder { let ctx = DecodeContext { name: info.name.clone(), device_type: info.hwdevice.clone(), + thread_count: codec_thread_num() as _, }; match Decoder::new(ctx) { Ok(decoder) => Ok(HwDecoder { decoder, info }), @@ -335,6 +337,7 @@ pub fn check_config() { gop: DEFAULT_GOP, quality: DEFAULT_HW_QUALITY, rc: DEFAULT_RC, + thread_count: 4, }; let encoders = CodecInfo::score(Encoder::available_encoders(ctx)); let decoders = CodecInfo::score(Decoder::available_decoders()); diff --git a/libs/scrap/src/common/vpxcodec.rs b/libs/scrap/src/common/vpxcodec.rs index 1717047b8..8fc33c4b2 100644 --- a/libs/scrap/src/common/vpxcodec.rs +++ b/libs/scrap/src/common/vpxcodec.rs @@ -7,7 +7,7 @@ use hbb_common::log; use hbb_common::message_proto::{EncodedVideoFrame, EncodedVideoFrames, Message, VideoFrame}; use hbb_common::ResultType; -use crate::codec::{base_bitrate, EncoderApi, Quality}; +use crate::codec::{base_bitrate, codec_thread_num, EncoderApi, Quality}; use crate::{GoogleImage, STRIDE_ALIGN}; use super::vpx::{vp8e_enc_control_id::*, vpx_codec_err_t::*, *}; @@ -71,11 +71,7 @@ impl EncoderApi for VpxEncoder { // When the data buffer falls below this percentage of fullness, a dropped frame is indicated. Set the threshold to zero (0) to disable this feature. // In dynamic scenes, low bitrate gets low fps while high bitrate gets high fps. c.rc_dropframe_thresh = 25; - c.g_threads = if config.num_threads == 0 { - num_cpus::get() as _ - } else { - config.num_threads - }; + c.g_threads = codec_thread_num() as _; c.g_error_resilient = VPX_ERROR_RESILIENT_DEFAULT; // https://developers.google.com/media/vp9/bitrate-modes/ // Constant Bitrate mode (CBR) is recommended for live streaming with VP9. @@ -353,13 +349,11 @@ pub struct VpxEncoderConfig { pub quality: Quality, /// The codec pub codec: VpxVideoCodecId, - pub num_threads: u32, } #[derive(Clone, Copy, Debug)] pub struct VpxDecoderConfig { pub codec: VpxVideoCodecId, - pub num_threads: u32, } pub struct EncodeFrames<'a> { @@ -406,11 +400,7 @@ impl VpxDecoder { }; let mut ctx = Default::default(); let cfg = vpx_codec_dec_cfg_t { - threads: if config.num_threads == 0 { - num_cpus::get() as _ - } else { - config.num_threads - }, + threads: codec_thread_num() as _, w: 0, h: 0, }; diff --git a/src/client.rs b/src/client.rs index 18a4bcb83..a123be71e 100644 --- a/src/client.rs +++ b/src/client.rs @@ -24,6 +24,8 @@ use sha2::{Digest, Sha256}; use uuid::Uuid; pub use file_trait::FileManager; +#[cfg(windows)] +use hbb_common::tokio; #[cfg(not(feature = "flutter"))] #[cfg(not(any(target_os = "android", target_os = "ios")))] use hbb_common::tokio::sync::mpsc::UnboundedSender; @@ -1788,6 +1790,8 @@ where let mut skip_beginning = 0; std::thread::spawn(move || { + #[cfg(windows)] + sync_cpu_usage(); let mut video_handler = VideoHandler::new(); loop { if let Ok(data) = video_receiver.recv() { @@ -1871,6 +1875,39 @@ pub fn start_audio_thread() -> MediaSender { audio_sender } +#[cfg(windows)] +fn sync_cpu_usage() { + use std::sync::Once; + static ONCE: Once = Once::new(); + ONCE.call_once(|| { + let t = std::thread::spawn(do_sync_cpu_usage); + t.join().ok(); + }); +} + +#[cfg(windows)] +#[tokio::main(flavor = "current_thread")] +async fn do_sync_cpu_usage() { + use crate::ipc::{connect, Data}; + let start = std::time::Instant::now(); + match connect(50, "").await { + Ok(mut conn) => { + if conn.send(&&Data::SyncWinCpuUsage(None)).await.is_ok() { + if let Ok(Some(data)) = conn.next_timeout(50).await { + match data { + Data::SyncWinCpuUsage(cpu_usage) => { + hbb_common::platform::windows::sync_cpu_usage(cpu_usage); + } + _ => {} + } + } + } + } + _ => {} + } + log::info!("{:?} used to sync cpu usage", start.elapsed()); +} + /// Handle latency test. /// /// # Arguments diff --git a/src/ipc.rs b/src/ipc.rs index 9eaade320..1d0c99ea3 100644 --- a/src/ipc.rs +++ b/src/ipc.rs @@ -229,6 +229,8 @@ pub enum Data { #[cfg(all(feature = "flutter", feature = "plugin_framework"))] #[cfg(not(any(target_os = "android", target_os = "ios")))] Plugin(Plugin), + #[cfg(windows)] + SyncWinCpuUsage(Option), } #[tokio::main(flavor = "current_thread")] @@ -452,6 +454,16 @@ async fn handle(data: Data, stream: &mut Connection) { .await ); } + #[cfg(windows)] + Data::SyncWinCpuUsage(None) => { + allow_err!( + stream + .send(&Data::SyncWinCpuUsage( + hbb_common::platform::windows::cpu_uage_one_minute() + )) + .await + ); + } Data::TestRendezvousServer => { crate::test_rendezvous_server(); } diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 16c4ead2f..3710389bf 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1547,18 +1547,8 @@ pub fn elevate_or_run_as_system(is_setup: bool, is_elevate: bool, is_run_as_syst } } -// https://github.com/mgostIH/process_list/blob/master/src/windows/mod.rs -#[repr(transparent)] -pub(self) struct RAIIHandle(pub HANDLE); - -impl Drop for RAIIHandle { - fn drop(&mut self) { - // This never gives problem except when running under a debugger. - unsafe { CloseHandle(self.0) }; - } -} - pub fn is_elevated(process_id: Option) -> ResultType { + use hbb_common::platform::windows::RAIIHandle; unsafe { let handle: HANDLE = match process_id { Some(process_id) => OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, process_id), diff --git a/src/server.rs b/src/server.rs index a8634f81f..a0e842d42 100644 --- a/src/server.rs +++ b/src/server.rs @@ -362,14 +362,7 @@ pub async fn start_server(is_server: bool) { log::info!("DISPLAY={:?}", std::env::var("DISPLAY")); log::info!("XAUTHORITY={:?}", std::env::var("XAUTHORITY")); } - #[cfg(feature = "hwcodec")] - { - use std::sync::Once; - static ONCE: Once = Once::new(); - ONCE.call_once(|| { - scrap::hwcodec::check_config_process(); - }) - } + call_once_each_process(); if is_server { crate::common::set_server_running(true); @@ -530,3 +523,16 @@ async fn sync_and_watch_config_dir() { } log::warn!("skipped config sync"); } + +fn call_once_each_process() { + use std::sync::Once; + static ONCE: Once = Once::new(); + ONCE.call_once(|| { + #[cfg(feature = "hwcodec")] + scrap::hwcodec::check_config_process(); + #[cfg(windows)] + unsafe { + hbb_common::platform::windows::start_cpu_performance_monitor(); + } + }) +} diff --git a/src/server/video_service.rs b/src/server/video_service.rs index 7c63acb68..109982985 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -541,7 +541,6 @@ fn run(sp: GenericService) -> ResultType<()> { } else { VpxVideoCodecId::VP9 }, - num_threads: (num_cpus::get() / 2) as _, }) } scrap::CodecName::AV1 => EncoderCfg::AOM(AomEncoderConfig { From aa740f4263abaa62dd572d36870de9ca33191ac5 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 22 Jul 2023 14:16:41 +0800 Subject: [PATCH 176/612] remove many unwrap and enum_value_or_default Signed-off-by: 21pages --- libs/hbb_common/src/fs.rs | 43 +++++++++++----- libs/hbb_common/src/lib.rs | 36 ++++++++----- libs/scrap/src/android/ffi.rs | 28 ++++++----- libs/scrap/src/common/codec.rs | 37 +++++++++----- libs/scrap/src/dxgi/mag.rs | 6 +-- libs/scrap/src/wayland/pipewire.rs | 13 ++--- .../dylib/examples/idd_controller.rs | 50 ++++++++++++++++--- src/cli.rs | 44 ++++++++++++---- src/client.rs | 30 +++++------ src/common.rs | 2 +- src/flutter.rs | 5 +- src/naming.rs | 17 +++---- src/platform/delegate.rs | 18 ++++--- src/platform/linux.rs | 9 +++- src/platform/macos.rs | 34 +++++++++---- src/platform/windows.rs | 37 +++++++------- src/privacy_win_mag.rs | 9 ++-- src/rendezvous_mediator.rs | 14 +++--- src/server/audio_service.rs | 15 +++--- src/server/connection.rs | 20 ++++---- src/server/input_service.rs | 6 +-- src/server/portable_service.rs | 28 ++++++++--- src/server/video_service.rs | 2 +- src/ui.rs | 15 ++++-- src/ui/remote.rs | 2 +- src/ui_interface.rs | 16 +++--- 26 files changed, 345 insertions(+), 191 deletions(-) diff --git a/libs/hbb_common/src/fs.rs b/libs/hbb_common/src/fs.rs index 6b8205acf..33902e575 100644 --- a/libs/hbb_common/src/fs.rs +++ b/libs/hbb_common/src/fs.rs @@ -6,7 +6,7 @@ use std::time::{Duration, SystemTime, UNIX_EPOCH}; use serde_derive::{Deserialize, Serialize}; use tokio::{fs::File, io::*}; -use crate::{bail, get_version_number, message_proto::*, ResultType, Stream}; +use crate::{anyhow::anyhow, bail, get_version_number, message_proto::*, ResultType, Stream}; // https://doc.rust-lang.org/std/os/windows/fs/trait.MetadataExt.html use crate::{ compress::{compress, decompress}, @@ -403,10 +403,18 @@ impl TransferJob { } if block.compressed { let tmp = decompress(&block.data); - self.file.as_mut().unwrap().write_all(&tmp).await?; + self.file + .as_mut() + .ok_or(anyhow!("file is None"))? + .write_all(&tmp) + .await?; self.finished_size += tmp.len() as u64; } else { - self.file.as_mut().unwrap().write_all(&block.data).await?; + self.file + .as_mut() + .ok_or(anyhow!("file is None"))? + .write_all(&block.data) + .await?; self.finished_size += block.data.len() as u64; } self.transferred += block.data.len() as u64; @@ -456,7 +464,13 @@ impl TransferJob { let mut compressed = false; let mut offset: usize = 0; loop { - match self.file.as_mut().unwrap().read(&mut buf[offset..]).await { + match self + .file + .as_mut() + .ok_or(anyhow!("file is None"))? + .read(&mut buf[offset..]) + .await + { Err(err) => { self.file_num += 1; self.file = None; @@ -501,7 +515,12 @@ impl TransferJob { async fn send_current_digest(&mut self, stream: &mut Stream) -> ResultType<()> { let mut msg = Message::new(); let mut resp = FileResponse::new(); - let meta = self.file.as_ref().unwrap().metadata().await?; + let meta = self + .file + .as_ref() + .ok_or(anyhow!("file is None"))? + .metadata() + .await?; let last_modified = meta .modified()? .duration_since(SystemTime::UNIX_EPOCH)? @@ -750,13 +769,13 @@ pub async fn handle_read_jobs( Ok(None) => { if job.job_completed() { finished.push(job.id()); - let err = job.job_error(); - if err.is_some() { - stream - .send(&new_error(job.id(), err.unwrap(), job.file_num())) - .await?; - } else { - stream.send(&new_done(job.id(), job.file_num())).await?; + match job.job_error() { + Some(err) => { + stream + .send(&new_error(job.id(), err, job.file_num())) + .await? + } + None => stream.send(&new_done(job.id(), job.file_num())).await?, } } else { // waiting confirmation. diff --git a/libs/hbb_common/src/lib.rs b/libs/hbb_common/src/lib.rs index 5c618182f..b8a7f4f2f 100644 --- a/libs/hbb_common/src/lib.rs +++ b/libs/hbb_common/src/lib.rs @@ -127,7 +127,7 @@ impl AddrMangle { SocketAddr::V4(addr_v4) => { let tm = (SystemTime::now() .duration_since(UNIX_EPOCH) - .unwrap() + .unwrap_or(std::time::Duration::ZERO) .as_micros() as u32) as u128; let ip = u32::from_le_bytes(addr_v4.ip().octets()) as u128; let port = addr.port() as u128; @@ -160,9 +160,9 @@ impl AddrMangle { if bytes.len() != 18 { return Config::get_any_listen_addr(false); } - let tmp: [u8; 2] = bytes[16..].try_into().unwrap(); + let tmp: [u8; 2] = bytes[16..].try_into().unwrap_or_default(); let port = u16::from_le_bytes(tmp); - let tmp: [u8; 16] = bytes[..16].try_into().unwrap(); + let tmp: [u8; 16] = bytes[..16].try_into().unwrap_or_default(); let ip = std::net::Ipv6Addr::from(tmp); return SocketAddr::new(IpAddr::V6(ip), port); } @@ -290,16 +290,24 @@ pub fn get_time() -> i64 { #[inline] pub fn is_ipv4_str(id: &str) -> bool { - regex::Regex::new(r"^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(:\d+)?$") - .unwrap() - .is_match(id) + if let Ok(reg) = regex::Regex::new( + r"^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(:\d+)?$", + ) { + reg.is_match(id) + } else { + false + } } #[inline] pub fn is_ipv6_str(id: &str) -> bool { - regex::Regex::new(r"^((([a-fA-F0-9]{1,4}:{1,2})+[a-fA-F0-9]{1,4})|(\[([a-fA-F0-9]{1,4}:{1,2})+[a-fA-F0-9]{1,4}\]:\d+))$") - .unwrap() - .is_match(id) + if let Ok(reg) = regex::Regex::new( + r"^((([a-fA-F0-9]{1,4}:{1,2})+[a-fA-F0-9]{1,4})|(\[([a-fA-F0-9]{1,4}:{1,2})+[a-fA-F0-9]{1,4}\]:\d+))$", + ) { + reg.is_match(id) + } else { + false + } } #[inline] @@ -312,11 +320,13 @@ pub fn is_domain_port_str(id: &str) -> bool { // modified regex for RFC1123 hostname. check https://stackoverflow.com/a/106223 for original version for hostname. // according to [TLD List](https://data.iana.org/TLD/tlds-alpha-by-domain.txt) version 2023011700, // there is no digits in TLD, and length is 2~63. - regex::Regex::new( + if let Ok(reg) = regex::Regex::new( r"(?i)^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z-]{0,61}[a-z]:\d{1,5}$", - ) - .unwrap() - .is_match(id) + ) { + reg.is_match(id) + } else { + false + } } pub fn init_log(_is_async: bool, _name: &str) -> Option { diff --git a/libs/scrap/src/android/ffi.rs b/libs/scrap/src/android/ffi.rs index 97d677272..6855fd3f6 100644 --- a/libs/scrap/src/android/ffi.rs +++ b/libs/scrap/src/android/ffi.rs @@ -99,9 +99,11 @@ pub extern "system" fn Java_com_carriez_flutter_1hbb_MainService_onVideoFrameUpd buffer: JObject, ) { let jb = JByteBuffer::from(buffer); - let data = env.get_direct_buffer_address(&jb).unwrap(); - let len = env.get_direct_buffer_capacity(&jb).unwrap(); - VIDEO_RAW.lock().unwrap().update(data, len); + if let Ok(data) = env.get_direct_buffer_address(&jb) { + if let Ok(len) = env.get_direct_buffer_capacity(&jb) { + VIDEO_RAW.lock().unwrap().update(data, len); + } + } } #[no_mangle] @@ -111,9 +113,11 @@ pub extern "system" fn Java_com_carriez_flutter_1hbb_MainService_onAudioFrameUpd buffer: JObject, ) { let jb = JByteBuffer::from(buffer); - let data = env.get_direct_buffer_address(&jb).unwrap(); - let len = env.get_direct_buffer_capacity(&jb).unwrap(); - AUDIO_RAW.lock().unwrap().update(data, len); + if let Ok(data) = env.get_direct_buffer_address(&jb) { + if let Ok(len) = env.get_direct_buffer_capacity(&jb) { + AUDIO_RAW.lock().unwrap().update(data, len); + } + } } #[no_mangle] @@ -142,12 +146,12 @@ pub extern "system" fn Java_com_carriez_flutter_1hbb_MainService_init( ctx: JObject, ) { log::debug!("MainService init from java"); - let jvm = env.get_java_vm().unwrap(); - - *JVM.write().unwrap() = Some(jvm); - - let context = env.new_global_ref(ctx).unwrap(); - *MAIN_SERVICE_CTX.write().unwrap() = Some(context); + if let Ok(jvm) = env.get_java_vm() { + *JVM.write().unwrap() = Some(jvm); + if let Ok(context) = env.new_global_ref(ctx) { + *MAIN_SERVICE_CTX.write().unwrap() = Some(context); + } + } } pub fn call_main_service_mouse_input(mask: i32, x: i32, y: i32) -> JniResult<()> { diff --git a/libs/scrap/src/common/codec.rs b/libs/scrap/src/common/codec.rs index 11b42e769..b6847dba0 100644 --- a/libs/scrap/src/common/codec.rs +++ b/libs/scrap/src/common/codec.rs @@ -19,20 +19,19 @@ use crate::{ use hbb_common::{ anyhow::anyhow, + bail, config::PeerConfig, log, message_proto::{ supported_decoding::PreferCodec, video_frame, EncodedVideoFrames, Message, SupportedDecoding, SupportedEncoding, }, + sysinfo::{System, SystemExt}, + tokio::time::Instant, ResultType, }; #[cfg(any(feature = "hwcodec", feature = "mediacodec"))] use hbb_common::{config::Config2, lazy_static}; -use hbb_common::{ - sysinfo::{System, SystemExt}, - tokio::time::Instant, -}; lazy_static::lazy_static! { static ref PEER_DECODINGS: Arc>> = Default::default(); @@ -88,9 +87,9 @@ impl DerefMut for Encoder { } pub struct Decoder { - vp8: VpxDecoder, - vp9: VpxDecoder, - av1: AomDecoder, + vp8: Option, + vp9: Option, + av1: Option, #[cfg(feature = "hwcodec")] hw: HwDecoders, #[cfg(feature = "hwcodec")] @@ -279,12 +278,12 @@ impl Decoder { let vp8 = VpxDecoder::new(VpxDecoderConfig { codec: VpxVideoCodecId::VP8, }) - .unwrap(); + .ok(); let vp9 = VpxDecoder::new(VpxDecoderConfig { codec: VpxVideoCodecId::VP9, }) - .unwrap(); - let av1 = AomDecoder::new().unwrap(); + .ok(); + let av1 = AomDecoder::new().ok(); Decoder { vp8, vp9, @@ -314,13 +313,25 @@ impl Decoder { ) -> ResultType { match frame { video_frame::Union::Vp8s(vp8s) => { - Decoder::handle_vpxs_video_frame(&mut self.vp8, vp8s, rgb) + if let Some(vp8) = &mut self.vp8 { + Decoder::handle_vpxs_video_frame(vp8, vp8s, rgb) + } else { + bail!("vp8 decoder not available"); + } } video_frame::Union::Vp9s(vp9s) => { - Decoder::handle_vpxs_video_frame(&mut self.vp9, vp9s, rgb) + if let Some(vp9) = &mut self.vp9 { + Decoder::handle_vpxs_video_frame(vp9, vp9s, rgb) + } else { + bail!("vp9 decoder not available"); + } } video_frame::Union::Av1s(av1s) => { - Decoder::handle_av1s_video_frame(&mut self.av1, av1s, rgb) + if let Some(av1) = &mut self.av1 { + Decoder::handle_av1s_video_frame(av1, av1s, rgb) + } else { + bail!("av1 decoder not available"); + } } #[cfg(feature = "hwcodec")] video_frame::Union::H264s(h264s) => { diff --git a/libs/scrap/src/dxgi/mag.rs b/libs/scrap/src/dxgi/mag.rs index 62e90c08b..ac94472c0 100644 --- a/libs/scrap/src/dxgi/mag.rs +++ b/libs/scrap/src/dxgi/mag.rs @@ -129,7 +129,7 @@ impl MagInterface { unsafe { // load lib let lib_file_name = "Magnification.dll"; - let lib_file_name_c = CString::new(lib_file_name).unwrap(); + let lib_file_name_c = CString::new(lib_file_name)?; s.lib_handle = LoadLibraryExA( lib_file_name_c.as_ptr() as _, NULL, @@ -189,7 +189,7 @@ impl MagInterface { } unsafe fn load_func(lib_module: HMODULE, func_name: &str) -> Result { - let func_name_c = CString::new(func_name).unwrap(); + let func_name_c = CString::new(func_name)?; let func = GetProcAddress(lib_module, func_name_c.as_ptr() as _); if func.is_null() { return Err(Error::new( @@ -442,7 +442,7 @@ impl CapturerMag { } pub(crate) fn exclude(&mut self, cls: &str, name: &str) -> Result { - let name_c = CString::new(name).unwrap(); + let name_c = CString::new(name)?; unsafe { let mut hwnd = if cls.len() == 0 { FindWindowExA(NULL as _, NULL as _, NULL as _, name_c.as_ptr()) diff --git a/libs/scrap/src/wayland/pipewire.rs b/libs/scrap/src/wayland/pipewire.rs index 5583dfef5..f7eb84537 100644 --- a/libs/scrap/src/wayland/pipewire.rs +++ b/libs/scrap/src/wayland/pipewire.rs @@ -594,13 +594,14 @@ fn request_screen_cast( } let fd_res = fd_res.lock().unwrap(); let streams_res = streams_res.lock().unwrap(); - if fd_res.is_some() && !streams_res.is_empty() { - Ok((conn, fd_res.clone().unwrap(), streams_res.clone())) - } else { - Err(Box::new(DBusError( - "Failed to obtain screen capture.".into(), - ))) + if let Some(fd_res) = fd_res.clone() { + if !streams_res.is_empty() { + return Ok((conn, fd_res, streams_res.clone())); + } } + Err(Box::new(DBusError( + "Failed to obtain screen capture.".into(), + ))) } pub fn get_capturables(capture_cursor: bool) -> Result, Box> { diff --git a/libs/virtual_display/dylib/examples/idd_controller.rs b/libs/virtual_display/dylib/examples/idd_controller.rs index c9a3fbbab..4d3bdc5e5 100644 --- a/libs/virtual_display/dylib/examples/idd_controller.rs +++ b/libs/virtual_display/dylib/examples/idd_controller.rs @@ -30,7 +30,12 @@ fn prompt_input() -> u8 { unsafe fn plug_in(index: idd::UINT, edid: idd::UINT) { println!("Plug in monitor begin"); if idd::FALSE == idd::MonitorPlugIn(index, edid, 25) { - println!("{}", CStr::from_ptr(idd::GetLastMsg()).to_str().unwrap()); + println!( + "{}", + CStr::from_ptr(idd::GetLastMsg()) + .to_str() + .unwrap_or_default() + ); } else { println!("Plug in monitor done"); @@ -46,7 +51,12 @@ unsafe fn plug_in(index: idd::UINT, edid: idd::UINT) { sync: 60 as idd::DWORD, }); if idd::FALSE == idd::MonitorModesUpdate(index, modes.len() as u32, modes.as_mut_ptr()) { - println!("{}", CStr::from_ptr(idd::GetLastMsg()).to_str().unwrap()); + println!( + "{}", + CStr::from_ptr(idd::GetLastMsg()) + .to_str() + .unwrap_or_default() + ); } } } @@ -55,7 +65,12 @@ unsafe fn plug_in(index: idd::UINT, edid: idd::UINT) { unsafe fn plug_out(index: idd::UINT) { println!("Plug out monitor begin"); if idd::FALSE == idd::MonitorPlugOut(index) { - println!("{}", CStr::from_ptr(idd::GetLastMsg()).to_str().unwrap()); + println!( + "{}", + CStr::from_ptr(idd::GetLastMsg()) + .to_str() + .unwrap_or_default() + ); } else { println!("Plug out monitor done"); } @@ -64,7 +79,13 @@ unsafe fn plug_out(index: idd::UINT) { fn main() { #[cfg(windows)] { - let abs_path = Path::new(DRIVER_INSTALL_PATH).canonicalize().unwrap(); + let abs_path = match Path::new(DRIVER_INSTALL_PATH).canonicalize() { + Ok(p) => p, + Err(e) => { + println!("Failed to get absolute path of driver install: {:?}", e); + return; + } + }; unsafe { let invalid_device = 0 as idd::HSWDEVICE; @@ -86,7 +107,12 @@ fn main() { if idd::InstallUpdate(full_inf_path.as_ptr() as _, &mut reboot_required) == idd::FALSE { - println!("{}", CStr::from_ptr(idd::GetLastMsg()).to_str().unwrap()); + println!( + "{}", + CStr::from_ptr(idd::GetLastMsg()) + .to_str() + .unwrap_or_default() + ); } else { println!( "Install or update driver done, reboot is {} required", @@ -104,7 +130,12 @@ fn main() { if idd::Uninstall(full_inf_path.as_ptr() as _, &mut reboot_required) == idd::FALSE { - println!("{}", CStr::from_ptr(idd::GetLastMsg()).to_str().unwrap()); + println!( + "{}", + CStr::from_ptr(idd::GetLastMsg()) + .to_str() + .unwrap_or_default() + ); } else { println!( "Uninstall driver done, reboot is {} required", @@ -123,7 +154,12 @@ fn main() { continue; } if idd::FALSE == idd::DeviceCreate(&mut h_sw_device) { - println!("{}", CStr::from_ptr(idd::GetLastMsg()).to_str().unwrap()); + println!( + "{}", + CStr::from_ptr(idd::GetLastMsg()) + .to_str() + .unwrap_or_default() + ); idd::DeviceClose(h_sw_device); h_sw_device = invalid_device; } else { diff --git a/src/cli.rs b/src/cli.rs index 13e70987b..0f49c5530 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -56,9 +56,15 @@ impl Interface for Session { } "re-input-password" => { log::error!("{}: {}", title, text); - let password = rpassword::prompt_password("Enter password: ").unwrap(); - let login_data = Data::Login((password, true)); - self.sender.send(login_data).ok(); + match rpassword::prompt_password("Enter password: ") { + Ok(password) => { + let login_data = Data::Login((password, true)); + self.sender.send(login_data).ok(); + } + Err(e) => { + log::error!("reinput password failed, {:?}", e); + } + } } msg if msg.contains("error") => { log::error!("{}: {}: {}", msgtype, title, text); @@ -85,8 +91,23 @@ impl Interface for Session { handle_hash(self.lc.clone(), &pass, hash, self, peer).await; } - async fn handle_login_from_ui(&mut self, os_username: String, os_password: String, password: String, remember: bool, peer: &mut Stream) { - handle_login_from_ui(self.lc.clone(), os_username, os_password, password, remember, peer).await; + async fn handle_login_from_ui( + &mut self, + os_username: String, + os_password: String, + password: String, + remember: bool, + peer: &mut Stream, + ) { + handle_login_from_ui( + self.lc.clone(), + os_username, + os_password, + password, + remember, + peer, + ) + .await; } async fn handle_test_delay(&mut self, t: TestDelay, peer: &mut Stream) { @@ -117,13 +138,14 @@ pub async fn connect_test(id: &str, key: String, token: String) { break; } Ok(Some(Ok(bytes))) => { - let msg_in = Message::parse_from_bytes(&bytes).unwrap(); - match msg_in.union { - Some(message::Union::Hash(hash)) => { - log::info!("Got hash"); - break; + if let Ok(msg_in) = Message::parse_from_bytes(&bytes) { + match msg_in.union { + Some(message::Union::Hash(hash)) => { + log::info!("Got hash"); + break; + } + _ => {} } - _ => {} } } _ => {} diff --git a/src/client.rs b/src/client.rs index a123be71e..a8bc52c72 100644 --- a/src/client.rs +++ b/src/client.rs @@ -317,19 +317,20 @@ impl Client { if !ph.other_failure.is_empty() { bail!(ph.other_failure); } - match ph.failure.enum_value_or_default() { - punch_hole_response::Failure::ID_NOT_EXIST => { + match ph.failure.enum_value() { + Ok(punch_hole_response::Failure::ID_NOT_EXIST) => { bail!("ID does not exist"); } - punch_hole_response::Failure::OFFLINE => { + Ok(punch_hole_response::Failure::OFFLINE) => { bail!("Remote desktop is offline"); } - punch_hole_response::Failure::LICENSE_MISMATCH => { + Ok(punch_hole_response::Failure::LICENSE_MISMATCH) => { bail!("Key mismatch"); } - punch_hole_response::Failure::LICENSE_OVERUSE => { + Ok(punch_hole_response::Failure::LICENSE_OVERUSE) => { bail!("Key overuse"); } + _ => bail!("other punch hole failure"), } } else { peer_nat_type = ph.nat_type(); @@ -470,11 +471,8 @@ impl Client { ) .await; interface.update_direct(Some(false)); - if conn.is_err() { - bail!( - "Failed to connect via relay server: {}", - conn.err().unwrap() - ); + if let Err(e) = conn { + bail!("Failed to connect via relay server: {}", e); } direct = false; } else { @@ -507,11 +505,13 @@ impl Client { }); let mut sign_pk = None; let mut option_pk = None; - if !signed_id_pk.is_empty() && rs_pk.is_some() { - if let Ok((id, pk)) = decode_id_pk(&signed_id_pk, &rs_pk.unwrap()) { - if id == peer_id { - sign_pk = Some(sign::PublicKey(pk)); - option_pk = Some(pk.to_vec()); + if !signed_id_pk.is_empty() { + if let Some(rs_pk) = rs_pk { + if let Ok((id, pk)) = decode_id_pk(&signed_id_pk, &rs_pk) { + if id == peer_id { + sign_pk = Some(sign::PublicKey(pk)); + option_pk = Some(pk.to_vec()); + } } } if sign_pk.is_none() { diff --git a/src/common.rs b/src/common.rs index d42e27285..ee2ec1516 100644 --- a/src/common.rs +++ b/src/common.rs @@ -725,7 +725,7 @@ pub fn run_me>(args: Vec) -> std::io::Result, outlen: *mut c_int) -> *mut *mut c_cha // Let's fill a vector with null-terminated strings for s in args { - v.push(CString::new(s).unwrap()); + match CString::new(s) { + Ok(s) => v.push(s), + Err(_) => return std::ptr::null_mut() as _, + } } // Turning each null-terminated string into a pointer. diff --git a/src/naming.rs b/src/naming.rs index 7a8d0cecc..1b70af923 100644 --- a/src/naming.rs +++ b/src/naming.rs @@ -12,15 +12,14 @@ fn main() { let args: Vec<_> = std::env::args().skip(1).collect(); let api = args.get(2).cloned().unwrap_or_default(); if args.len() >= 2 { - println!( - "rustdesk-licensed-{}.exe", - gen_name(&License { - key: args[0].clone(), - host: args[1].clone(), - api, - }) - .unwrap() - ); + match gen_name(&License { + key: args[0].clone(), + host: args[1].clone(), + api, + }) { + Ok(name) => println!("rustdesk-licensed-{}.exe", name), + Err(e) => println!("{:?}", e), + } } if args.len() == 1 { println!("{:?}", get_license_from_string(&args[0])); diff --git a/src/platform/delegate.rs b/src/platform/delegate.rs index e4d9cc396..d2a073888 100644 --- a/src/platform/delegate.rs +++ b/src/platform/delegate.rs @@ -64,11 +64,10 @@ impl AppHandler for Rc { // https://github.com/xi-editor/druid/blob/master/druid-shell/src/platform/mac/application.rs pub unsafe fn set_delegate(handler: Option>) { - let decl = ClassDecl::new("AppDelegate", class!(NSObject)); - if decl.is_none() { + let Some(mut decl) = ClassDecl::new("AppDelegate", class!(NSObject)) else { + log::error!("Failed to new AppDelegate"); return; - } - let mut decl = decl.unwrap(); + }; decl.add_ivar::<*mut c_void>(APP_HANDLER_IVAR); decl.add_method( @@ -116,7 +115,10 @@ pub unsafe fn set_delegate(handler: Option>) { let handler_ptr = Box::into_raw(Box::new(state)); (*delegate).set_ivar(APP_HANDLER_IVAR, handler_ptr as *mut c_void); // Set the url scheme handler - let cls = Class::get("NSAppleEventManager").unwrap(); + let Some(cls) = Class::get("NSAppleEventManager") else { + log::error!("Failed to get NSAppleEventManager"); + return; + }; let manager: *mut Object = msg_send![cls, sharedAppleEventManager]; let _: () = msg_send![manager, setEventHandler: delegate @@ -199,10 +201,10 @@ fn service_should_handle_reopen( _sel: Sel, _sender: id, _has_visible_windows: BOOL, - ) -> BOOL { +) -> BOOL { log::debug!("Invoking the main rustdesk process"); - std::thread::spawn(move || crate::handle_url_scheme("".to_string())); - // Prevent default logic. + std::thread::spawn(move || crate::handle_url_scheme("".to_string())); + // Prevent default logic. NO } diff --git a/src/platform/linux.rs b/src/platform/linux.rs index bbe415c71..9c5a8b9fc 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -728,7 +728,9 @@ pub fn get_double_click_time() -> u32 { // g_object_get (settings, "gtk-double-click-time", &double_click_time, NULL); unsafe { let mut double_click_time = 0u32; - let property = std::ffi::CString::new("gtk-double-click-time").unwrap(); + let Ok(property) = std::ffi::CString::new("gtk-double-click-time") else { + return 0; + }; let settings = gtk_settings_get_default(); g_object_get( settings, @@ -801,7 +803,10 @@ pub fn resolutions(name: &str) -> Vec { if let Some(resolutions) = caps.name("resolutions") { let resolution_pat = r"\s*(?P\d+)x(?P\d+)\s+(?P(\d+\.\d+\D*)+)\s*\n"; - let resolution_re = Regex::new(&format!(r"{}", resolution_pat)).unwrap(); + let Ok(resolution_re) = Regex::new(&format!(r"{}", resolution_pat)) else { + log::error!("Regex new failed"); + return vec![]; + }; for resolution_caps in resolution_re.captures_iter(resolutions.as_str()) { if let Some((width, height)) = get_width_height_from_captures(&resolution_caps) diff --git a/src/platform/macos.rs b/src/platform/macos.rs index fb61c7335..f00435907 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -74,7 +74,7 @@ pub fn is_can_input_monitoring(prompt: bool) -> bool { // remove just one app from all the permissions: tccutil reset All com.carriez.rustdesk pub fn is_can_screen_recording(prompt: bool) -> bool { // we got some report that we show no permission even after set it, so we try to use new api for screen recording check - // the new api is only available on macOS >= 10.15, but on stackoverflow, some people said it works on >= 10.16 (crash on 10.15), + // the new api is only available on macOS >= 10.15, but on stackoverflow, some people said it works on >= 10.16 (crash on 10.15), // but also some said it has bug on 10.16, so we just use it on 11.0. unsafe { if CanUseNewApiForScreenCaptureCheck() == YES { @@ -146,14 +146,26 @@ pub fn is_installed_daemon(prompt: bool) -> bool { return true; } - let install_script = PRIVILEGES_SCRIPTS_DIR.get_file("install.scpt").unwrap(); - let install_script_body = install_script.contents_utf8().unwrap(); + let Some(install_script) = PRIVILEGES_SCRIPTS_DIR.get_file("install.scpt") else { + return false; + }; + let Some(install_script_body) = install_script.contents_utf8() else { + return false; + }; - let daemon_plist = PRIVILEGES_SCRIPTS_DIR.get_file(&daemon).unwrap(); - let daemon_plist_body = daemon_plist.contents_utf8().unwrap(); + let Some(daemon_plist) = PRIVILEGES_SCRIPTS_DIR.get_file(&daemon) else { + return false; + }; + let Some(daemon_plist_body) = daemon_plist.contents_utf8() else { + return false; + }; - let agent_plist = PRIVILEGES_SCRIPTS_DIR.get_file(&agent).unwrap(); - let agent_plist_body = agent_plist.contents_utf8().unwrap(); + let Some(agent_plist) = PRIVILEGES_SCRIPTS_DIR.get_file(&agent) else { + return false; + }; + let Some(agent_plist_body) = agent_plist.contents_utf8() else { + return false; + }; std::thread::spawn(move || { match std::process::Command::new("osascript") @@ -198,8 +210,12 @@ pub fn uninstall_service(show_new_window: bool) -> bool { return false; } - let script_file = PRIVILEGES_SCRIPTS_DIR.get_file("uninstall.scpt").unwrap(); - let script_body = script_file.contents_utf8().unwrap(); + let Some(script_file) = PRIVILEGES_SCRIPTS_DIR.get_file("uninstall.scpt") else { + return false; + }; + let Some(script_body) = script_file.contents_utf8() else { + return false; + }; std::thread::spawn(move || { match std::process::Command::new("osascript") diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 3710389bf..d3dcbae81 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -6,7 +6,9 @@ use crate::{ privacy_win_mag::{self, WIN_MAG_INJECTED_PROCESS_EXE}, }; use hbb_common::{ - allow_err, bail, + allow_err, + anyhow::anyhow, + bail, config::{self, Config}, log, message_proto::Resolution, @@ -848,10 +850,9 @@ pub fn check_update_broker_process() -> ResultType<()> { let origin_process_exe = privacy_win_mag::ORIGIN_PROCESS_EXE; let exe_file = std::env::current_exe()?; - if exe_file.parent().is_none() { + let Some(cur_dir) = exe_file.parent() else { bail!("Cannot get parent of current exe file"); - } - let cur_dir = exe_file.parent().unwrap(); + }; let cur_exe = cur_dir.join(process_exe); if !std::path::Path::new(&cur_exe).exists() { @@ -902,29 +903,29 @@ fn get_install_info_with_subkey(subkey: String) -> (String, String, String, Stri (subkey, path, start_menu, exe) } -pub fn copy_raw_cmd(src_raw: &str, _raw: &str, _path: &str) -> String { +pub fn copy_raw_cmd(src_raw: &str, _raw: &str, _path: &str) -> ResultType { let main_raw = format!( "XCOPY \"{}\" \"{}\" /Y /E /H /C /I /K /R /Z", PathBuf::from(src_raw) .parent() - .unwrap() + .ok_or(anyhow!("Can't get parent directory of {src_raw}"))? .to_string_lossy() .to_string(), _path ); - return main_raw; + return Ok(main_raw); } -pub fn copy_exe_cmd(src_exe: &str, exe: &str, path: &str) -> String { - let main_exe = copy_raw_cmd(src_exe, exe, path); - format!( +pub fn copy_exe_cmd(src_exe: &str, exe: &str, path: &str) -> ResultType { + let main_exe = copy_raw_cmd(src_exe, exe, path)?; + Ok(format!( " {main_exe} copy /Y \"{ORIGIN_PROCESS_EXE}\" \"{path}\\{broker_exe}\" ", ORIGIN_PROCESS_EXE = privacy_win_mag::ORIGIN_PROCESS_EXE, broker_exe = privacy_win_mag::INJECTED_PROCESS_EXE, - ) + )) } fn get_after_install(exe: &str) -> String { @@ -1118,7 +1119,7 @@ copy /Y \"{tmp_path}\\Uninstall {app_name}.lnk\" \"{path}\\\" } else { &dels }, - copy_exe = copy_exe_cmd(&src_exe, &exe, &path), + copy_exe = copy_exe_cmd(&src_exe, &exe, &path)?, import_config = get_import_config(&exe), ); run_cmds(cmds, debug, "install")?; @@ -1200,7 +1201,7 @@ fn write_cmds(cmds: String, ext: &str, tip: &str) -> ResultType &[u8] { unsafe { v.align_to().1 } } -fn get_undone_file(tmp: &PathBuf) -> PathBuf { +fn get_undone_file(tmp: &PathBuf) -> ResultType { let mut tmp1 = tmp.clone(); tmp1.set_file_name(format!( "{}.undone", - tmp.file_name().unwrap().to_string_lossy() + tmp.file_name() + .ok_or(anyhow!("Failed to get filename of {:?}", tmp))? + .to_string_lossy() )); - tmp1 + Ok(tmp1) } fn run_cmds(cmds: String, show: bool, tip: &str) -> ResultType<()> { let tmp = write_cmds(cmds, "bat", tip)?; - let tmp2 = get_undone_file(&tmp); + let tmp2 = get_undone_file(&tmp)?; let tmp_fn = tmp.to_str().unwrap_or(""); let res = runas::Command::new("cmd") .args(&["/C", &tmp_fn]) diff --git a/src/privacy_win_mag.rs b/src/privacy_win_mag.rs index 446cba260..05c2daf05 100644 --- a/src/privacy_win_mag.rs +++ b/src/privacy_win_mag.rs @@ -153,10 +153,10 @@ pub fn start() -> ResultType<()> { } let exe_file = std::env::current_exe()?; - if exe_file.parent().is_none() { + let Some(cur_dir) = exe_file + .parent() else { bail!("Cannot get parent of current exe file"); - } - let cur_dir = exe_file.parent().unwrap(); + }; let dll_file = cur_dir.join("WindowInjection.dll"); if !dll_file.exists() { @@ -344,6 +344,7 @@ async fn set_privacy_mode_state( } pub(super) mod privacy_hook { + use super::*; use std::sync::mpsc::{channel, Sender}; @@ -426,7 +427,7 @@ pub(super) mod privacy_hook { } Err(e) => { // Fatal error - tx.send(format!("Unexpected err when hook {}", e)).unwrap(); + allow_err!(tx.send(format!("Unexpected err when hook {}", e))); return; } } diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 4b2e8bbc6..3e3b6c9b3 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -186,16 +186,18 @@ impl RendezvousMediator { } Some(rendezvous_message::Union::RegisterPkResponse(rpr)) => { update_latency(); - match rpr.result.enum_value_or_default() { - register_pk_response::Result::OK => { + match rpr.result.enum_value() { + Ok(register_pk_response::Result::OK) => { Config::set_key_confirmed(true); Config::set_host_key_confirmed(&rz.host_prefix, true); *SOLVING_PK_MISMATCH.lock().unwrap() = "".to_owned(); } - register_pk_response::Result::UUID_MISMATCH => { + Ok(register_pk_response::Result::UUID_MISMATCH) => { allow_err!(rz.handle_uuid_mismatch(&mut socket).await); } - _ => {} + _ => { + log::error!("unknown RegisterPkResponse"); + } } } Some(rendezvous_message::Union::PunchHole(ph)) => { @@ -376,7 +378,7 @@ impl RendezvousMediator { async fn handle_punch_hole(&self, ph: PunchHole, server: ServerPtr) -> ResultType<()> { let relay_server = self.get_relay_server(ph.relay_server); - if ph.nat_type.enum_value_or_default() == NatType::SYMMETRIC + if ph.nat_type.enum_value() == Ok(NatType::SYMMETRIC) || Config::get_nat_type() == NatType::SYMMETRIC as i32 { let uuid = Uuid::new_v4().to_string(); @@ -515,7 +517,7 @@ async fn direct_server(server: ServerPtr) { listener = Some(l); log::info!( "Direct server listening on: {:?}", - listener.as_ref().unwrap().local_addr() + listener.as_ref().map(|l| l.local_addr()) ); } Err(err) => { diff --git a/src/server/audio_service.rs b/src/server/audio_service.rs index 5a2184fe4..ac3cd6b95 100644 --- a/src/server/audio_service.rs +++ b/src/server/audio_service.rs @@ -13,10 +13,10 @@ // https://github.com/krruzic/pulsectl use super::*; -use magnum_opus::{Application::*, Channels::*, Encoder}; -use std::sync::atomic::{AtomicBool, Ordering}; #[cfg(not(any(target_os = "linux", target_os = "android")))] use hbb_common::anyhow::anyhow; +use magnum_opus::{Application::*, Channels::*, Encoder}; +use std::sync::atomic::{AtomicBool, Ordering}; pub const NAME: &'static str = "audio"; pub const AUDIO_DATA_SIZE_U8: usize = 960 * 4; // 10ms in 48000 stereo @@ -206,13 +206,10 @@ mod cpal_impl { } } } - if device.is_none() { - device = Some( - HOST.default_input_device() - .with_context(|| "Failed to get default input device for loopback")?, - ); - } - let device = device.unwrap(); + let device = device.unwrap_or( + HOST.default_input_device() + .with_context(|| "Failed to get default input device for loopback")?, + ); log::info!("Input device: {}", device.name().unwrap_or("".to_owned())); let format = device .default_input_config() diff --git a/src/server/connection.rs b/src/server/connection.rs index 84f540027..39a87547e 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -665,11 +665,11 @@ impl Connection { } MessageInput::Key((mut msg, press)) => { // todo: press and down have similar meanings. - if press && msg.mode.unwrap() == KeyboardMode::Legacy { + if press && msg.mode.enum_value() == Ok(KeyboardMode::Legacy) { msg.down = true; } handle_key(&msg); - if press && msg.mode.unwrap() == KeyboardMode::Legacy { + if press && msg.mode.enum_value() == Ok(KeyboardMode::Legacy) { msg.down = false; handle_key(&msg); } @@ -1621,11 +1621,11 @@ impl Connection { me.press }; - let key = match me.mode.enum_value_or_default() { - KeyboardMode::Map => { + let key = match me.mode.enum_value() { + Ok(KeyboardMode::Map) => { Some(crate::keyboard::keycode_to_rdev_key(me.chr())) } - KeyboardMode::Translate => { + Ok(KeyboardMode::Translate) => { if let Some(key_event::Union::Chr(code)) = me.union { Some(crate::keyboard::keycode_to_rdev_key(code & 0x0000FFFF)) } else { @@ -1908,11 +1908,9 @@ impl Connection { // Drop the audio sender previously. drop(std::mem::replace(&mut self.audio_sender, None)); self.audio_sender = Some(start_audio_thread()); - allow_err!(self - .audio_sender + self.audio_sender .as_ref() - .unwrap() - .send(MediaData::AudioFormat(format))); + .map(|a| allow_err!(a.send(MediaData::AudioFormat(format)))); } } #[cfg(feature = "flutter")] @@ -2341,6 +2339,8 @@ async fn start_ipc( mut _rx_desktop_ready: mpsc::Receiver<()>, tx_stream_ready: mpsc::Sender<()>, ) -> ResultType<()> { + use hbb_common::anyhow::anyhow; + loop { if !crate::platform::is_prelogin() { break; @@ -2434,7 +2434,7 @@ async fn start_ipc( } let _res = tx_stream_ready.send(()).await; - let mut stream = stream.unwrap(); + let mut stream = stream.ok_or(anyhow!("none stream"))?; loop { tokio::select! { res = stream.next() => { diff --git a/src/server/input_service.rs b/src/server/input_service.rs index 8562ca3eb..f5e4aebd3 100644 --- a/src/server/input_service.rs +++ b/src/server/input_service.rs @@ -1497,11 +1497,11 @@ pub fn handle_key_(evt: &KeyEvent) { _ => {} }; - match evt.mode.unwrap() { - KeyboardMode::Map => { + match evt.mode.enum_value() { + Ok(KeyboardMode::Map) => { map_keyboard_mode(evt); } - KeyboardMode::Translate => { + Ok(KeyboardMode::Translate) => { translate_keyboard_mode(evt); } _ => { diff --git a/src/server/portable_service.rs b/src/server/portable_service.rs index c8185b709..155f2acb4 100644 --- a/src/server/portable_service.rs +++ b/src/server/portable_service.rs @@ -231,7 +231,13 @@ pub mod server { } pub fn run_portable_service() { - let shmem = Arc::new(SharedMemory::open_existing(SHMEM_NAME).unwrap()); + let shmem = match SharedMemory::open_existing(SHMEM_NAME) { + Ok(shmem) => Arc::new(shmem), + Err(e) => { + log::error!("Failed to open existing shared memory: {:?}", e); + return; + } + }; let shmem1 = shmem.clone(); let shmem2 = shmem.clone(); let mut threads = vec![]; @@ -249,7 +255,7 @@ pub mod server { })); let record_pos_handle = crate::input_service::try_start_record_cursor_pos(); for th in threads.drain(..) { - th.join().unwrap(); + th.join().ok(); log::info!("thread joined"); } @@ -319,7 +325,11 @@ pub mod server { } if c.is_none() { *crate::video_service::CURRENT_DISPLAY.lock().unwrap() = current_display; - let (_, _current, display) = get_current_display().unwrap(); + let Ok((_, _current, display)) = get_current_display() else { + log::error!("Failed to get current display"); + *EXIT.lock().unwrap() = true; + return; + }; display_width = display.width(); display_height = display.height(); match Capturer::new(display, use_yuv) { @@ -380,8 +390,8 @@ pub mod server { continue; } } - match c.as_mut().unwrap().frame(spf) { - Ok(f) => { + match c.as_mut().map(|f| f.frame(spf)) { + Some(Ok(f)) => { utils::set_frame_info( &shmem, FrameInfo { @@ -396,7 +406,7 @@ pub mod server { first_frame_captured = true; dxgi_failed_times = 0; } - Err(e) => { + Some(Err(e)) => { if e.kind() != std::io::ErrorKind::WouldBlock { // DXGI_ERROR_INVALID_CALL after each success on Microsoft GPU driver // log::error!("capture frame failed:{:?}", e); @@ -406,7 +416,8 @@ pub mod server { std::thread::sleep(spf); continue; } - if !c.as_ref().unwrap().is_gdi() { + if c.as_ref().map(|c| c.is_gdi()) == Some(false) { + // nog gdi dxgi_failed_times += 1; } if dxgi_failed_times > MAX_DXGI_FAIL_TIME { @@ -418,6 +429,9 @@ pub mod server { shmem.write(ADDR_CAPTURE_WOULDBLOCK, &utils::i32_to_vec(TRUE)); } } + _ => { + println!("unreachable!"); + } } } } diff --git a/src/server/video_service.rs b/src/server/video_service.rs index 109982985..bb0697409 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -144,7 +144,7 @@ pub fn capture_cursor_embedded() -> bool { #[inline] pub fn notify_video_frame_fetched(conn_id: i32, frame_tm: Option) { - FRAME_FETCHED_NOTIFIER.0.send((conn_id, frame_tm)).unwrap() + FRAME_FETCHED_NOTIFIER.0.send((conn_id, frame_tm)).ok(); } #[inline] diff --git a/src/ui.rs b/src/ui.rs index 8f075b7de..5554a3020 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -124,8 +124,16 @@ pub fn start(args: &mut [String]) { crate::platform::windows::enable_lowlevel_keyboard(hw as _); } let mut iter = args.iter(); - let cmd = iter.next().unwrap().clone(); - let id = iter.next().unwrap().clone(); + let Some(cmd) = iter.next() else { + log::error!("Failed to get cmd arg"); + return; + }; + let cmd = cmd.to_owned(); + let Some(id) = iter.next() else { + log::error!("Failed to get id arg"); + return; + }; + let id = id.to_owned(); let pass = iter.next().unwrap_or(&"".to_owned()).clone(); let args: Vec = iter.map(|x| x.clone()).collect(); frame.set_title(&id); @@ -259,7 +267,8 @@ impl UI { } fn get_options(&self) -> Value { - let hashmap: HashMap = serde_json::from_str(&get_options()).unwrap(); + let hashmap: HashMap = + serde_json::from_str(&get_options()).unwrap_or_default(); let mut m = Value::map(); for (k, v) in hashmap { m.set_item(k, v); diff --git a/src/ui/remote.rs b/src/ui/remote.rs index 4c2af77bd..6826c7e54 100644 --- a/src/ui/remote.rs +++ b/src/ui/remote.rs @@ -377,7 +377,7 @@ impl sciter::EventHandler for SciterSession { let source = Element::from(source); use sciter::dom::ELEMENT_AREAS; let flags = ELEMENT_AREAS::CONTENT_BOX as u32 | ELEMENT_AREAS::SELF_RELATIVE as u32; - let rc = source.get_location(flags).unwrap(); + let rc = source.get_location(flags).unwrap_or_default(); log::debug!( "[video] start video thread on <{}> which is about {:?} pixels", source, diff --git a/src/ui_interface.rs b/src/ui_interface.rs index b10fad206..c620f4f91 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -233,7 +233,7 @@ pub fn get_options() -> String { for (k, v) in options.iter() { m.insert(k.into(), v.to_owned().into()); } - serde_json::to_string(&m).unwrap() + serde_json::to_string(&m).unwrap_or_default() } #[inline] @@ -1112,23 +1112,23 @@ async fn check_id( { match msg_in.union { Some(rendezvous_message::Union::RegisterPkResponse(rpr)) => { - match rpr.result.enum_value_or_default() { - register_pk_response::Result::OK => { + match rpr.result.enum_value() { + Ok(register_pk_response::Result::OK) => { ok = true; } - register_pk_response::Result::ID_EXISTS => { + Ok(register_pk_response::Result::ID_EXISTS) => { return "Not available"; } - register_pk_response::Result::TOO_FREQUENT => { + Ok(register_pk_response::Result::TOO_FREQUENT) => { return "Too frequent"; } - register_pk_response::Result::NOT_SUPPORT => { + Ok(register_pk_response::Result::NOT_SUPPORT) => { return "server_not_support"; } - register_pk_response::Result::SERVER_ERROR => { + Ok(register_pk_response::Result::SERVER_ERROR) => { return "Server error"; } - register_pk_response::Result::INVALID_ID_FORMAT => { + Ok(register_pk_response::Result::INVALID_ID_FORMAT) => { return INVALID_FORMAT; } _ => {} From 93a641036088394740a1c0f2b4fff62835ce2ee8 Mon Sep 17 00:00:00 2001 From: FastAct <93490087+FastAct@users.noreply.github.com> Date: Mon, 24 Jul 2023 07:11:55 +0200 Subject: [PATCH 177/612] Update nl.rs --- src/lang/nl.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/nl.rs b/src/lang/nl.rs index cf8c2a25f..3bb8e762d 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -517,6 +517,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Outgoing connection", "Uitgaande verbinding"), ("Exit", "Verlaten"), ("Open", "Open"), - ("logout_tip", ""), + ("logout_tip", "Weet je zeker dat je je wilt afmelden?"), ].iter().cloned().collect(); } From 02456280d413eba45365cd06a1572583ee76664c Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 24 Jul 2023 14:17:09 +0800 Subject: [PATCH 178/612] fix win cpu monitor run once Signed-off-by: 21pages --- libs/hbb_common/src/platform/windows.rs | 11 ++++++++--- libs/scrap/examples/benchmark.rs | 3 ++- libs/scrap/src/common/codec.rs | 5 +++-- libs/scrap/src/common/hwcodec.rs | 12 +++++++++--- src/core_main.rs | 4 ++++ src/server.rs | 18 ++++-------------- 6 files changed, 30 insertions(+), 23 deletions(-) diff --git a/libs/hbb_common/src/platform/windows.rs b/libs/hbb_common/src/platform/windows.rs index 250ca8d3e..26cd907ab 100644 --- a/libs/hbb_common/src/platform/windows.rs +++ b/libs/hbb_common/src/platform/windows.rs @@ -42,7 +42,7 @@ impl Drop for RAIIPDHQuery { } } -pub unsafe fn start_cpu_performance_monitor() { +pub fn start_cpu_performance_monitor() { // Code from: // https://learn.microsoft.com/en-us/windows/win32/perfctrs/collecting-performance-data // https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhcollectquerydataex @@ -50,7 +50,7 @@ pub unsafe fn start_cpu_performance_monitor() { // https://aaron-margosis.medium.com/task-managers-cpu-numbers-are-all-but-meaningless-2d165b421e43 // Therefore we should compare with Precess Explorer rather than taskManager - std::thread::spawn(|| { + let f = || unsafe { // load avg or cpu usage, test with prime95. // Prefer cpu usage because we can get accurate value from Precess Explorer. // const COUNTER_PATH: &'static str = "\\System\\Processor Queue Length\0"; @@ -80,7 +80,7 @@ pub unsafe fn start_cpu_performance_monitor() { let mut counter_value: PDH_FMT_COUNTERVALUE = std::mem::zeroed(); let event = CreateEventA(std::ptr::null_mut(), FALSE, FALSE, std::ptr::null() as _); if event.is_null() { - log::error!("CreateEventA failed: 0x{:X}", ret); + log::error!("CreateEventA failed"); return; } let _event: RAIIHandle = RAIIHandle(event); @@ -126,6 +126,11 @@ pub unsafe fn start_cpu_performance_monitor() { queue.push_back(counter_value.u.doubleValue().clone()); recent_valid.push_back(true); } + }; + use std::sync::Once; + static ONCE: Once = Once::new(); + ONCE.call_once(|| { + std::thread::spawn(f); }); } diff --git a/libs/scrap/examples/benchmark.rs b/libs/scrap/examples/benchmark.rs index 18e636d0c..f8f2e9436 100644 --- a/libs/scrap/examples/benchmark.rs +++ b/libs/scrap/examples/benchmark.rs @@ -2,7 +2,7 @@ use docopt::Docopt; use hbb_common::env_logger::{init_from_env, Env, DEFAULT_FILTER_ENV}; use scrap::{ aom::{AomDecoder, AomEncoder, AomEncoderConfig}, - codec::{codec_thread_num, EncoderApi, EncoderCfg, Quality as Q}, + codec::{EncoderApi, EncoderCfg, Quality as Q}, Capturer, Display, TraitCapturer, VpxDecoder, VpxDecoderConfig, VpxEncoder, VpxEncoderConfig, VpxVideoCodecId::{self, *}, STRIDE_ALIGN, @@ -202,6 +202,7 @@ mod hw { RateControl::*, }; use scrap::{ + codec::codec_thread_num, convert::{ hw::{hw_bgra_to_i420, hw_bgra_to_nv12}, i420_to_bgra, diff --git a/libs/scrap/src/common/codec.rs b/libs/scrap/src/common/codec.rs index b6847dba0..84eb1c43e 100644 --- a/libs/scrap/src/common/codec.rs +++ b/libs/scrap/src/common/codec.rs @@ -514,10 +514,11 @@ pub fn base_bitrate(width: u32, height: u32) -> u32 { pub fn codec_thread_num() -> usize { let max: usize = num_cpus::get(); - let mut res = 0; + let mut res; let info; #[cfg(windows)] { + res = 0; let percent = hbb_common::platform::windows::cpu_uage_one_minute(); info = format!("cpu usage:{:?}", percent); if let Some(pecent) = percent { @@ -545,7 +546,7 @@ pub fn codec_thread_num() -> usize { None => true, }; if log { - log::info!("cpu num: {max}, {info}, codec thread: {res}"); + log::info!("cpu num:{max}, {info}, codec thread:{res}"); *THREAD_LOG_TIME.lock().unwrap() = Some(Instant::now()); } res diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index 94c30447e..f84f3bb7f 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -364,8 +364,8 @@ pub fn check_config() { pub fn check_config_process() { use hbb_common::sysinfo::{ProcessExt, System, SystemExt}; - - std::thread::spawn(move || { + use std::sync::Once; + let f = || { // Clear to avoid checking process errors // But when the program is just started, the configuration file has not been updated, and the new connection will read an empty configuration HwCodecConfig::clear(); @@ -393,7 +393,9 @@ pub fn check_config_process() { allow_err!(child.kill()); std::thread::sleep(std::time::Duration::from_millis(30)); match child.try_wait() { - Ok(Some(status)) => log::info!("Check hwcodec config, exit with: {status}"), + Ok(Some(status)) => { + log::info!("Check hwcodec config, exit with: {status}") + } Ok(None) => { log::info!( "Check hwcodec config, status not ready yet, let's really wait" @@ -409,5 +411,9 @@ pub fn check_config_process() { } } }; + }; + static ONCE: Once = Once::new(); + ONCE.call_once(|| { + std::thread::spawn(f); }); } diff --git a/src/core_main.rs b/src/core_main.rs index cc0a4834f..2644fe157 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -84,6 +84,10 @@ pub fn core_main() -> Option> { std::env::remove_var(k); } } + #[cfg(windows)] + if args.contains(&"--connect".to_string()) { + hbb_common::platform::windows::start_cpu_performance_monitor(); + } #[cfg(feature = "flutter")] if _is_flutter_invoke_new_connection { return core_main_invoke_new_connection(std::env::args()); diff --git a/src/server.rs b/src/server.rs index a0e842d42..c296e60be 100644 --- a/src/server.rs +++ b/src/server.rs @@ -362,7 +362,10 @@ pub async fn start_server(is_server: bool) { log::info!("DISPLAY={:?}", std::env::var("DISPLAY")); log::info!("XAUTHORITY={:?}", std::env::var("XAUTHORITY")); } - call_once_each_process(); + #[cfg(feature = "hwcodec")] + scrap::hwcodec::check_config_process(); + #[cfg(windows)] + hbb_common::platform::windows::start_cpu_performance_monitor(); if is_server { crate::common::set_server_running(true); @@ -523,16 +526,3 @@ async fn sync_and_watch_config_dir() { } log::warn!("skipped config sync"); } - -fn call_once_each_process() { - use std::sync::Once; - static ONCE: Once = Once::new(); - ONCE.call_once(|| { - #[cfg(feature = "hwcodec")] - scrap::hwcodec::check_config_process(); - #[cfg(windows)] - unsafe { - hbb_common::platform::windows::start_cpu_performance_monitor(); - } - }) -} From 9a28bab5b27805c033758deb2f7d2200e9152c39 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 24 Jul 2023 15:31:36 +0800 Subject: [PATCH 179/612] try fix cargo test no space in ci --- .github/workflows/ci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4ba7aa1ed..028df3860 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -124,7 +124,12 @@ jobs: with: use-cross: ${{ matrix.job.use-cross }} command: build - args: --locked --release --target=${{ matrix.job.target }} + args: --locked --target=${{ matrix.job.target }} + + - name: clean + shell: bash + run: | + cargo clean # - name: Strip debug information from executable # id: strip From 5e36710cdeea20e408d79b3c4b04642b48a94754 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Mon, 24 Jul 2023 11:46:05 +0200 Subject: [PATCH 180/612] Update README-IT.md --- docs/README-IT.md | 62 +++++++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/docs/README-IT.md b/docs/README-IT.md index d13661b08..c41770f08 100644 --- a/docs/README-IT.md +++ b/docs/README-IT.md @@ -1,36 +1,41 @@

- RustDesk - Your remote desktop
- Servers • + RustDesk - il tuo desktop remoto
+ ServerCompilazioneDockerStruttura • - Screenshots
+ Schermate
[English] | [Українська] | [česky] | [中文] | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي] | [Tiếng Việt] | [Ελληνικά]
- Abbiamo bisogno del tuo aiuto per tradurre questo README e la RustDesk UI nella tua lingua nativa + Abbiamo bisogno del tuo aiuto per tradurre questo file README e la UI RustDesk nella tua lingua nativa

-Chatta con noi: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk) +Chatta con noi su: [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) -Ancora un altro software per il controllo remoto del desktop, scritto in Rust. Funziona immediatamente, nessuna configurazione richiesta. Hai il pieno controllo dei tuoi dati, senza preoccupazioni per la sicurezza. Puoi utilizzare il nostro server rendezvous/relay, [configurare il tuo](https://rustdesk.com/server) o [scrivere il tuo rendezvous/relay server](https://github.com/rustdesk/rustdesk-server-demo). +Ancora un altro software per il controllo remoto del desktop, scritto in Rust. +Funziona immediatamente, nessuna configurazione richiesta. Hai il pieno controllo dei tuoi dati, senza preoccupazioni per la sicurezza. +Puoi usare il nostro server rendezvous/relay, [configurare il tuo server](https://rustdesk.com/server) o [realizzare il tuo server rendezvous/relay](https://github.com/rustdesk/rustdesk-server-demo). -RustDesk accoglie il contributo di tutti. Per ulteriori informazioni su come inizare a contribuire, vedere [`docs/CONTRIBUTING.md`](CONTRIBUTING.md). +RustDesk accoglie il contributo di tutti. +Per ulteriori informazioni su come inizare a contribuire, vedi [`docs/CONTRIBUTING.md`](CONTRIBUTING.md). [**BINARY DOWNLOAD**](https://github.com/rustdesk/rustdesk/releases) ## Server pubblici gratuiti -Qui sotto trovate i server che possono essere usati gratuitamente, la lista potrebbe cambiare nel tempo. Se non si è vicini a uno di questi server, la vostra connessione potrebbe essere lenta. -| Posizione | Vendor | Specifiche | +Qui sotto trovi i server che possono essere usati gratuitamente, la lista potrebbe cambiare nel tempo. +Se non sei vicino a uno di questi server, la connessione potrebbe essere lenta. + +| Posizione | Venditore | Specifiche | | --------- | ------------- | ------------------ | -| Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | -| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | +| Germania | Hetzner | 2 vCPU / 4GB RAM | +| Germania | Codext | 4 vCPU / 8GB RAM | +| Ucraina (Kyev) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dipendenze -La versione Desktop utilizza [sciter](https://sciter.com/) per la GUI, per favore scarica sciter dynamic library. +La versione Desktop usa per la GUI [sciter](https://sciter.com/), per favore scarica la libreria dinamica sciter. [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) | @@ -47,7 +52,7 @@ La versione Desktop utilizza [sciter](https://sciter.com/) per la GUI, per favor - Esegui `cargo run` -## Come compilare su Linux +## Come compilare in Linux ### Ubuntu 18 (Debian 10) @@ -67,7 +72,7 @@ sudo yum -y install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb- sudo pacman -Syu --needed unzip git cmake gcc curl wget yasm nasm zip make pkg-config clang gtk3 xdotool libxcb libxfixes alsa-lib pipewire ``` -### Installare vcpkg +### Installa vcpkg ```sh git clone https://github.com/microsoft/vcpkg @@ -79,7 +84,7 @@ export VCPKG_ROOT=$HOME/vcpkg vcpkg/vcpkg install libvpx libyuv opus aom ``` -### Fix libvpx (Per Fedora) +### Correzione libvpx (per Fedora) ```sh cd vcpkg/buildtrees/libvpx/src @@ -105,13 +110,14 @@ mv libsciter-gtk.so target/debug VCPKG_ROOT=$HOME/vcpkg cargo run ``` -### Cambiare Wayland a X11 (Xorg) +### Cambiare Wayland in X11 (Xorg) -RustDesk non supporta Wayland. Controlla [questo](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) per configurare Xorg come sessione di default di GNOME. +RustDesk non supporta Wayland. +Controlla [quei](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) per configurare Xorg come sessione predefinita di GNOME. ## Come compilare con Docker -Cominciare clonando il repository e compilare i container docker: +Clona il repository e compila i container docker: ```sh git clone https://github.com/rustdesk/rustdesk @@ -119,38 +125,42 @@ cd rustdesk docker build -t "rustdesk-builder" . ``` -Quindi, ogni volta che devi compilare l'applicazione, esegui il comando seguente: +Quindi, ogni volta che devi compilare l'applicazione, esegui il seguente comando: ```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 ``` -Tieni presente che la prima build potrebbe richiedere più tempo prima che le dipendenze vengano memorizzate nella cache, le build successive saranno più veloci. Inoltre, se hai bisogno di specificare argomenti diversi per il comando build, puoi farlo alla fine del comando nella posizione ``. Ad esempio, se si desidera creare una versione di rilascio ottimizzata, eseguire il comando sopra seguito da `--release`. L'eseguibile generato sarà creato nella cartella di destinazione del proprio sistema e può essere eseguito con: +Tieni presente che la prima build potrebbe richiedere più tempo prima che le dipendenze vengano memorizzate nella cache, le build successive saranno più veloci. +Inoltre, se hai bisogno di specificare argomenti diversi per il comando build, puoi farlo alla fine del comando nella posizione ``. +Ad esempio, se vuoi creare una versione di rilascio ottimizzata, esegui il comando precedentemente indicato seguito da `--release`. +L'eseguibile generato sarà creato nella cartella destinazione del sistema e può essere eseguito con: ```sh target/debug/rustdesk ``` -Oppure, se si sta eseguendo un eseguibile di rilascio: +Oppure, se stai avviando un eseguibile di rilascio: ```sh target/release/rustdesk ``` -Assicurati di eseguire questi comandi dalla radice del repository RustDesk, altrimenti l'applicazione potrebbe non essere in grado di trovare le risorse richieste. Notare inoltre che altri sottocomandi cargo come `install` o `run` non sono attualmente supportati tramite questo metodo poiché installerebbero o eseguirebbero il programma all'interno del container anziché nell'host. +Assicurati di eseguire questi comandi dalla radice del repository RustDesk, altrimenti l'applicazione potrebbe non essere in grado di trovare le risorse richieste. +Nota inoltre che altri sottocomandi cargo come `install` o `run` non sono attualmente supportati tramite questo metodo poiché installerebbero o eseguirebbero il programma all'interno del container anziché nell'host. ## Struttura dei file -- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: video codec, config, tcp/udp wrapper, protobuf, fs funzioni per il trasferimento file, e altre funzioni utili. +- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: codec video, config, wrapper tcp/udp, protobuf, funzioni per il trasferimento file, e altre funzioni utili. - **[libs/scrap](https://github.com/rustdesk/rustdesk/tree/master/libs/scrap)**: cattura dello schermo - **[libs/enigo](https://github.com/rustdesk/rustdesk/tree/master/libs/enigo)**: controllo tastiera/mouse specifico della piattaforma - **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: GUI - **[src/server](https://github.com/rustdesk/rustdesk/tree/master/src/server)**: servizi audio/appunti/input/video e connessioni di rete -- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: avviare una connessione peer +- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: avvio di una connessione peer - **[src/rendezvous_mediator.rs](https://github.com/rustdesk/rustdesk/tree/master/src/rendezvous_mediator.rs)**: Comunica con [rustdesk-server](https://github.com/rustdesk/rustdesk-server), attende la connessione remota diretta (TCP hole punching) oppure indiretta (relayed) - **[src/platform](https://github.com/rustdesk/rustdesk/tree/master/src/platform)**: codice specifico della piattaforma -## Screenshots +## Schermate ![image](https://user-images.githubusercontent.com/71636191/113112362-ae4deb80-923b-11eb-957d-ff88daad4f06.png) From 088f4a76a7234b45f81cd7e60115b6db7b00a689 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Mon, 24 Jul 2023 13:39:06 +0200 Subject: [PATCH 181/612] Add Italian docs --- docs/CONTRIBUTING-IT.md | 37 +++++++++++++++++++++++++++++++++++++ docs/DEVCONTAINER-IT.md | 14 ++++++++++++++ docs/README-IT.md | 6 +++--- docs/SECURITY-IT.md | 11 +++++++++++ 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 docs/CONTRIBUTING-IT.md create mode 100644 docs/DEVCONTAINER-IT.md create mode 100644 docs/SECURITY-IT.md diff --git a/docs/CONTRIBUTING-IT.md b/docs/CONTRIBUTING-IT.md new file mode 100644 index 000000000..a3a5fd2b6 --- /dev/null +++ b/docs/CONTRIBUTING-IT.md @@ -0,0 +1,37 @@ +# Contribuzione a RustDesk + +RustDesk accoglie con favore il contributo di tutti. +Ecco le linee guida se stai pensando di aiutarci. + +## Contribuzione + +I contributi a RustDesk o alle sue dipendenze dovrebbero essere forniti sotto forma di richieste pull GitHub. +Ogni richiesta pull verr esaminata da un collaboratore principale (qualcuno con il permesso di applicare) ed abilitato all'uso dell'albero principale o dare un feedback per le modifiche che sarebbero necessarie. +Tutti i contributi dovrebbero seguire questo formato, anche quelli dei contributori principali. + +Se desideri lavorare su un problema, rivendicalo prima commentando +il problema di GitHub su cui vuoi lavorare. +Questo per evitare duplicati sforzi dei contributori sullo stesso problema. + +## Elenco di controllo delle richieste pull + +- Branch del master branch e, se necessario, rebase al master attuale branch prima di inviare la richiesta pull. + Se l'unione non in mod pulito con il master ti potrebbe essere chiesto di effettuare il rebase delle modifiche. + +- Le modifiche dovrebbero essere le pi piccole possibile, assicurando al tempo stesso che ogni modifica sia corretta in modo indipendente (ovvero, ogni modifica dovrebbe essere compilabile e superare i test). + +- Le modifiche devono essere accompagnati da un certificato di origine per sviluppatori firmato (http://developercertificate.org), che indica che tu (e il tuo datore di lavoro se applicabile) accetti di essere vincolato dai termini della [licenza progetto](../LICENCE). In git, questa l'opzione `-s` di `git commit` + +- Se la tua patch non viene esaminata o hai bisogno che una persona specifica la esamini, puoi @-rispondere ad un revisore chiedendo una revisione nella richiesta pull o un commento, oppure puoi chiedere una revisione tramite [email](mailto:info@rustdesk.com). + +- Aggiungi test relativi al bug corretto o alla nuova funzionalit. + +Per istruzioni specifiche su git, vedi [Workflow GitHub - 101](https://github.com/servo/servo/wiki/GitHub-workflow). + +## Condotta + +https://github.com/rustdesk/rustdesk/blob/master/docs/CODE_OF_CONDUCT-IT.md + +## Comunicazioni + +I contributori di RustDesk frequentano [Discord](https://discord.gg/nDceKgxnkV). diff --git a/docs/DEVCONTAINER-IT.md b/docs/DEVCONTAINER-IT.md new file mode 100644 index 000000000..713c6fc37 --- /dev/null +++ b/docs/DEVCONTAINER-IT.md @@ -0,0 +1,14 @@ + +Dopo l'avvio di devcontainer nel contenitore docker, viene creato un binario linux in modalità debug. + +Attualmente devcontainer consente creazione build Linux e Android sia in modalità debug che in modalità rilascio. + +Di seguito è riportata la tabella dei comandi da eseguire dalla root del progetto per la creazione di build specifiche. + +Comando|Tipo build|Modo +-|-|-| +`.devcontainer/build.sh --debug linux`|Linux|debug +`.devcontainer/build.sh --release linux`|Linux|release +`.devcontainer/build.sh --debug android`|android-arm64|debug +`.devcontainer/build.sh --release android`|android-arm64|release + diff --git a/docs/README-IT.md b/docs/README-IT.md index c41770f08..077600ed1 100644 --- a/docs/README-IT.md +++ b/docs/README-IT.md @@ -18,9 +18,9 @@ Funziona immediatamente, nessuna configurazione richiesta. Hai il pieno controll Puoi usare il nostro server rendezvous/relay, [configurare il tuo server](https://rustdesk.com/server) o [realizzare il tuo server rendezvous/relay](https://github.com/rustdesk/rustdesk-server-demo). RustDesk accoglie il contributo di tutti. -Per ulteriori informazioni su come inizare a contribuire, vedi [`docs/CONTRIBUTING.md`](CONTRIBUTING.md). +Per ulteriori informazioni su come iniziare a contribuire, vedi [`docs/CONTRIBUTING-IT.md`](CONTRIBUTING.md). -[**BINARY DOWNLOAD**](https://github.com/rustdesk/rustdesk/releases) +[**DOWNLOAD PROGRAMMA**](https://github.com/rustdesk/rustdesk/releases) ## Server pubblici gratuiti @@ -113,7 +113,7 @@ VCPKG_ROOT=$HOME/vcpkg cargo run ### Cambiare Wayland in X11 (Xorg) RustDesk non supporta Wayland. -Controlla [quei](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) per configurare Xorg come sessione predefinita di GNOME. +Controlla [qui](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) per configurare Xorg come sessione predefinita di GNOME. ## Come compilare con Docker diff --git a/docs/SECURITY-IT.md b/docs/SECURITY-IT.md new file mode 100644 index 000000000..91573dcf7 --- /dev/null +++ b/docs/SECURITY-IT.md @@ -0,0 +1,11 @@ +# Policy sicurezza + +## Segnalazione di una vulnerabilità + +Attribuiamo grande importanza alla sicurezza del progetto. +Incoraggiamo tutti gli utenti a segnalare eventuali vulnerabilità di sicurezza che ci scoprono. +Se trovi una vulnerabilità nel progetto RustDesk, segnalala responsabilmente inviando un'email a info@rustdesk.com. + +Al momento non abbiamo un programma di taglia sui bug. +Siamo una piccola squadra che cerca di risolvere un grosso problema. +Ti esortiamo a segnalare responsabilmente tutte le vulnerabilità in modo da poter continuare a sviluppare un'applicazione sicura per l'intera comunità. From 58e252a875b2b5ae28e0b8cd9e14cfcca5768c9b Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 24 Jul 2023 21:48:49 +0800 Subject: [PATCH 182/612] update hwcodec to specify nvenc gpu via env Signed-off-by: 21pages --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index dec261d9d..6a014053b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2988,7 +2988,7 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hwcodec" version = "0.1.1" -source = "git+https://github.com/21pages/hwcodec?branch=stable#d5daa75d8cb273781dc21676cb00edda5a4cf8b9" +source = "git+https://github.com/21pages/hwcodec?branch=stable#82cdc15457e42feaf14e1b38622506b2d54baf76" dependencies = [ "bindgen 0.59.2", "cc", From 28ef64cba1ee1d14b435a12f8bcbd1a815e122a3 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 25 Jul 2023 13:38:42 +0800 Subject: [PATCH 183/612] remove the annoying message --- src/platform/windows.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index d3dcbae81..22ff64687 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1333,7 +1333,6 @@ pub fn get_license_from_exe_name() -> ResultType { // if defined portable appname entry, replace original executable name with it. if let Ok(portable_exe) = std::env::var(PORTABLE_APPNAME_RUNTIME_ENV_KEY) { exe = portable_exe; - log::debug!("update portable executable name to {}", exe); } get_license_from_string(&exe) } From 20cdb87e28724a2471e32e24459d973541969602 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 25 Jul 2023 15:32:42 +0800 Subject: [PATCH 184/612] try fix android mouse mode Signed-off-by: dignow --- flutter/lib/common.dart | 2 +- flutter/lib/common/widgets/remote_input.dart | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 4d25e6d0d..3fce132c6 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1337,7 +1337,7 @@ class LastWindowPosition { return LastWindowPosition(m["width"], m["height"], m["offsetWidth"], m["offsetHeight"], m["isMaximized"]); } catch (e) { - debugPrintStack(label: e.toString()); + debugPrintStack(label: 'Failed to load LastWindowPosition "$content" ${e.toString()}'); return null; } } diff --git a/flutter/lib/common/widgets/remote_input.dart b/flutter/lib/common/widgets/remote_input.dart index 49c8879f3..b2a22a650 100644 --- a/flutter/lib/common/widgets/remote_input.dart +++ b/flutter/lib/common/widgets/remote_input.dart @@ -93,8 +93,8 @@ class _RawTouchGestureDetectorRegionState } if (handleTouch) { ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); + inputModel.tapDown(MouseButtons.left); } - inputModel.tapDown(MouseButtons.left); } onTapUp(TapUpDetails d) { @@ -107,6 +107,13 @@ class _RawTouchGestureDetectorRegionState inputModel.tapUp(MouseButtons.left); } + onTap() { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + inputModel.tap(MouseButtons.left); + } + onDoubleTapDown(TapDownDetails d) { lastDeviceKind = d.kind; if (lastDeviceKind != PointerDeviceKind.touch) { @@ -115,6 +122,9 @@ class _RawTouchGestureDetectorRegionState if (handleTouch) { ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); } + if (!ffiModel.touchMode) { + inputModel.tapDown(MouseButtons.left); + } } onDoubleTap() { @@ -156,7 +166,7 @@ class _RawTouchGestureDetectorRegionState if (lastDeviceKind != PointerDeviceKind.touch) { return; } - if (isDesktop || !handleTouch) { + if (isDesktop || !ffiModel.touchMode) { inputModel.tap(MouseButtons.right); } } @@ -291,7 +301,8 @@ class _RawTouchGestureDetectorRegionState () => TapGestureRecognizer(), (instance) { instance ..onTapDown = onTapDown - ..onTapUp = onTapUp; + ..onTapUp = onTapUp + ..onTap = onTap; }), DoubleTapGestureRecognizer: GestureRecognizerFactoryWithHandlers( From e70f3f21250e3efa5d44f5312cf1ac8f5f88b657 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 25 Jul 2023 15:46:29 +0800 Subject: [PATCH 185/612] fix qos and add auto_adjust_fps Signed-off-by: 21pages --- libs/hbb_common/protos/message.proto | 1 + libs/scrap/src/common/codec.rs | 9 +++---- src/client/io_loop.rs | 17 +++++++++---- src/server/connection.rs | 4 +++ src/server/video_qos.rs | 38 +++++++++++++++++++++++++--- 5 files changed, 55 insertions(+), 14 deletions(-) diff --git a/libs/hbb_common/protos/message.proto b/libs/hbb_common/protos/message.proto index ca12eb908..dac137e1c 100644 --- a/libs/hbb_common/protos/message.proto +++ b/libs/hbb_common/protos/message.proto @@ -663,6 +663,7 @@ message Misc { PluginRequest plugin_request = 25; PluginFailure plugin_failure = 26; uint32 full_speed_fps = 27; + uint32 auto_adjust_fps = 28; } } diff --git a/libs/scrap/src/common/codec.rs b/libs/scrap/src/common/codec.rs index 84eb1c43e..fac5f82d7 100644 --- a/libs/scrap/src/common/codec.rs +++ b/libs/scrap/src/common/codec.rs @@ -535,11 +535,10 @@ pub fn codec_thread_num() -> usize { info = format!("cpu loadavg:{}", avg.one); res = (((max as f64) - avg.one) * 0.5).round() as usize; } - res = if res > 0 && res <= max / 2 { - res - } else { - std::cmp::max(1, max / 2) - }; + res = std::cmp::min(res, max / 2); + if res == 0 { + res = 1; + } // avoid frequent log let log = match THREAD_LOG_TIME.lock().unwrap().clone() { Some(instant) => instant.elapsed().as_secs() > 1, diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index fb0bba5a9..b4e311227 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -895,7 +895,9 @@ impl Remote { } // decrease judgement let debounce = if decode_fps > 10 { decode_fps / 2 } else { 5 }; // 500ms - let should_decrease = len >= debounce && len > ctl.last_queue_size + 5; // exceed debounce or still caching + let should_decrease = len >= debounce // exceed debounce + && len > ctl.last_queue_size + 5 // still caching + && !ctl.last_custom_fps.unwrap_or(i32::MAX) < limited_fps as i32; // NOT already set a smaller one // increase judgement if len <= 1 { @@ -919,10 +921,15 @@ impl Remote { } // send custom fps let mut misc = Misc::new(); - misc.set_option(OptionMessage { - custom_fps, - ..Default::default() - }); + if version > hbb_common::get_version_number("1.2.1") { + // avoid confusion with custom image quality fps + misc.set_auto_adjust_fps(custom_fps as _); + } else { + misc.set_option(OptionMessage { + custom_fps, + ..Default::default() + }); + } let mut msg = Message::new(); msg.set_misc(misc); self.sender.send(Data::Message(msg)).ok(); diff --git a/src/server/connection.rs b/src/server/connection.rs index 39a87547e..cb993301e 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1940,6 +1940,10 @@ impl Connection { .lock() .unwrap() .user_full_speed_fps(self.inner.id(), fps), + Some(misc::Union::AutoAdjustFps(fps)) => video_service::VIDEO_QOS + .lock() + .unwrap() + .user_auto_adjust_fps(self.inner.id(), fps), _ => {} }, Some(message::Union::AudioFrame(frame)) => { diff --git a/src/server/video_qos.rs b/src/server/video_qos.rs index 18b5f50de..dda15fd55 100644 --- a/src/server/video_qos.rs +++ b/src/server/video_qos.rs @@ -31,6 +31,7 @@ struct Delay { #[derive(Default, Debug, Copy, Clone)] struct UserData { full_speed_fps: Option, + auto_adjust_fps: Option, custom_fps: Option, quality: Option<(i64, Quality)>, // (time, quality) delay: Option, @@ -90,11 +91,15 @@ pub enum RefreshType { impl VideoQoS { pub fn spf(&self) -> Duration { - Duration::from_secs_f32(1. / (self.fps as f32)) + Duration::from_secs_f32(1. / (self.fps() as f32)) } pub fn fps(&self) -> u32 { - self.fps + if self.fps >= MIN_FPS && self.fps <= MAX_FPS { + self.fps + } else { + FPS + } } pub fn store_bitrate(&mut self, bitrate: u32) { @@ -118,6 +123,12 @@ impl VideoQoS { let user_fps = |u: &UserData| { // full_speed_fps let mut fps = u.full_speed_fps.unwrap_or_default() * 9 / 10; + // auto adjust fps + if let Some(auto_adjust_fps) = u.auto_adjust_fps { + if fps == 0 || auto_adjust_fps < fps { + fps = auto_adjust_fps; + } + } // custom_fps if let Some(custom_fps) = u.custom_fps { if fps == 0 || custom_fps < fps { @@ -128,7 +139,7 @@ impl VideoQoS { if let Some(delay) = u.delay { fps = match delay.state { DelayState::Normal => fps, - DelayState::LowDelay => fps, + DelayState::LowDelay => fps * 3 / 4, DelayState::HighDelay => fps / 2, DelayState::Broken => fps / 4, } @@ -181,7 +192,11 @@ impl VideoQoS { if delay != DelayState::Normal { match self.quality { Quality::Best => { - quality = Quality::Balanced; + quality = if delay == DelayState::Broken { + Quality::Low + } else { + Quality::Balanced + }; } Quality::Balanced => { quality = Quality::Low; @@ -259,6 +274,21 @@ impl VideoQoS { self.refresh(None); } + pub fn user_auto_adjust_fps(&mut self, id: i32, fps: u32) { + if let Some(user) = self.users.get_mut(&id) { + user.auto_adjust_fps = Some(fps); + } else { + self.users.insert( + id, + UserData { + auto_adjust_fps: Some(fps), + ..Default::default() + }, + ); + } + self.refresh(None); + } + pub fn user_image_quality(&mut self, id: i32, image_quality: i32) { // https://github.com/rustdesk/rustdesk/blob/d716e2b40c38737f1aa3f16de0dec67394a6ac68/src/server/video_service.rs#L493 let convert_quality = |q: i32| { From 006df4d20b25f8e976831160b46737e2b005efdb Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 25 Jul 2023 16:37:39 +0800 Subject: [PATCH 186/612] chore --- src/core_main.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index 2644fe157..dc363a03c 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -278,12 +278,11 @@ pub fn core_main() -> Option> { } return None; } else if args[0] == "--config" { - if args.len() == 2 { + if args.len() == 2 && !args[0].contains("host=") { if crate::platform::is_installed() && crate::platform::check_super_user_permission().unwrap_or_default() { - // arg: starting with `host=`, e.g. `host=127.0.0.1,api=https://test.com,key=asfs`, - // or the filename (without ext) used in renaming exe. + // encrypted string used in renaming exe. let name = if args[1].ends_with(".exe") { args[1].to_owned() } else { From 4bbef031d56264dac203f617d723c7b0e7bf644e Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 25 Jul 2023 17:07:55 +0800 Subject: [PATCH 187/612] chore: https://github.com/rustdesk/rustdesk-server-pro/issues/32#issuecomment-1649403386 --- src/core_main.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index dc363a03c..cd972b25d 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -245,8 +245,11 @@ pub fn core_main() -> Option> { if crate::platform::is_installed() && crate::platform::check_super_user_permission().unwrap_or_default() { - crate::ipc::set_permanent_password(args[1].to_owned()).unwrap(); - my_println!("Done!"); + if let Err(err) = crate::ipc::set_permanent_password(args[1].to_owned()) { + my_println!("{err}"); + } else { + my_println!("Done!"); + } } else { my_println!("Installation and administrative privileges required!"); } From b543e6d143d8c5a3c4b0f3263f53669561891688 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 25 Jul 2023 20:29:16 +0800 Subject: [PATCH 188/612] fix #5119 --- .github/workflows/flutter-build.yml | 2 +- .github/workflows/flutter-tag.yml | 2 +- .github/workflows/history.yml | 2 +- Cargo.toml | 2 +- appimage/AppImageBuilder-aarch64.yml | 4 ++-- appimage/AppImageBuilder-x86_64.yml | 4 ++-- flatpak/rustdesk.json | 4 ++-- flutter/pubspec.yaml | 2 +- res/PKGBUILD | 2 +- res/rpm-flutter-suse.spec | 2 +- res/rpm-flutter.spec | 2 +- res/rpm.spec | 2 +- src/lang/ca.rs | 3 +++ src/lang/cn.rs | 3 +++ src/lang/cs.rs | 3 +++ src/lang/da.rs | 3 +++ src/lang/de.rs | 3 +++ src/lang/el.rs | 3 +++ src/lang/eo.rs | 3 +++ src/lang/es.rs | 3 +++ src/lang/fa.rs | 3 +++ src/lang/fr.rs | 3 +++ src/lang/hu.rs | 3 +++ src/lang/id.rs | 3 +++ src/lang/it.rs | 3 +++ src/lang/ja.rs | 3 +++ src/lang/ko.rs | 3 +++ src/lang/kz.rs | 3 +++ src/lang/lt.rs | 3 +++ src/lang/nl.rs | 3 +++ src/lang/pl.rs | 3 +++ src/lang/pt_PT.rs | 3 +++ src/lang/ptbr.rs | 3 +++ src/lang/ro.rs | 3 +++ src/lang/ru.rs | 3 +++ src/lang/sk.rs | 3 +++ src/lang/sl.rs | 3 +++ src/lang/sq.rs | 3 +++ src/lang/sr.rs | 3 +++ src/lang/sv.rs | 3 +++ src/lang/template.rs | 3 +++ src/lang/th.rs | 3 +++ src/lang/tr.rs | 3 +++ src/lang/tw.rs | 3 +++ src/lang/ua.rs | 3 +++ src/lang/vn.rs | 3 +++ 46 files changed, 117 insertions(+), 15 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 1c3aa1673..3bbadda58 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -22,7 +22,7 @@ env: # vcpkg version: 2023.04.15 # for multiarch gcc compatibility VCPKG_COMMIT_ID: "501db0f17ef6df184fcdbfbe0f87cde2313b6ab1" - VERSION: "1.2.1" + VERSION: "1.2.2" NDK_VERSION: "r25c" #signing keys env variable checks ANDROID_SIGNING_KEY: '${{ secrets.ANDROID_SIGNING_KEY }}' diff --git a/.github/workflows/flutter-tag.yml b/.github/workflows/flutter-tag.yml index 8ec4a9242..56ec2c43e 100644 --- a/.github/workflows/flutter-tag.yml +++ b/.github/workflows/flutter-tag.yml @@ -15,4 +15,4 @@ jobs: secrets: inherit with: upload-artifact: true - upload-tag: "1.2.1" + upload-tag: "1.2.2" diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index 40483d712..c2c3dcf03 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -10,7 +10,7 @@ env: # vcpkg version: 2022.05.10 # for multiarch gcc compatibility VCPKG_COMMIT_ID: "14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44" - VERSION: "1.2.1" + VERSION: "1.2.2" jobs: build-for-windows-2022-12-05: diff --git a/Cargo.toml b/Cargo.toml index 74e19b3f3..b5a5a9a50 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rustdesk" -version = "1.2.1" +version = "1.2.2" authors = ["rustdesk "] edition = "2021" build= "build.rs" diff --git a/appimage/AppImageBuilder-aarch64.yml b/appimage/AppImageBuilder-aarch64.yml index 4c552b6f6..e4cfb723e 100644 --- a/appimage/AppImageBuilder-aarch64.yml +++ b/appimage/AppImageBuilder-aarch64.yml @@ -2,7 +2,7 @@ version: 1 script: - rm -rf ./AppDir || true - - bsdtar -zxvf ../rustdesk-1.2.1.deb + - bsdtar -zxvf ../rustdesk-1.2.2.deb - tar -xvf ./data.tar.xz - mkdir ./AppDir - mv ./usr ./AppDir/usr @@ -17,7 +17,7 @@ AppDir: id: rustdesk name: rustdesk icon: rustdesk - version: 1.2.1 + version: 1.2.2 exec: usr/lib/rustdesk/rustdesk exec_args: $@ apt: diff --git a/appimage/AppImageBuilder-x86_64.yml b/appimage/AppImageBuilder-x86_64.yml index b3f06a46e..1a443dc34 100644 --- a/appimage/AppImageBuilder-x86_64.yml +++ b/appimage/AppImageBuilder-x86_64.yml @@ -2,7 +2,7 @@ version: 1 script: - rm -rf ./AppDir || true - - bsdtar -zxvf ../rustdesk-1.2.1.deb + - bsdtar -zxvf ../rustdesk-1.2.2.deb - tar -xvf ./data.tar.xz - mkdir ./AppDir - mv ./usr ./AppDir/usr @@ -17,7 +17,7 @@ AppDir: id: rustdesk name: rustdesk icon: rustdesk - version: 1.2.1 + version: 1.2.2 exec: usr/lib/rustdesk/rustdesk exec_args: $@ apt: diff --git a/flatpak/rustdesk.json b/flatpak/rustdesk.json index 53736dd9e..ff7701d27 100644 --- a/flatpak/rustdesk.json +++ b/flatpak/rustdesk.json @@ -12,7 +12,7 @@ "name": "rustdesk", "buildsystem": "simple", "build-commands": [ - "bsdtar -zxvf rustdesk-1.2.1.deb", + "bsdtar -zxvf rustdesk-1.2.2.deb", "tar -xvf ./data.tar.xz", "cp -r ./usr/* /app/", "mkdir -p /app/bin && ln -s /app/lib/rustdesk/rustdesk /app/bin/rustdesk", @@ -25,7 +25,7 @@ "sources": [ { "type": "file", - "path": "../rustdesk-1.2.1.deb" + "path": "../rustdesk-1.2.2.deb" }, { "type": "file", diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index 4b6e964ad..e7bc54b4b 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # 1.1.9-1 works for android, but for ios it becomes 1.1.91, need to set it to 1.1.9-a.1 for iOS, will get 1.1.9.1, but iOS store not allow 4 numbers -version: 1.2.1 +version: 1.2.2 environment: sdk: ">=2.17.0" diff --git a/res/PKGBUILD b/res/PKGBUILD index 78fb5aeba..9e5b57b9d 100644 --- a/res/PKGBUILD +++ b/res/PKGBUILD @@ -1,5 +1,5 @@ pkgname=rustdesk -pkgver=1.2.1 +pkgver=1.2.2 pkgrel=0 epoch= pkgdesc="" diff --git a/res/rpm-flutter-suse.spec b/res/rpm-flutter-suse.spec index 94dfbeab0..9b5131e07 100644 --- a/res/rpm-flutter-suse.spec +++ b/res/rpm-flutter-suse.spec @@ -1,5 +1,5 @@ Name: rustdesk -Version: 1.2.1 +Version: 1.2.2 Release: 0 Summary: RPM package License: GPL-3.0 diff --git a/res/rpm-flutter.spec b/res/rpm-flutter.spec index c98c08ecb..42009acb0 100644 --- a/res/rpm-flutter.spec +++ b/res/rpm-flutter.spec @@ -1,5 +1,5 @@ Name: rustdesk -Version: 1.2.1 +Version: 1.2.2 Release: 0 Summary: RPM package License: GPL-3.0 diff --git a/res/rpm.spec b/res/rpm.spec index 484505fbc..6a934b1f2 100644 --- a/res/rpm.spec +++ b/res/rpm.spec @@ -1,5 +1,5 @@ Name: rustdesk -Version: 1.2.1 +Version: 1.2.2 Release: 0 Summary: RPM package License: GPL-3.0 diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 71d80f02e..fdacb2f4e 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 69b5e33bf..d0c5e7bef 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "退出"), ("Open", "打开"), ("logout_tip", "确定要退出登录吗?"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 07c9e2c09..084adaaaf 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 6d4ffa8c1..129c2251f 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 0e8659a8e..8d106a7df 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Beenden"), ("Open", "Öffnen"), ("logout_tip", "Sind Sie sicher, dass Sie sich abmelden wollen?"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 78cc94a7b..5794a0803 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 548377e2a..5f3c4e7db 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 7f9361eb4..e53bd4ff9 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Salir"), ("Open", "Abrir"), ("logout_tip", "¿Seguro que deseas cerrar sesión?"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index e5d29558a..6ad33256c 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "خروج"), ("Open", "باز کردن"), ("logout_tip", "آیا برای خارج شدن مطمئن هستید؟"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 255e3d27e..09e048d3a 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 973a04a17..a963c1836 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index f8662bb0e..dfa6d380d 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index f61df2525..63d5199b8 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Esci da RustDesk"), ("Open", "Apri RustDesk"), ("logout_tip", "Sei sicuro di voler uscire?"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index f6aa3b881..c326e44f3 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 5c6eaf559..3b56a69be 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 792ffa157..9f1287dc1 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index e7c0c79e1..b95ac6000 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 3bb8e762d..6c88ffb76 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Verlaten"), ("Open", "Open"), ("logout_tip", "Weet je zeker dat je je wilt afmelden?"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index f6e9caf0f..89271b5ec 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Wyjście"), ("Open", "Otwórz"), ("logout_tip", "Na pewno chcesz się wylogować?"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index dc91081b9..6f1b3a5ac 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index fda7c867d..f59a5ea20 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index e2fb9003b..6f326442c 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Ieși"), ("Open", "Deschide"), ("logout_tip", "Sigur vrei să te deconectezi?"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index a210ef116..578fd42cb 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Выход"), ("Open", "Открыть"), ("logout_tip", "Вы действительно хотите выйти?"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 3fad5e4f7..c7a2c7421 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index df0b94f8a..d08afcf08 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index b62557e0b..4c893437e 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index cfce2aa9d..6c16abbe7 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 6c752ed3a..1df13f952 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 9cbd25822..d1f2f23bb 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index edfdbb540..f3c629b2a 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index d1a121f37..4e2c6defc 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 5240b55f6..df1dbcd2c 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "退出"), ("Open", "開啟"), ("logout_tip", "確定要退出登錄嗎?"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index e92a7d1b4..f8f0a8fed 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Вийти"), ("Open", "Відкрити"), ("logout_tip", "Ви впевнені, що хочете вилогуватися?"), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 0bdf2df29..458fbba1c 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -518,5 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", ""), ("Open", ""), ("logout_tip", ""), + ("Service", ""), + ("Start", ""), + ("Stop", ""), ].iter().cloned().collect(); } From b7c9c187e58bdb01a631b99e88b206297693f0d8 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Tue, 25 Jul 2023 14:44:26 +0200 Subject: [PATCH 189/612] Update italian language --- src/lang/it.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 63d5199b8..c3209ddcd 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -518,8 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Esci da RustDesk"), ("Open", "Apri RustDesk"), ("logout_tip", "Sei sicuro di voler uscire?"), - ("Service", ""), - ("Start", ""), - ("Stop", ""), + ("Service", "Servizio"), + ("Start", "Avvia"), + ("Stop", "Ferma"), ].iter().cloned().collect(); } From 033645a7e0b819834db3145477a3ff4a55c2270c Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 25 Jul 2023 22:09:42 +0800 Subject: [PATCH 190/612] fix mobile mouse mode Signed-off-by: dignow --- flutter/lib/common/widgets/gestures.dart | 24 +++++++++++-- flutter/lib/common/widgets/remote_input.dart | 38 +++++++++++++++----- 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/flutter/lib/common/widgets/gestures.dart b/flutter/lib/common/widgets/gestures.dart index ff575777d..aeff15041 100644 --- a/flutter/lib/common/widgets/gestures.dart +++ b/flutter/lib/common/widgets/gestures.dart @@ -184,6 +184,8 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer { _TapTracker? _firstTap; _TapTracker? _secondTap; + PointerDownEvent? _lastPointerDownEvent; + final Map _trackers = {}; @override @@ -238,6 +240,7 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer { gestureSettings: gestureSettings, ); _trackers[event.pointer] = tracker; + _lastPointerDownEvent = event; tracker.startTrackingPointer(_handleEvent, event.transform); } @@ -248,7 +251,11 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer { _registerFirstTap(tracker); } else if (_secondTap != null) { if (event.pointer == _secondTap!.pointer) { - if (onHoldDragEnd != null) onHoldDragEnd!(DragEndDetails()); + if (onHoldDragEnd != null) { + onHoldDragEnd!(DragEndDetails()); + _secondTap = null; + _isStart = false; + } } } else { _reject(tracker); @@ -303,7 +310,11 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer { _secondTap?.entry.resolve(GestureDisposition.accepted); _isStart = true; // TODO start details - if (onHoldDragStart != null) onHoldDragStart!(DragStartDetails()); + if (onHoldDragStart != null) { + onHoldDragStart!(DragStartDetails( + kind: _lastPointerDownEvent?.kind, + )); + } } void _reject(_TapTracker tracker) { @@ -435,6 +446,8 @@ class DoubleFinerTapGestureRecognizer extends GestureRecognizer { Timer? _firstTapTimer; _TapTracker? _firstTap; + PointerDownEvent? _lastPointerDownEvent; + var _isStart = false; final Set _upTap = {}; @@ -476,6 +489,7 @@ class DoubleFinerTapGestureRecognizer extends GestureRecognizer { } else { // first tap _isStart = true; + _lastPointerDownEvent = event; _startFirstTapDownTimer(); } _trackTap(event); @@ -591,7 +605,11 @@ class DoubleFinerTapGestureRecognizer extends GestureRecognizer { void _resolve() { // TODO tap down details - if (onDoubleFinerTap != null) onDoubleFinerTap!(TapDownDetails()); + if (onDoubleFinerTap != null) { + onDoubleFinerTap!(TapDownDetails( + kind: _lastPointerDownEvent?.kind, + )); + } _trackers.forEach((key, value) { value.entry.resolve(GestureDisposition.accepted); }); diff --git a/flutter/lib/common/widgets/remote_input.dart b/flutter/lib/common/widgets/remote_input.dart index b2a22a650..bed4dee8a 100644 --- a/flutter/lib/common/widgets/remote_input.dart +++ b/flutter/lib/common/widgets/remote_input.dart @@ -103,8 +103,8 @@ class _RawTouchGestureDetectorRegionState } if (handleTouch) { ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); + inputModel.tapUp(MouseButtons.left); } - inputModel.tapUp(MouseButtons.left); } onTap() { @@ -122,9 +122,6 @@ class _RawTouchGestureDetectorRegionState if (handleTouch) { ffi.cursorModel.move(d.localPosition.dx, d.localPosition.dy); } - if (!ffiModel.touchMode) { - inputModel.tapDown(MouseButtons.left); - } } onDoubleTap() { @@ -146,6 +143,15 @@ class _RawTouchGestureDetectorRegionState } } + onLongPressUp() { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + if (handleTouch) { + inputModel.tapUp(MouseButtons.left); + } + } + // for mobiles onLongPress() { if (lastDeviceKind != PointerDeviceKind.touch) { @@ -161,6 +167,14 @@ class _RawTouchGestureDetectorRegionState inputModel.tap(MouseButtons.right); } + onDoubleFinerTapDown(TapDownDetails d) { + lastDeviceKind = d.kind; + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + // ignore for desktop and mobile + } + onDoubleFinerTap(TapDownDetails d) { lastDeviceKind = d.kind; if (lastDeviceKind != PointerDeviceKind.touch) { @@ -231,12 +245,16 @@ class _RawTouchGestureDetectorRegionState if (lastDeviceKind != PointerDeviceKind.touch) { return; } - if (handleTouch) { - inputModel.sendMouse('up', MouseButtons.left); - } + inputModel.sendMouse('up', MouseButtons.left); } // scale + pan event + onTwoFingerScaleStart(ScaleStartDetails d) { + if (lastDeviceKind != PointerDeviceKind.touch) { + return; + } + } + onTwoFingerScaleUpdate(ScaleUpdateDetails d) { if (lastDeviceKind != PointerDeviceKind.touch) { return; @@ -316,6 +334,7 @@ class _RawTouchGestureDetectorRegionState () => LongPressGestureRecognizer(), (instance) { instance ..onLongPressDown = onLongPressDown + ..onLongPressUp = onLongPressUp ..onLongPress = onLongPress; }), // Customized @@ -330,7 +349,9 @@ class _RawTouchGestureDetectorRegionState DoubleFinerTapGestureRecognizer: GestureRecognizerFactoryWithHandlers( () => DoubleFinerTapGestureRecognizer(), (instance) { - instance.onDoubleFinerTap = onDoubleFinerTap; + instance + ..onDoubleFinerTap = onDoubleFinerTap + ..onDoubleFinerTapDown = onDoubleFinerTapDown; }), CustomTouchGestureRecognizer: GestureRecognizerFactoryWithHandlers( @@ -340,6 +361,7 @@ class _RawTouchGestureDetectorRegionState instance ..onOneFingerPanUpdate = onOneFingerPanUpdate ..onOneFingerPanEnd = onOneFingerPanEnd + ..onTwoFingerScaleStart = onTwoFingerScaleStart ..onTwoFingerScaleUpdate = onTwoFingerScaleUpdate ..onTwoFingerScaleEnd = onTwoFingerScaleEnd ..onThreeFingerVerticalDragUpdate = onThreeFingerVerticalDragUpdate; From 09d2502f530b6aa9d9a0985caa40dcd6f92e17d3 Mon Sep 17 00:00:00 2001 From: SergeyMy <131688106+SergeyMy@users.noreply.github.com> Date: Tue, 25 Jul 2023 20:31:09 +0500 Subject: [PATCH 191/612] Update ru.rs --- src/lang/ru.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 578fd42cb..9b4b65b36 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -518,8 +518,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Выход"), ("Open", "Открыть"), ("logout_tip", "Вы действительно хотите выйти?"), - ("Service", ""), - ("Start", ""), - ("Stop", ""), + ("Service", "Сервис"), + ("Start", "Запустить"), + ("Stop", "Остановить"), ].iter().cloned().collect(); } From 5e9841e7abe10b1838cd66ff72899ee64f8ec444 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 26 Jul 2023 00:40:03 +0800 Subject: [PATCH 192/612] fix window save pos, debug win Signed-off-by: dignow --- flutter/lib/common.dart | 12 +++++----- .../lib/desktop/widgets/tabbar_widget.dart | 22 +++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 71194b42a..eef98179a 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1383,12 +1383,17 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { return; } final position = frame.topLeft; + if (position.dx < 0 || position.dy < 0) { + debugPrint("Window $windowId is hidden, ignoring position restoration"); + return; + } + final sz = frame.size; final isMaximized = await wc.isMaximized(); final pos = LastWindowPosition( sz.width, sz.height, position.dx, position.dy, isMaximized); debugPrint( - "saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}"); + "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}"); await bind.setLocalFlutterConfig( k: kWindowPrefix + type.name, v: pos.toString()); break; @@ -1864,10 +1869,7 @@ Future onActiveWindowChanged() async { if (rustDeskWinManager.getActiveWindows().isEmpty) { // close all sub windows try { - await Future.wait([ - saveWindowPosition(WindowType.Main), - rustDeskWinManager.closeAllSubWindows() - ]); + await rustDeskWinManager.closeAllSubWindows(); } catch (err) { debugPrintStack(label: "$err"); } finally { diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 72adc42da..c3ef95c75 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -478,6 +478,8 @@ class WindowActionPanel extends StatefulWidget { class WindowActionPanelState extends State with MultiWindowListener, WindowListener { + final _saveFrameDebounce = Debouncer(delay: Duration(seconds: 1)); + @override void initState() { super.initState(); @@ -537,6 +539,26 @@ class WindowActionPanelState extends State super.onWindowUnmaximize(); } + _saveFrame() async { + if (widget.tabType == DesktopTabType.main) { + await saveWindowPosition(WindowType.Main); + } else if (kWindowType != null && kWindowId != null) { + await saveWindowPosition(kWindowType!, windowId: kWindowId); + } + } + + @override + void onWindowMoved() { + _saveFrameDebounce.call(_saveFrame); + super.onWindowMoved(); + } + + @override + void onWindowResized() { + _saveFrameDebounce.call(_saveFrame); + super.onWindowMoved(); + } + @override void onWindowClose() async { // hide window on close From 20b39c7215d43f8706397ea49f367a84ccdb2f61 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Tue, 25 Jul 2023 22:12:50 +0200 Subject: [PATCH 193/612] Fix sciter build on MacOS c86a8fff034c7dd3b3ddf4f33d69eaee5c3538b0 accidentally duplicated that part of the code from send_mouse. Removing it. --- src/client.rs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/client.rs b/src/client.rs index a8bc52c72..a48669899 100644 --- a/src/client.rs +++ b/src/client.rs @@ -2025,13 +2025,6 @@ pub fn send_pointer_device_event( if command { evt.modifiers.push(ControlKey::Meta.into()); } - #[cfg(all(target_os = "macos", not(feature = "flutter")))] - if check_scroll_on_mac(mask, x, y) { - let factor = 3; - mouse_event.mask = crate::input::MOUSE_TYPE_TRACKPAD; - mouse_event.x *= factor; - mouse_event.y *= factor; - } msg_out.set_pointer_device_event(evt); interface.send(Data::Message(msg_out)); } From b7123c5be81eba2b5d40876db8f4784cbde1f226 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 26 Jul 2023 07:52:40 +0800 Subject: [PATCH 194/612] fix, window save pos, debug Signed-off-by: dignow --- flutter/lib/common.dart | 47 +++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index eef98179a..9668f5c26 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1363,15 +1363,19 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { debugPrint( "Error: windowId cannot be null when saving positions for sub window"); } + + late Offset position; + late Size sz; + late bool isMaximized; switch (type) { case WindowType.Main: - final position = await windowManager.getPosition(); - final sz = await windowManager.getSize(); - final isMaximized = await windowManager.isMaximized(); - final pos = LastWindowPosition( - sz.width, sz.height, position.dx, position.dy, isMaximized); - await bind.setLocalFlutterConfig( - k: kWindowPrefix + type.name, v: pos.toString()); + position = await windowManager.getPosition(); + if (position.dx < 0 || position.dy < 0) { + debugPrint("Main window is hidden, ignoring position restoration"); + return; + } + sz = await windowManager.getSize(); + isMaximized = await windowManager.isMaximized(); break; default: final wc = WindowController.fromWindowId(windowId!); @@ -1382,22 +1386,22 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { debugPrint("Failed to get frame of window $windowId, it may be hidden"); return; } - final position = frame.topLeft; + position = frame.topLeft; if (position.dx < 0 || position.dy < 0) { debugPrint("Window $windowId is hidden, ignoring position restoration"); return; } - - final sz = frame.size; - final isMaximized = await wc.isMaximized(); - final pos = LastWindowPosition( - sz.width, sz.height, position.dx, position.dy, isMaximized); - debugPrint( - "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}"); - await bind.setLocalFlutterConfig( - k: kWindowPrefix + type.name, v: pos.toString()); + sz = frame.size; + isMaximized = await wc.isMaximized(); break; } + + final pos = LastWindowPosition( + sz.width, sz.height, position.dx, position.dy, isMaximized); + debugPrint( + "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}"); + await bind.setLocalFlutterConfig( + k: kWindowPrefix + type.name, v: pos.toString()); } Future _adjustRestoreMainWindowSize(double? width, double? height) async { @@ -1869,7 +1873,14 @@ Future onActiveWindowChanged() async { if (rustDeskWinManager.getActiveWindows().isEmpty) { // close all sub windows try { - await rustDeskWinManager.closeAllSubWindows(); + if (Platform.isLinux) { + await Future.wait([ + saveWindowPosition(WindowType.Main), + rustDeskWinManager.closeAllSubWindows() + ]); + } else { + await rustDeskWinManager.closeAllSubWindows(); + } } catch (err) { debugPrintStack(label: "$err"); } finally { From 6c0ca4cec8f207f2eee4b8396724724b7f83de60 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 26 Jul 2023 10:13:37 +0800 Subject: [PATCH 195/612] update pubspec.lock Signed-off-by: dignow --- flutter/pubspec.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index ead34415f..f09f565c9 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -327,7 +327,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: aee670819f5fe7e8b0f05e0239dafb5c62f7a84b + resolved-ref: 6c4181330f4ed80c1cb5670bd61aa75115f9f748 url: "https://github.com/rustdesk-org/rustdesk_desktop_multi_window" source: git version: "0.1.0" From c7110848071133b0b8cd607dee216c29baab033f Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 26 Jul 2023 10:42:25 +0800 Subject: [PATCH 196/612] ci --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 6a014053b..99ec6b4ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5146,7 +5146,7 @@ dependencies = [ [[package]] name = "rustdesk" -version = "1.2.1" +version = "1.2.2" dependencies = [ "android_logger", "arboard", From 8b8f50ed0f12696d8e4df3b7c89c6a47489dd14c Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 26 Jul 2023 19:53:57 +0800 Subject: [PATCH 197/612] fix syninfo, add ab two menutiems: sync ab with recent sessions and sort tags --- flutter/lib/common/widgets/address_book.dart | 102 +++++++++++++------ flutter/lib/models/ab_model.dart | 11 ++ flutter/pubspec.lock | 2 +- res/bump.sh | 1 + src/common.rs | 20 +++- 5 files changed, 99 insertions(+), 37 deletions(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index 58acc9ace..96425c451 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -3,7 +3,8 @@ import 'package:flutter_hbb/common/formatter/id_formatter.dart'; import 'package:flutter_hbb/common/widgets/peer_card.dart'; import 'package:flutter_hbb/common/widgets/peers_view.dart'; import 'package:flutter_hbb/desktop/widgets/popup_menu.dart'; -import '../../consts.dart'; +import 'package:flutter_hbb/models/ab_model.dart'; +import 'package:flutter_hbb/models/platform_model.dart'; import '../../desktop/widgets/material_mod_popup_menu.dart' as mod_menu; import 'package:get/get.dart'; @@ -70,30 +71,30 @@ class _AddressBookState extends State { return Row( children: [ Offstage( - offstage: hideAbTagsPanel.value, - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - border: - Border.all(color: Theme.of(context).colorScheme.background)), - child: Container( - width: 150, - height: double.infinity, - padding: const EdgeInsets.all(8.0), - child: Column( - children: [ - _buildTagHeader().marginOnly(left: 8.0, right: 0), - Expanded( - child: Container( - width: double.infinity, - height: double.infinity, - child: _buildTags(), - ), - ) - ], - ), - ), - ).marginOnly(right: 12.0)), + offstage: hideAbTagsPanel.value, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + border: Border.all( + color: Theme.of(context).colorScheme.background)), + child: Container( + width: 150, + height: double.infinity, + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + _buildTagHeader().marginOnly(left: 8.0, right: 0), + Expanded( + child: Container( + width: double.infinity, + height: double.infinity, + child: _buildTags(), + ), + ) + ], + ), + ), + ).marginOnly(right: 12.0)), _buildPeersViews() ], ); @@ -144,9 +145,16 @@ class _AddressBookState extends State { } Widget _buildTags() { - return Obx( - () => Wrap( - children: gFFI.abModel.tags + return Obx(() { + final List tags; + if (gFFI.abModel.sortTags.value) { + tags = gFFI.abModel.tags.toList(); + tags.sort(); + } else { + tags = gFFI.abModel.tags; + } + return Wrap( + children: tags .map((e) => AddressBookTag( name: e, tags: gFFI.abModel.selectedTags, @@ -158,8 +166,8 @@ class _AddressBookState extends State { } })) .toList(), - ), - ); + ); + }); } Widget _buildPeersViews() { @@ -174,11 +182,44 @@ class _AddressBookState extends State { ); } + @protected + MenuEntryBase syncMenuItem() { + return MenuEntrySwitch( + switchType: SwitchType.scheckbox, + text: translate('Sync with recent sessions'), + getter: () async { + return shouldSyncAb(); + }, + setter: (bool v) async { + bind.mainSetLocalOption(key: syncAbOption, value: v ? 'Y' : ''); + }, + dismissOnClicked: true, + ); + } + + @protected + MenuEntryBase sortMenuItem() { + return MenuEntrySwitch( + switchType: SwitchType.scheckbox, + text: translate('Sort tags'), + getter: () async { + return shouldSortTags(); + }, + setter: (bool v) async { + bind.mainSetLocalOption(key: sortAbTagsOption, value: v ? 'Y' : ''); + gFFI.abModel.sortTags.value = v; + }, + dismissOnClicked: true, + ); + } + void _showMenu(RelativeRect pos) { final items = [ getEntry(translate("Add ID"), abAddId), getEntry(translate("Add Tag"), abAddTag), getEntry(translate("Unselect all tags"), gFFI.abModel.unsetSelectedTags), + sortMenuItem(), + syncMenuItem(), ]; mod_menu.showMenu( @@ -458,7 +499,6 @@ MenuEntryButton getEntry(String title, VoidCallback proc) { style: style, ), proc: proc, - padding: kDesktopMenuPadding, dismissOnClicked: true, ); } diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 31078dd8a..72f1438bc 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -10,11 +10,22 @@ import 'package:http/http.dart' as http; import '../common.dart'; +final syncAbOption = 'sync-ab-with-recent-sessions'; +bool shouldSyncAb() { + return bind.mainGetLocalOption(key: syncAbOption).isNotEmpty; +} + +final sortAbTagsOption = 'sync-ab-tags'; +bool shouldSortTags() { + return bind.mainGetLocalOption(key: sortAbTagsOption).isNotEmpty; +} + class AbModel { final abLoading = false.obs; final abError = "".obs; final tags = [].obs; final peers = List.empty(growable: true).obs; + final sortTags = shouldSortTags().obs; final selectedTags = List.empty(growable: true).obs; var initialized = false; diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index f09f565c9..c876f1d6f 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -327,7 +327,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: 6c4181330f4ed80c1cb5670bd61aa75115f9f748 + resolved-ref: "6c4181330f4ed80c1cb5670bd61aa75115f9f748" url: "https://github.com/rustdesk-org/rustdesk_desktop_multi_window" source: git version: "0.1.0" diff --git a/res/bump.sh b/res/bump.sh index 36421a775..d1142d58c 100644 --- a/res/bump.sh +++ b/res/bump.sh @@ -1,2 +1,3 @@ #! /usr/bin/env bash sed -i "s/$1/$2/g" res/*spec res/PKGBUILD flutter/pubspec.yaml Cargo.toml .github/workflows/*yml flatpak/*json appimage/*yml +cargo run # to bump version in cargo lock diff --git a/src/common.rs b/src/common.rs index ee2ec1516..efda69dbd 100644 --- a/src/common.rs +++ b/src/common.rs @@ -754,18 +754,28 @@ pub fn get_sysinfo() -> serde_json::Value { use hbb_common::sysinfo::{CpuExt, System, SystemExt}; let system = System::new_all(); let memory = system.total_memory(); - let memory = (memory as f64 / 1024. / 1024. / 1024. * 100 as f64).round() / 100.; + let memory = (memory as f64 / 1024. / 1024. / 1024. * 100.).round() / 100.; let cpus = system.cpus(); let cpu_name = cpus.first().map(|x| x.brand()).unwrap_or_default(); let cpu_name = cpu_name.trim_end(); let cpu_freq = cpus.first().map(|x| x.frequency()).unwrap_or_default(); + let cpu_freq = (cpu_freq as f64 / 1024. * 100.).round() / 100.; + let cpu = if cpu_freq > 0. { + format!("{}, {}GHz, ", cpu_name, cpu_freq) + } else { + "".to_owned() // android + }; let num_cpus = num_cpus::get(); let num_pcpus = num_cpus::get_physical(); - let os = system.distribution_id(); - let os = format!("{} / {}", os, system.long_os_version().unwrap_or_default()); - let hostname = system.host_name(); + let mut os = system.distribution_id(); + os = format!("{} / {}", os, system.long_os_version().unwrap_or_default()); + #[cfg(windows)] + { + os = format!("{os} - {}", system.os_version().unwrap_or_default()); + } + let hostname = hostname(); // sys.hostname() return localhost on android in my test serde_json::json!({ - "cpu": format!("{cpu_name}, {cpu_freq}MHz, {num_cpus}/{num_pcpus} cores"), + "cpu": format!("{cpu}{num_cpus}/{num_pcpus} cores"), "memory": format!("{memory}GB"), "os": os, "hostname": hostname, From 4fe85cdd4a8f89901fe09890bd0b59e36949cf8b Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 26 Jul 2023 19:57:42 +0800 Subject: [PATCH 198/612] fix tags hidden in mobile --- flutter/lib/common/widgets/address_book.dart | 38 ++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index 96425c451..a827df572 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -103,25 +103,27 @@ class _AddressBookState extends State { Widget _buildAddressBookMobile() { return Column( children: [ - Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(6), - border: - Border.all(color: Theme.of(context).colorScheme.background)), - child: Container( - padding: const EdgeInsets.all(8.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildTagHeader().marginOnly(left: 8.0, right: 0), - Container( - width: double.infinity, - child: _buildTags(), + Offstage( + offstage: hideAbTagsPanel.value, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6), + border: Border.all( + color: Theme.of(context).colorScheme.background)), + child: Container( + padding: const EdgeInsets.all(8.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + _buildTagHeader().marginOnly(left: 8.0, right: 0), + Container( + width: double.infinity, + child: _buildTags(), + ), + ], ), - ], - ), - ), - ).marginOnly(bottom: 12.0), + ), + ).marginOnly(bottom: 12.0)), _buildPeersViews() ], ); From 791645fa59db2b5941678ac7f833934b773de35b Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 26 Jul 2023 20:43:18 +0800 Subject: [PATCH 199/612] add ab full check --- flutter/lib/common/widgets/address_book.dart | 3 +++ flutter/lib/common/widgets/peer_card.dart | 3 +++ flutter/lib/models/ab_model.dart | 14 ++++++++++++++ src/lang/ca.rs | 3 +++ src/lang/cn.rs | 3 +++ src/lang/cs.rs | 3 +++ src/lang/da.rs | 3 +++ src/lang/de.rs | 3 +++ src/lang/el.rs | 3 +++ src/lang/en.rs | 3 ++- src/lang/eo.rs | 3 +++ src/lang/es.rs | 3 +++ src/lang/fa.rs | 3 +++ src/lang/fr.rs | 3 +++ src/lang/hu.rs | 3 +++ src/lang/id.rs | 3 +++ src/lang/it.rs | 3 +++ src/lang/ja.rs | 3 +++ src/lang/ko.rs | 3 +++ src/lang/kz.rs | 3 +++ src/lang/lt.rs | 3 +++ src/lang/nl.rs | 3 +++ src/lang/pl.rs | 3 +++ src/lang/pt_PT.rs | 3 +++ src/lang/ptbr.rs | 3 +++ src/lang/ro.rs | 3 +++ src/lang/ru.rs | 3 +++ src/lang/sk.rs | 3 +++ src/lang/sl.rs | 3 +++ src/lang/sq.rs | 3 +++ src/lang/sr.rs | 3 +++ src/lang/sv.rs | 3 +++ src/lang/template.rs | 3 +++ src/lang/th.rs | 3 +++ src/lang/tr.rs | 3 +++ src/lang/tw.rs | 3 +++ src/lang/ua.rs | 3 +++ src/lang/vn.rs | 3 +++ 38 files changed, 124 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index a827df572..c62a88421 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -241,6 +241,9 @@ class _AddressBookState extends State { } void abAddId() async { + if (gFFI.abModel.isFull(true)) { + return; + } var isInProgress = false; IDTextEditingController idController = IDTextEditingController(text: ''); TextEditingController aliasController = TextEditingController(text: ''); diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 09d1cb521..a73454040 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -644,6 +644,9 @@ abstract class BasePeerCard extends StatelessWidget { ), proc: () { () async { + if (gFFI.abModel.isFull(true)) { + return; + } if (!gFFI.abModel.idContainBy(peer.id)) { gFFI.abModel.addPeer(peer); await gFFI.abModel.pushAb(); diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 72f1438bc..ee16fb798 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -29,6 +29,7 @@ class AbModel { final selectedTags = List.empty(growable: true).obs; var initialized = false; + var licensedDevices = 0; WeakReference parent; @@ -52,6 +53,10 @@ class AbModel { if (json.containsKey('error')) { abError.value = json['error']; } else if (json.containsKey('data')) { + try { + gFFI.abModel.licensedDevices = json['licensed_devices']; + // ignore: empty_catches + } catch (e) {} final data = jsonDecode(json['data']); if (data != null) { tags.clear(); @@ -94,6 +99,15 @@ class AbModel { peers.add(peer); } + bool isFull(bool warn) { + final res = licensedDevices > 0 && peers.length >= licensedDevices; + if (res && warn) { + BotToast.showText( + contentColor: Colors.red, text: translate("exceed_max_devices")); + } + return res; + } + void addPeer(Peer peer) { peers.removeWhere((e) => e.id == peer.id); peers.add(peer); diff --git a/src/lang/ca.rs b/src/lang/ca.rs index fdacb2f4e..51a731c35 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index d0c5e7bef..d15c21d4b 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 084adaaaf..29898eaf7 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 129c2251f..0a4adaf36 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 8d106a7df..c730852d5 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 5794a0803..eb91e9a83 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/en.rs b/src/lang/en.rs index ecaffa0d0..001d9133d 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -71,6 +71,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("resolution_custom_tip", "Custom resolution"), ("accept_and_elevate_btn_tooltip", "Accept the connection and elevate UAC permissions."), ("clipboard_wait_response_timeout_tip", "Timed out waiting for copy response."), - ("logout_tip", "Are you sure you want to log out?") + ("logout_tip", "Are you sure you want to log out?"), + ("exceed_max_devices", "You have reached the maximum number of managed devices."), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 5f3c4e7db..a576538ef 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index e53bd4ff9..f953bd9ce 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 6ad33256c..112edf32a 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 09e048d3a..57c548e08 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index a963c1836..638ed3adf 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index dfa6d380d..ac9df01b3 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index c3209ddcd..6822be403 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", "Servizio"), ("Start", "Avvia"), ("Stop", "Ferma"), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index c326e44f3..67234039d 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 3b56a69be..c0b71c205 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 9f1287dc1..829c59c73 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index b95ac6000..69936b2b4 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 6c88ffb76..92bd7fd1f 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 89271b5ec..af6d11659 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 6f1b3a5ac..52675daf7 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index f59a5ea20..195b79804 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 6f326442c..378d7c035 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 9b4b65b36..3af5ba4b6 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", "Сервис"), ("Start", "Запустить"), ("Stop", "Остановить"), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index c7a2c7421..f24f55bef 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index d08afcf08..ff5c254e0 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 4c893437e..797328139 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 6c16abbe7..3bb40f4ce 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 1df13f952..ac898e38f 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index d1f2f23bb..5c710624f 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index f3c629b2a..2b2d0f4b2 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 4e2c6defc..d7bd99f25 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index df1dbcd2c..bef733f00 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index f8f0a8fed..3b115a5f3 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 458fbba1c..59490da1d 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -521,5 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", ""), ("Start", ""), ("Stop", ""), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), ].iter().cloned().collect(); } From 731aa5e9f3faded01e4634a3a2eb02a9ff002792 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 26 Jul 2023 21:29:35 +0800 Subject: [PATCH 200/612] support negative window position Signed-off-by: dignow --- flutter/lib/common.dart | 119 ++++++++++++++++++++++------------------ flutter/lib/consts.dart | 7 +-- 2 files changed, 69 insertions(+), 57 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 9f6fc4886..4a3813ba6 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1350,7 +1350,9 @@ class LastWindowPosition { return LastWindowPosition(m["width"], m["height"], m["offsetWidth"], m["offsetHeight"], m["isMaximized"]); } catch (e) { - debugPrintStack(label: 'Failed to load LastWindowPosition "$content" ${e.toString()}'); + debugPrintStack( + label: + 'Failed to load LastWindowPosition "$content" ${e.toString()}'); return null; } } @@ -1370,10 +1372,6 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { switch (type) { case WindowType.Main: position = await windowManager.getPosition(); - if (position.dx < 0 || position.dy < 0) { - debugPrint("Main window is hidden, ignoring position restoration"); - return; - } sz = await windowManager.getSize(); isMaximized = await windowManager.isMaximized(); break; @@ -1387,10 +1385,6 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { return; } position = frame.topLeft; - if (position.dx < 0 || position.dy < 0) { - debugPrint("Window $windowId is hidden, ignoring position restoration"); - return; - } sz = frame.size; isMaximized = await wc.isMaximized(); break; @@ -1408,12 +1402,12 @@ Future _adjustRestoreMainWindowSize(double? width, double? height) async { const double minWidth = 600; const double minHeight = 100; double maxWidth = (((isDesktop || isWebDesktop) - ? kDesktopMaxDisplayWidth - : kMobileMaxDisplayWidth)) + ? kDesktopMaxDisplaySize + : kMobileMaxDisplaySize)) .toDouble(); double maxHeight = ((isDesktop || isWebDesktop) - ? kDesktopMaxDisplayHeight - : kMobileMaxDisplayHeight) + ? kDesktopMaxDisplaySize + : kMobileMaxDisplaySize) .toDouble(); if (isDesktop || isWebDesktop) { @@ -1434,59 +1428,72 @@ Future _adjustRestoreMainWindowSize(double? width, double? height) async { double restoreHeight = height ?? defaultHeight; if (restoreWidth < minWidth) { - restoreWidth = minWidth; + restoreWidth = defaultWidth; } if (restoreHeight < minHeight) { - restoreHeight = minHeight; + restoreHeight = defaultHeight; } if (restoreWidth > maxWidth) { - restoreWidth = maxWidth; + restoreWidth = defaultWidth; } if (restoreHeight > maxHeight) { - restoreHeight = maxHeight; + restoreHeight = defaultHeight; } return Size(restoreWidth, restoreHeight); } /// return null means center Future _adjustRestoreMainWindowOffset( - double? left, double? top) async { - if (left == null || top == null) { - await windowManager.center(); - } else { - double windowLeft = max(0.0, left); - double windowTop = max(0.0, top); + double? left, + double? top, + double? width, + double? height, +) async { + if (left == null || top == null || width == null || height == null) { + return null; + } - double frameLeft = double.infinity; - double frameTop = double.infinity; - double frameRight = ((isDesktop || isWebDesktop) - ? kDesktopMaxDisplayWidth - : kMobileMaxDisplayWidth) - .toDouble(); - double frameBottom = ((isDesktop || isWebDesktop) - ? kDesktopMaxDisplayHeight - : kMobileMaxDisplayHeight) - .toDouble(); + double? frameLeft; + double? frameTop; + double? frameRight; + double? frameBottom; - if (isDesktop || isWebDesktop) { - for (final screen in await window_size.getScreenList()) { - frameLeft = min(screen.visibleFrame.left, frameLeft); - frameTop = min(screen.visibleFrame.top, frameTop); - frameRight = max(screen.visibleFrame.right, frameRight); - frameBottom = max(screen.visibleFrame.bottom, frameBottom); - } - } - - if (windowLeft < frameLeft || - windowLeft > frameRight || - windowTop < frameTop || - windowTop > frameBottom) { - return null; - } else { - return Offset(windowLeft, windowTop); + if (isDesktop || isWebDesktop) { + for (final screen in await window_size.getScreenList()) { + frameLeft = frameLeft == null + ? screen.visibleFrame.left + : min(screen.visibleFrame.left, frameLeft); + frameTop = frameTop == null + ? screen.visibleFrame.top + : min(screen.visibleFrame.top, frameTop); + frameRight = frameRight == null + ? screen.visibleFrame.right + : max(screen.visibleFrame.right, frameRight); + frameBottom = frameBottom == null + ? screen.visibleFrame.bottom + : max(screen.visibleFrame.bottom, frameBottom); } } - return null; + if (frameLeft == null) { + frameLeft = 0.0; + frameTop = 0.0; + frameRight = ((isDesktop || isWebDesktop) + ? kDesktopMaxDisplaySize + : kMobileMaxDisplaySize) + .toDouble(); + frameBottom = ((isDesktop || isWebDesktop) + ? kDesktopMaxDisplaySize + : kMobileMaxDisplaySize) + .toDouble(); + } + if (left > frameRight! || + top > frameBottom! || + (left + width) < frameLeft || + (top + height) < frameTop!) { + return null; + } else { + return Offset(left, top); + } } /// Restore window position and size on start @@ -1516,7 +1523,11 @@ Future restoreWindowPosition(WindowType type, {int? windowId}) async { final size = await _adjustRestoreMainWindowSize(lpos.width, lpos.height); final offset = await _adjustRestoreMainWindowOffset( - lpos.offsetWidth, lpos.offsetHeight); + lpos.offsetWidth, + lpos.offsetHeight, + size.width, + size.height, + ); await windowManager.setSize(size); if (offset == null) { await windowManager.center(); @@ -1533,7 +1544,11 @@ Future restoreWindowPosition(WindowType type, {int? windowId}) async { final size = await _adjustRestoreMainWindowSize(lpos.width, lpos.height); final offset = await _adjustRestoreMainWindowOffset( - lpos.offsetWidth, lpos.offsetHeight); + lpos.offsetWidth, + lpos.offsetHeight, + size.width, + size.height, + ); debugPrint( "restore lpos: ${size.width}/${size.height}, offset:${offset?.dx}/${offset?.dy}"); if (offset == null) { diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 3e664c484..9dff28c22 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -50,11 +50,8 @@ const int kMobileDefaultDisplayHeight = 1280; const int kDesktopDefaultDisplayWidth = 1080; const int kDesktopDefaultDisplayHeight = 720; -const int kMobileMaxDisplayWidth = 720; -const int kMobileMaxDisplayHeight = 1280; - -const int kDesktopMaxDisplayWidth = 1920; -const int kDesktopMaxDisplayHeight = 1080; +const int kMobileMaxDisplaySize = 1280; +const int kDesktopMaxDisplaySize = 3840; const double kDesktopFileTransferNameColWidth = 200; const double kDesktopFileTransferModifiedColWidth = 120; From 0f402790603bff4c99b0d358f2dabd98302c9be4 Mon Sep 17 00:00:00 2001 From: solokot Date: Thu, 27 Jul 2023 00:02:55 +0200 Subject: [PATCH 201/612] Update ru.rs --- src/lang/ru.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 3af5ba4b6..6b48ef20b 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -225,7 +225,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Logout", "Выйти"), ("Tags", "Метки"), ("Search ID", "Поиск по ID"), - ("whitelist_sep", "Раздельно запятой, точкой с запятой, пробелом или новой строкой"), + ("whitelist_sep", "Разделение запятой, точкой с запятой, пробелом или новой строкой"), ("Add ID", "Добавить ID"), ("Add Tag", "Добавить ключевое слово"), ("Unselect all tags", "Отменить выбор всех меток"), @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Имя пользователя отсутствует"), ("Password missed", "Забыли пароль"), ("Wrong credentials", "Неправильные учётные данные"), - ("The verification code is incorrect or has expired", ""), + ("The verification code is incorrect or has expired", "Проверочный код неправильный или устарел"), ("Edit Tag", "Изменить метку"), ("Unremember Password", "Не сохранять пароль"), ("Favorites", "Избранное"), @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Разрешение"), ("No transfers in progress", "Передача не осуществляется"), ("Set one-time password length", "Установить длину одноразового пароля"), - ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("install_cert_tip", "Установить сертификат RustDesk"), + ("comfirm_install_cert_tip", "Это тестовый сертификат RustDesk, которому можно доверять. Он будет использоваться только по необходимости для установки драйверов RustDesk."), ("RDP Settings", "Настройки RDP"), ("Sort by", "Сортировка"), ("New Connection", "Новое подключение"), @@ -521,8 +521,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", "Сервис"), ("Start", "Запустить"), ("Stop", "Остановить"), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), + ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), + ("Sync with recent sessions", "Синхронизация последних сессий"), + ("Sort tags", "Сортировка меток"), ].iter().cloned().collect(); } From 5228b3490d0f14dca3d176ee005b75f538ea73d7 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 27 Jul 2023 08:03:18 +0800 Subject: [PATCH 202/612] window, save and restore pos, maxmium Signed-off-by: dignow --- flutter/lib/desktop/widgets/tabbar_widget.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index c3ef95c75..bc7864e45 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -516,6 +516,7 @@ class WindowActionPanelState extends State void _setMaximize(bool maximize) { stateGlobal.setMaximize(maximize); + _saveFrameDebounce.call(_saveFrame); setState(() {}); } From 343bcbb36363d393bd4a45e0de7d94af7ae96095 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 27 Jul 2023 09:11:43 +0800 Subject: [PATCH 203/612] adjust window offset on start Signed-off-by: dignow --- flutter/lib/common.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 4a3813ba6..af1f200b2 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1486,10 +1486,11 @@ Future _adjustRestoreMainWindowOffset( : kMobileMaxDisplaySize) .toDouble(); } - if (left > frameRight! || - top > frameBottom! || - (left + width) < frameLeft || - (top + height) < frameTop!) { + final minWidth = 10.0; + if ((left - minWidth) > frameRight! || + (top - minWidth) > frameBottom! || + (left + width + minWidth) < frameLeft || + top < frameTop!) { return null; } else { return Offset(left, top); From 88ce98e71685c6dfa6e6479b80c6cdf457cef764 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 27 Jul 2023 09:13:39 +0800 Subject: [PATCH 204/612] debug Signed-off-by: dignow --- flutter/lib/common.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index af1f200b2..4e5c21ced 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1487,9 +1487,9 @@ Future _adjustRestoreMainWindowOffset( .toDouble(); } final minWidth = 10.0; - if ((left - minWidth) > frameRight! || - (top - minWidth) > frameBottom! || - (left + width + minWidth) < frameLeft || + if ((left + minWidth) > frameRight! || + (top + minWidth) > frameBottom! || + (left + width - minWidth) < frameLeft || top < frameTop!) { return null; } else { From 6467b144862f2fe202a24c7a133c32609816a99a Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 27 Jul 2023 09:17:07 +0800 Subject: [PATCH 205/612] window, pos save and restore, add min window space to the top Signed-off-by: dignow --- flutter/lib/common.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 4e5c21ced..b069fcee1 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1490,7 +1490,7 @@ Future _adjustRestoreMainWindowOffset( if ((left + minWidth) > frameRight! || (top + minWidth) > frameBottom! || (left + width - minWidth) < frameLeft || - top < frameTop!) { + (top - minWidth) < frameTop!) { return null; } else { return Offset(left, top); From 9967bb993f52cd7f58715299cb1487410c7e6830 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Thu, 27 Jul 2023 10:46:48 +0800 Subject: [PATCH 206/612] more flexible for --get-id --- src/core_main.rs | 2 +- src/main.rs | 2 +- src/platform/windows.rs | 18 ++++++++++++++++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index cd972b25d..a55d2ec8d 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -102,7 +102,7 @@ pub fn core_main() -> Option> { } if args.len() > 0 && args[0] == "--version" { // not use my_println here, because check super use using this command, no dialog expected - println!("{}", crate::VERSION); + my_println!("{}", crate::VERSION); return None; } #[cfg(windows)] diff --git a/src/main.rs b/src/main.rs index e5c218ec4..2ab940d35 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ #![cfg_attr( - all(not(debug_assertions), target_os = "windows"), + all(target_os = "windows"), windows_subsystem = "windows" )] diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 22ff64687..b790fa1a1 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -2301,16 +2301,30 @@ mod tests { pub fn message_box(text: &str) { let mut text = text.to_owned(); - if !text.ends_with("!") { + let nodialog = std::env::var("NO_DIALOG").unwrap_or_default() == "Y"; + if !text.ends_with("!") || nodialog { use arboard::Clipboard as ClipboardContext; match ClipboardContext::new() { Ok(mut ctx) => { ctx.set_text(&text).ok(); - text = format!("{}\n\nAbove text has been copied to clipboard", &text); + if !nodialog { + text = format!("{}\n\nAbove text has been copied to clipboard", &text); + } } _ => {} } } + if nodialog { + if std::env::var("PRINT_OUT").unwrap_or_default() == "Y" { + println!("{text}"); + } + if let Ok(x) = std::env::var("WRITE_TO_FILE") { + if !x.is_empty() { + allow_err!(std::fs::write(x, text)); + } + } + return; + } let text = text .encode_utf16() .chain(std::iter::once(0)) From 0e1e8d2b1694bc4fcd5bdaa560ce1833de96f2df Mon Sep 17 00:00:00 2001 From: rustdesk Date: Thu, 27 Jul 2023 10:51:27 +0800 Subject: [PATCH 207/612] revert my stupid --- src/core_main.rs | 2 +- src/main.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index a55d2ec8d..cd972b25d 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -102,7 +102,7 @@ pub fn core_main() -> Option> { } if args.len() > 0 && args[0] == "--version" { // not use my_println here, because check super use using this command, no dialog expected - my_println!("{}", crate::VERSION); + println!("{}", crate::VERSION); return None; } #[cfg(windows)] diff --git a/src/main.rs b/src/main.rs index 2ab940d35..e5c218ec4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ #![cfg_attr( - all(target_os = "windows"), + all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows" )] From da1126a5a915dafbc7bc78b1c448a8a5361e1f47 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Thu, 27 Jul 2023 08:06:35 +0200 Subject: [PATCH 208/612] Update italian language --- src/lang/it.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 6822be403..c89e6cf72 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -223,18 +223,18 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Verification code", "Codice di verifica"), ("verification_tip", "È stato inviato un codice di verifica all'indirizzo email registrato, per accedere inserisci il codice di verifica."), ("Logout", "Esci"), - ("Tags", "Tag"), + ("Tags", "Etichette"), ("Search ID", "Cerca ID"), ("whitelist_sep", "Separati da virgola, punto e virgola, spazio o a capo"), ("Add ID", "Aggiungi ID"), - ("Add Tag", "Aggiungi tag"), - ("Unselect all tags", "Deseleziona tutti i tag"), + ("Add Tag", "Aggiungi etichetta"), + ("Unselect all tags", "Deseleziona tutte le etichette"), ("Network error", "Errore di rete"), ("Username missed", "Nome utente mancante"), ("Password missed", "Password mancante"), ("Wrong credentials", "Credenziali errate"), ("The verification code is incorrect or has expired", "Il codice di verifica non è corretto o è scaduto"), - ("Edit Tag", "Modifica tag"), + ("Edit Tag", "Modifica etichetta"), ("Unremember Password", "Dimentica password"), ("Favorites", "Preferiti"), ("Add to Favorites", "Aggiungi ai preferiti"), @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Nessun trasferimento in corso"), ("Set one-time password length", "Imposta lunghezza password monouso"), ("install_cert_tip", "Installa certificato RustDesk"), - ("comfirm_install_cert_tip", "Questo è un certificato di test RustDesk, che può essere considerato attendibile.\nIl certificato verrà usato per certifarsi ed installare i driver RustDesk quando richiesto."), + ("comfirm_install_cert_tip", "Questo è un certificato di test RustDesk, che può essere considerato attendibile.\nIl certificato verrà usato per certificarsi ed installare i driver RustDesk quando richiesto."), ("RDP Settings", "Impostazioni RDP"), ("Sort by", "Ordina per"), ("New Connection", "Nuova connessione"), @@ -514,15 +514,15 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("accept_and_elevate_btn_tooltip", "Accetta la connessione ed eleva le autorizzazioni UAC."), ("clipboard_wait_response_timeout_tip", "Timeout attesa risposta della copia."), ("Incoming connection", "Connessioni in entrata"), - ("Outgoing connection", "Conenssioni in uscita"), + ("Outgoing connection", "Connessioni in uscita"), ("Exit", "Esci da RustDesk"), ("Open", "Apri RustDesk"), ("logout_tip", "Sei sicuro di voler uscire?"), ("Service", "Servizio"), ("Start", "Avvia"), ("Stop", "Ferma"), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), + ("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."), + ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), + ("Sort tags", "Ordina etichette"), ].iter().cloned().collect(); } From 4d7a6dd66179fd6250c5b883ffe29b873bb113af Mon Sep 17 00:00:00 2001 From: rustdesk Date: Thu, 27 Jul 2023 16:49:19 +0800 Subject: [PATCH 209/612] install-service/uninstall-service --- src/core_main.rs | 7 +++++++ src/platform/macos.rs | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/src/core_main.rs b/src/core_main.rs index cd972b25d..47e7e7834 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -208,6 +208,13 @@ pub fn core_main() -> Option> { crate::tray::start_tray(); } return None; + } else if args[0] == "--install-service" { + log::info!("start --install-service"); + crate::platform::install_service(); + return None; + } else if args[0] == "--uninstall-service" { + log::info!("start --uninstall-service"); + crate::platform::uninstall_service(false); } else if args[0] == "--service" { log::info!("start --service"); crate::start_os_service(); diff --git a/src/platform/macos.rs b/src/platform/macos.rs index f00435907..02fc828a6 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -132,6 +132,10 @@ pub fn is_can_screen_recording(prompt: bool) -> bool { can_record_screen } +pub fn install_service() -> bool { + is_installed_daemon(false) +} + pub fn is_installed_daemon(prompt: bool) -> bool { let daemon = format!("{}_service.plist", crate::get_full_name()); let agent = format!("{}_server.plist", crate::get_full_name()); From 5d6b1223cc707976cd480b364195a881aa73c694 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Thu, 27 Jul 2023 17:02:01 +0800 Subject: [PATCH 210/612] fix #5163 --- src/server/connection.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/connection.rs b/src/server/connection.rs index cb993301e..ed51a6c29 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -329,6 +329,7 @@ impl Connection { closed: false, delay_response_instant: Instant::now(), }; + let addr = hbb_common::try_into_v4(addr); if !conn.on_open(addr).await { conn.closed = true; // sleep to ensure msg got received. From 029e6a015e413b2966dca058195063462dace3b5 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 27 Jul 2023 18:29:11 +0800 Subject: [PATCH 211/612] minisize vpx/aom q_min for bitrate 200% Signed-off-by: 21pages --- libs/scrap/src/common/aom.rs | 2 +- libs/scrap/src/common/vpxcodec.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/scrap/src/common/aom.rs b/libs/scrap/src/common/aom.rs index 10886075d..f677858a7 100644 --- a/libs/scrap/src/common/aom.rs +++ b/libs/scrap/src/common/aom.rs @@ -344,7 +344,7 @@ impl AomEncoder { fn calc_q_values(b: u32) -> (u32, u32) { let b = std::cmp::min(b, 200); let q_min1: i32 = 24; - let q_min2 = 12; + let q_min2 = 5; let q_max1 = 45; let q_max2 = 25; diff --git a/libs/scrap/src/common/vpxcodec.rs b/libs/scrap/src/common/vpxcodec.rs index 8fc33c4b2..d17aad676 100644 --- a/libs/scrap/src/common/vpxcodec.rs +++ b/libs/scrap/src/common/vpxcodec.rs @@ -303,7 +303,7 @@ impl VpxEncoder { fn calc_q_values(b: u32) -> (u32, u32) { let b = std::cmp::min(b, 200); let q_min1: i32 = 36; - let q_min2 = 12; + let q_min2 = 0; let q_max1 = 56; let q_max2 = 37; From 4b58f0b4ddb02e20a7aaa43cb8e382bb314807e8 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Tue, 11 Jul 2023 22:33:53 +0200 Subject: [PATCH 212/612] Allow to explicitly increase the bitrate massively This has the benefit - over direct connections - to be able to send a lot more data. In particular fast moving frames may avoid fps drops with a higher target bitrate. --- libs/hbb_common/src/config.rs | 4 ++-- src/server/video_qos.rs | 6 +++--- src/ui/header.tis | 11 +++++++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 8f2e180a0..7bdd322d3 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -1078,7 +1078,7 @@ impl PeerConfig { D: de::Deserializer<'de>, { let v: Vec = de::Deserialize::deserialize(deserializer)?; - if v.len() == 1 && v[0] >= 10 && v[0] <= 100 { + if v.len() == 1 && v[0] >= 10 && v[0] <= 0xFFF { Ok(v) } else { Ok(Self::default_custom_image_quality()) @@ -1402,7 +1402,7 @@ impl UserDefaultConfig { "codec-preference" => { self.get_string(key, "auto", vec!["vp8", "vp9", "av1", "h264", "h265"]) } - "custom_image_quality" => self.get_double_string(key, 50.0, 10.0, 100.0), + "custom_image_quality" => self.get_double_string(key, 50.0, 10.0, 0xFFF as f64), "custom-fps" => self.get_double_string(key, 30.0, 5.0, 120.0), _ => self .options diff --git a/src/server/video_qos.rs b/src/server/video_qos.rs index dda15fd55..2ebcdaa84 100644 --- a/src/server/video_qos.rs +++ b/src/server/video_qos.rs @@ -299,9 +299,9 @@ impl VideoQoS { } else if q == ImageQuality::Best.value() { Quality::Best } else { - let mut b = (q >> 8 & 0xFF) * 2; - b = std::cmp::max(b, 10); - b = std::cmp::min(b, 200); + let mut b = (q >> 8 & 0xFFF) * 2; + b = std::cmp::max(b, 20); + b = std::cmp::min(b, 8000); Quality::Custom(b as u32) } }; diff --git a/src/ui/header.tis b/src/ui/header.tis index 2d79db8fa..022792f7e 100644 --- a/src/ui/header.tis +++ b/src/ui/header.tis @@ -424,10 +424,17 @@ class Header: Reactor.Component { function handle_custom_image_quality() { var tmp = handler.get_custom_image_quality(); var bitrate = (tmp[0] || 50); - msgbox("custom", "Custom Image Quality", "
\ -
x% Bitrate
\ + var extendedBitrate = bitrate > 100; + var maxRate = extendedBitrate ? 4000 : 100; + msgbox("custom-image-quality", "Custom Image Quality", "
\ +
x% Bitrate More
\
", "", function(res=null) { if (!res) return; + if (res.id === "extended-slider") { + var slider = res.parent.$(#bitrate-slider) + slider.slider.max = res.checked ? 4000 : 100; + return; + } if (!res.bitrate) return; handler.save_custom_image_quality(res.bitrate); toggleMenuState(); From 63bf4b5fa8ce166692fdf8781b7d8cbfbe9867a9 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Sat, 15 Jul 2023 14:56:40 +0200 Subject: [PATCH 213/612] Add flutter support for extended bitrate --- flutter/lib/common/widgets/dialog.dart | 31 +++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index 9f4eb1427..e42a2f01c 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -1220,7 +1220,8 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { qualityInitValue = quality != null && quality.isNotEmpty ? quality[0].toDouble() : 50.0; const qualityMinValue = 10.0; - const qualityMaxValue = 100.0; + const qualityMoreThresholdValue = 100.0; + const qualityMaxValue = 4000.0; if (qualityInitValue < qualityMinValue) { qualityInitValue = qualityMinValue; } @@ -1228,6 +1229,8 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { qualityInitValue = qualityMaxValue; } final RxDouble qualitySliderValue = RxDouble(qualityInitValue); + final moreQualityInitValue = qualityInitValue > qualityMoreThresholdValue; + final RxBool moreQualityChecked = RxBool(moreQualityInitValue); final debouncerQuality = Debouncer( Duration(milliseconds: 1000), onChanged: (double v) { @@ -1242,7 +1245,9 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { child: Slider( value: qualitySliderValue.value, min: qualityMinValue, - max: qualityMaxValue, + max: moreQualityChecked.value + ? qualityMaxValue + : qualityMoreThresholdValue, divisions: 18, onChanged: (double value) { qualitySliderValue.value = value; @@ -1256,11 +1261,31 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { style: const TextStyle(fontSize: 15), )), Expanded( - flex: 2, + flex: 1, child: Text( translate('Bitrate'), style: const TextStyle(fontSize: 15), )), + Expanded( + flex: 1, + child: Row( + children: [ + Checkbox( + value: moreQualityChecked.value, + onChanged: (bool? value) { + moreQualityChecked.value = value!; + if (!value && + qualitySliderValue.value > qualityMoreThresholdValue) { + qualitySliderValue.value = qualityMoreThresholdValue; + debouncerQuality.value = qualityMoreThresholdValue; + } + }, + ).marginOnly(right: 5), + Expanded( + child: Text(translate('More')), + ) + ], + )), ], )); // fps From 4d2036512a76c2021b37a3e35901589299ace2eb Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 27 Jul 2023 20:45:29 +0800 Subject: [PATCH 214/612] add minimize button on fullscreen toolbar Signed-off-by: dignow --- flutter/lib/common.dart | 7 +++ .../lib/desktop/widgets/remote_toolbar.dart | 43 ++++++++++++++++++- flutter/lib/models/state_model.dart | 2 +- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index b069fcee1..9f6bc01f2 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1389,6 +1389,13 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { isMaximized = await wc.isMaximized(); break; } + if (Platform.isWindows) { + const kMinOffset = -10000; + if (position.dx < kMinOffset || position.dy < kMinOffset) { + debugPrint("Invalid position: $position, ignore saving position"); + return; + } + } final pos = LastWindowPosition( sz.width, sz.height, position.dx, position.dy, isMaximized); diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 8c2f6a0b0..ec96d271e 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -360,6 +360,9 @@ class _RemoteToolbarState extends State { triggerAutoHide() => _debouncerHide.value = _debouncerHide.value + 1; + void _minimize() async => + await WindowController.fromWindowId(windowId).minimize(); + @override initState() { super.initState(); @@ -467,6 +470,12 @@ class _RemoteToolbarState extends State { toolbarItems.add(_VoiceCallMenu(id: widget.id, ffi: widget.ffi)); } toolbarItems.add(_RecordMenu(ffi: widget.ffi)); + if (!isWebDesktop) { + toolbarItems.add(_MinimizeMenu( + state: widget.state, + onPressed: _minimize, + )); + } toolbarItems.add(_CloseMenu(id: widget.id, ffi: widget.ffi)); return Column( mainAxisSize: MainAxisSize.min, @@ -549,6 +558,30 @@ class _PinMenu extends StatelessWidget { } } +class _MinimizeMenu extends StatelessWidget { + final ToolbarState state; + final Function() onPressed; + bool get isFullscreen => stateGlobal.fullscreen; + const _MinimizeMenu({ + Key? key, + required this.state, + required this.onPressed, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Offstage( + offstage: !isFullscreen, + child: _IconMenuButton( + assetName: 'assets/minimize_black_24dp.svg', + tooltip: 'Minimize', + onPressed: onPressed, + color: _ToolbarTheme.blueColor, + hoverColor: _ToolbarTheme.hoverBlueColor, + )); + } +} + class _FullscreenMenu extends StatelessWidget { final ToolbarState state; final Function(bool) setFullscreen; @@ -1597,11 +1630,11 @@ class _IconMenuButtonState extends State<_IconMenuButton> { final icon = widget.icon ?? SvgPicture.asset( widget.assetName!, - color: Colors.white, + colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn), width: _ToolbarTheme.buttonSize, height: _ToolbarTheme.buttonSize, ); - final button = SizedBox( + var button = SizedBox( width: _ToolbarTheme.buttonSize, height: _ToolbarTheme.buttonSize, child: MenuItemButton( @@ -1625,6 +1658,12 @@ class _IconMenuButtonState extends State<_IconMenuButton> { ).marginSymmetric( horizontal: widget.hMargin ?? _ToolbarTheme.buttonHMargin, vertical: widget.vMargin ?? _ToolbarTheme.buttonVMargin); + if (widget.tooltip != null) { + button = Tooltip( + message: widget.tooltip!, + child: button, + ); + } if (widget.topLevel) { return MenuBar(children: [button]); } else { diff --git a/flutter/lib/models/state_model.dart b/flutter/lib/models/state_model.dart index f7b4f8cc2..94f9cc234 100644 --- a/flutter/lib/models/state_model.dart +++ b/flutter/lib/models/state_model.dart @@ -65,7 +65,7 @@ class StateGlobal { ? kMaximizeEdgeSize : kWindowEdgeSize; print( - "fullscreen: ${fullscreen}, resizeEdgeSize: ${_resizeEdgeSize.value}"); + "fullscreen: $fullscreen, resizeEdgeSize: ${_resizeEdgeSize.value}"); _windowBorderWidth.value = fullscreen ? 0 : kWindowBorderWidth; WindowController.fromWindowId(windowId) .setFullscreen(_fullscreen) From fa420c4825f4855b6a904fa5ca166152317886a9 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 27 Jul 2023 18:39:19 +0800 Subject: [PATCH 215/612] fix sciter more bitrate, change max bitrate to 2000% Signed-off-by: 21pages --- flutter/lib/common/widgets/dialog.dart | 40 ++++++++++++++------------ src/ui/header.tis | 9 ++++-- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index e42a2f01c..6f9248c1d 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -947,7 +947,9 @@ showSetOSPassword( Function()? closeCallback, ) async { final controller = TextEditingController(); - osPassword ??= await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ?? ''; + osPassword ??= + await bind.sessionGetOption(sessionId: sessionId, arg: 'os-password') ?? + ''; var autoLogin = await bind.sessionGetOption(sessionId: sessionId, arg: 'auto-login') != ''; @@ -957,6 +959,7 @@ showSetOSPassword( close(); if (closeCallback != null) closeCallback(); } + submit() { var text = controller.text.trim(); bind.sessionPeerOption( @@ -1221,7 +1224,7 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { quality != null && quality.isNotEmpty ? quality[0].toDouble() : 50.0; const qualityMinValue = 10.0; const qualityMoreThresholdValue = 100.0; - const qualityMaxValue = 4000.0; + const qualityMaxValue = 2000.0; if (qualityInitValue < qualityMinValue) { qualityInitValue = qualityMinValue; } @@ -1269,22 +1272,23 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { Expanded( flex: 1, child: Row( - children: [ - Checkbox( - value: moreQualityChecked.value, - onChanged: (bool? value) { - moreQualityChecked.value = value!; - if (!value && - qualitySliderValue.value > qualityMoreThresholdValue) { - qualitySliderValue.value = qualityMoreThresholdValue; - debouncerQuality.value = qualityMoreThresholdValue; - } - }, - ).marginOnly(right: 5), - Expanded( - child: Text(translate('More')), - ) - ], + children: [ + Checkbox( + value: moreQualityChecked.value, + onChanged: (bool? value) { + moreQualityChecked.value = value!; + if (!value && + qualitySliderValue.value > + qualityMoreThresholdValue) { + qualitySliderValue.value = qualityMoreThresholdValue; + debouncerQuality.value = qualityMoreThresholdValue; + } + }, + ).marginOnly(right: 5), + Expanded( + child: Text(translate('More')), + ) + ], )), ], )); diff --git a/src/ui/header.tis b/src/ui/header.tis index 022792f7e..666150fb3 100644 --- a/src/ui/header.tis +++ b/src/ui/header.tis @@ -425,14 +425,19 @@ function handle_custom_image_quality() { var tmp = handler.get_custom_image_quality(); var bitrate = (tmp[0] || 50); var extendedBitrate = bitrate > 100; - var maxRate = extendedBitrate ? 4000 : 100; + var maxRate = extendedBitrate ? 2000 : 100; msgbox("custom-image-quality", "Custom Image Quality", "
\
x% Bitrate More
\
", "", function(res=null) { if (!res) return; if (res.id === "extended-slider") { var slider = res.parent.$(#bitrate-slider) - slider.slider.max = res.checked ? 4000 : 100; + slider.slider.max = res.checked ? 2000 : 100; + if (slider.value > slider.slider.max) { + slider.value = slider.slider.max; + } + var buddy = res.parent.$(#bitrate-buddy); + buddy.value = slider.value; return; } if (!res.bitrate) return; From ffbc6e0c8ba36a2ea729c856765a80698ba52888 Mon Sep 17 00:00:00 2001 From: "Miguel F. G" <116861809+flusheDData@users.noreply.github.com> Date: Thu, 27 Jul 2023 16:18:15 +0200 Subject: [PATCH 216/612] Update es.rs New terms added --- src/lang/es.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lang/es.rs b/src/lang/es.rs index f953bd9ce..c39bcb7f5 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -518,11 +518,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Salir"), ("Open", "Abrir"), ("logout_tip", "¿Seguro que deseas cerrar sesión?"), - ("Service", ""), - ("Start", ""), - ("Stop", ""), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), + ("Service", "Servicio"), + ("Start", "Iniciar"), + ("Stop", "Detener"), + ("exceed_max_devices", "Has alcanzado el máximo número de dispositivos administrados."), + ("Sync with recent sessions", "Sincronizar con sesiones recientes"), + ("Sort tags", "Ordenar etiquetas"), ].iter().cloned().collect(); } From 9321a4f486b3e3160786738de051c7c9d0c7f8e0 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 27 Jul 2023 22:19:38 +0800 Subject: [PATCH 217/612] refact fullscreen and minimize button Signed-off-by: dignow --- flutter/lib/common.dart | 6 +- .../lib/desktop/pages/remote_tab_page.dart | 3 +- .../lib/desktop/widgets/remote_toolbar.dart | 136 ++++++++---------- 3 files changed, 62 insertions(+), 83 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 9f6bc01f2..bb4c60c37 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1391,7 +1391,11 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { } if (Platform.isWindows) { const kMinOffset = -10000; - if (position.dx < kMinOffset || position.dy < kMinOffset) { + const kMaxOffset = 10000; + if (position.dx < kMinOffset || + position.dy < kMinOffset || + position.dx > kMaxOffset || + position.dy > kMaxOffset) { debugPrint("Invalid position: $position, ignore saving position"); return; } diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 9ee04f8b1..1c4c27c48 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -4,7 +4,6 @@ import 'dart:ui' as ui; import 'package:desktop_multi_window/desktop_multi_window.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/common/shared_state.dart'; import 'package:flutter_hbb/consts.dart'; @@ -172,7 +171,7 @@ class _ConnectionTabPageState extends State { connectionType.secure.value == ConnectionType.strSecure; bool direct = connectionType.direct.value == ConnectionType.strDirect; - var msgConn; + String msgConn; if (secure && direct) { msgConn = translate("Direct and encrypted connection"); } else if (secure && !direct) { diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index ec96d271e..ab74dab59 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -1,5 +1,4 @@ import 'dart:convert'; -import 'dart:ui' as ui; import 'dart:async'; import 'dart:io'; @@ -432,6 +431,8 @@ class _RemoteToolbarState extends State { dragging: _dragging, fractionX: _fractionX, show: show, + setFullscreen: _setFullscreen, + setMinimize: _minimize, ), ), ), @@ -443,8 +444,6 @@ class _RemoteToolbarState extends State { final List toolbarItems = []; if (!isWebDesktop) { toolbarItems.add(_PinMenu(state: widget.state)); - toolbarItems.add( - _FullscreenMenu(state: widget.state, setFullscreen: _setFullscreen)); toolbarItems.add(_MobileActionMenu(ffi: widget.ffi)); } @@ -470,12 +469,6 @@ class _RemoteToolbarState extends State { toolbarItems.add(_VoiceCallMenu(id: widget.id, ffi: widget.ffi)); } toolbarItems.add(_RecordMenu(ffi: widget.ffi)); - if (!isWebDesktop) { - toolbarItems.add(_MinimizeMenu( - state: widget.state, - onPressed: _minimize, - )); - } toolbarItems.add(_CloseMenu(id: widget.id, ffi: widget.ffi)); return Column( mainAxisSize: MainAxisSize.min, @@ -558,51 +551,6 @@ class _PinMenu extends StatelessWidget { } } -class _MinimizeMenu extends StatelessWidget { - final ToolbarState state; - final Function() onPressed; - bool get isFullscreen => stateGlobal.fullscreen; - const _MinimizeMenu({ - Key? key, - required this.state, - required this.onPressed, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return Offstage( - offstage: !isFullscreen, - child: _IconMenuButton( - assetName: 'assets/minimize_black_24dp.svg', - tooltip: 'Minimize', - onPressed: onPressed, - color: _ToolbarTheme.blueColor, - hoverColor: _ToolbarTheme.hoverBlueColor, - )); - } -} - -class _FullscreenMenu extends StatelessWidget { - final ToolbarState state; - final Function(bool) setFullscreen; - bool get isFullscreen => stateGlobal.fullscreen; - const _FullscreenMenu( - {Key? key, required this.state, required this.setFullscreen}) - : super(key: key); - - @override - Widget build(BuildContext context) { - return _IconMenuButton( - assetName: - isFullscreen ? "assets/fullscreen_exit.svg" : "assets/fullscreen.svg", - tooltip: isFullscreen ? 'Exit Fullscreen' : 'Fullscreen', - onPressed: () => setFullscreen(!isFullscreen), - color: _ToolbarTheme.blueColor, - hoverColor: _ToolbarTheme.hoverBlueColor, - ); - } -} - class _MobileActionMenu extends StatelessWidget { final FFI ffi; const _MobileActionMenu({Key? key, required this.ffi}) : super(key: key); @@ -647,7 +595,7 @@ class _MonitorMenu extends StatelessWidget { children: [ SvgPicture.asset( "assets/screen.svg", - color: Colors.white, + colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn), ), Obx(() { RxInt display = CurrentDisplayState.find(id); @@ -683,7 +631,7 @@ class _MonitorMenu extends StatelessWidget { children: [ SvgPicture.asset( "assets/screen.svg", - color: Colors.white, + colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn), ), Text( (i + 1).toString(), @@ -754,7 +702,7 @@ class ScreenAdjustor { bool get isFullscreen => stateGlobal.fullscreen; int get windowId => stateGlobal.windowId; - adjustWindow() { + adjustWindow(BuildContext context) { return futureBuilder( future: isWindowCanBeAdjusted(), hasData: (data) { @@ -764,7 +712,7 @@ class ScreenAdjustor { children: [ MenuButton( child: Text(translate('Adjust Window')), - onPressed: doAdjustWindow, + onPressed: () => doAdjustWindow(context), ffi: ffi), Divider(), ], @@ -772,20 +720,19 @@ class ScreenAdjustor { }); } - doAdjustWindow() async { + doAdjustWindow(BuildContext context) async { await updateScreen(); if (_screen != null) { cbExitFullscreen(); double scale = _screen!.scaleFactor; final wndRect = await WindowController.fromWindowId(windowId).getFrame(); - final mediaSize = MediaQueryData.fromWindow(ui.window).size; + final mediaSize = MediaQueryData.fromView(View.of(context)).size; // On windows, wndRect is equal to GetWindowRect and mediaSize is equal to GetClientRect. // https://stackoverflow.com/a/7561083 double magicWidth = wndRect.right - wndRect.left - mediaSize.width * scale; double magicHeight = wndRect.bottom - wndRect.top - mediaSize.height * scale; - final canvasModel = ffi.canvasModel; final width = (canvasModel.getDisplayWidth() * canvasModel.scale + CanvasModel.leftToEdge + @@ -928,7 +875,7 @@ class _DisplayMenuState extends State<_DisplayMenu> { color: _ToolbarTheme.blueColor, hoverColor: _ToolbarTheme.hoverBlueColor, menuChildren: [ - _screenAdjustor.adjustWindow(), + _screenAdjustor.adjustWindow(context), viewStyle(), scrollStyle(), imageQuality(), @@ -1115,9 +1062,9 @@ class _ResolutionsMenuState extends State<_ResolutionsMenu> { return _SubmenuButton( ffi: widget.ffi, menuChildren: [ - _OriginalResolutionMenuButton(showOriginalBtn), - _FitLocalResolutionMenuButton(showFitLocalBtn), - _customResolutionMenuButton(isVirtualDisplay), + _OriginalResolutionMenuButton(context, showOriginalBtn), + _FitLocalResolutionMenuButton(context, showFitLocalBtn), + _customResolutionMenuButton(context, isVirtualDisplay), _menuDivider(showOriginalBtn, showFitLocalBtn, isVirtualDisplay), ] + _supportedResolutionMenuButtons(), @@ -1158,7 +1105,7 @@ class _ResolutionsMenuState extends State<_ResolutionsMenu> { } } - _onChanged(String? value) async { + _onChanged(BuildContext context, String? value) async { stateGlobal.setLastResolutionGroupValue( widget.id, pi.currentDisplay, value); if (value == null) return; @@ -1178,12 +1125,12 @@ class _ResolutionsMenuState extends State<_ResolutionsMenu> { if (w != null && h != null) { if (w != display.width || h != display.height) { - await _changeResolution(w, h); + await _changeResolution(context, w, h); } } } - _changeResolution(int w, int h) async { + _changeResolution(BuildContext context, int w, int h) async { await bind.sessionChangeResolution( sessionId: ffi.sessionId, display: pi.currentDisplay, @@ -1194,18 +1141,19 @@ class _ResolutionsMenuState extends State<_ResolutionsMenu> { final display = ffiModel.display; if (w == display.width && h == display.height) { if (await widget.screenAdjustor.isWindowCanBeAdjusted()) { - widget.screenAdjustor.doAdjustWindow(); + widget.screenAdjustor.doAdjustWindow(context); } } }); } - Widget _OriginalResolutionMenuButton(bool showOriginalBtn) { + Widget _OriginalResolutionMenuButton( + BuildContext context, bool showOriginalBtn) { return Offstage( offstage: !showOriginalBtn, child: MenuButton( - onPressed: () => - _changeResolution(display.originalWidth, display.originalHeight), + onPressed: () => _changeResolution( + context, display.originalWidth, display.originalHeight), ffi: widget.ffi, child: Text( '${translate('resolution_original_tip')} ${display.originalWidth}x${display.originalHeight}'), @@ -1213,14 +1161,15 @@ class _ResolutionsMenuState extends State<_ResolutionsMenu> { ); } - Widget _FitLocalResolutionMenuButton(bool showFitLocalBtn) { + Widget _FitLocalResolutionMenuButton( + BuildContext context, bool showFitLocalBtn) { return Offstage( offstage: !showFitLocalBtn, child: MenuButton( onPressed: () { final resolution = _getBestFitResolution(); if (resolution != null) { - _changeResolution(resolution.width, resolution.height); + _changeResolution(context, resolution.width, resolution.height); } }, ffi: widget.ffi, @@ -1230,13 +1179,13 @@ class _ResolutionsMenuState extends State<_ResolutionsMenu> { ); } - Widget _customResolutionMenuButton(isVirtualDisplay) { + Widget _customResolutionMenuButton(BuildContext context, isVirtualDisplay) { return Offstage( offstage: !isVirtualDisplay, child: RdoMenuButton( value: _kCustomResolutionValue, groupValue: _groupValue, - onChanged: _onChanged, + onChanged: (String? value) => _onChanged(context, value), ffi: widget.ffi, child: Row( children: [ @@ -1277,7 +1226,7 @@ class _ResolutionsMenuState extends State<_ResolutionsMenu> { .map((e) => RdoMenuButton( value: '${e.width}x${e.height}', groupValue: _groupValue, - onChanged: _onChanged, + onChanged: (String? value) => _onChanged(context, value), ffi: widget.ffi, child: Text('${e.width}x${e.height}'))) .toList(); @@ -1707,7 +1656,7 @@ class _IconSubmenuButtonState extends State<_IconSubmenuButton> { final icon = widget.icon ?? SvgPicture.asset( widget.svg!, - color: Colors.white, + colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn), width: _ToolbarTheme.buttonSize, height: _ToolbarTheme.buttonSize, ); @@ -1856,12 +1805,18 @@ class _DraggableShowHide extends StatefulWidget { final RxDouble fractionX; final RxBool dragging; final RxBool show; + + final Function(bool) setFullscreen; + final Function() setMinimize; + const _DraggableShowHide({ Key? key, required this.sessionId, required this.fractionX, required this.dragging, required this.show, + required this.setFullscreen, + required this.setMinimize, }) : super(key: key); @override @@ -1915,7 +1870,7 @@ class _DraggableShowHideState extends State<_DraggableShowHide> { widget.dragging.value = true; }), onDragEnd: (details) { - final mediaSize = MediaQueryData.fromWindow(ui.window).size; + final mediaSize = MediaQueryData.fromView(View.of(context)).size; widget.fractionX.value += (details.offset.dx - position.dx) / (mediaSize.width - size.width); if (widget.fractionX.value < left) { @@ -1940,10 +1895,31 @@ class _DraggableShowHideState extends State<_DraggableShowHide> { minimumSize: MaterialStateProperty.all(const Size(0, 0)), padding: MaterialStateProperty.all(EdgeInsets.zero), ); + final isFullscreen = stateGlobal.fullscreen; final child = Row( mainAxisSize: MainAxisSize.min, children: [ _buildDraggable(context), + TextButton( + onPressed: () { + widget.setFullscreen(!isFullscreen); + setState(() {}); + }, + child: Icon( + isFullscreen ? Icons.fullscreen_exit : Icons.fullscreen, + size: 20, + ), + ), + Offstage( + offstage: !isFullscreen, + child: TextButton( + onPressed: () => widget.setMinimize(), + child: Icon( + Icons.minimize, + size: 20, + ), + ), + ), TextButton( onPressed: () => setState(() { widget.show.value = !widget.show.value; @@ -2032,7 +2008,7 @@ class _MultiMonitorMenu extends StatelessWidget { children: [ SvgPicture.asset( "assets/screen.svg", - color: Colors.white, + colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn), ), Obx( () => Text( From 264b282f5ce91087ad94a3f4be8ced989a5e53aa Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Thu, 27 Jul 2023 22:55:34 +0200 Subject: [PATCH 218/612] Update de.rs --- src/lang/de.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index c730852d5..c42ac5719 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -223,18 +223,18 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Verification code", "Verifizierungscode"), ("verification_tip", "Ein Verifizierungscode wurde an die registrierte E-Mail-Adresse gesendet. Geben Sie den Verifizierungscode ein, um sich erneut anzumelden."), ("Logout", "Abmelden"), - ("Tags", "Schlagworte"), + ("Tags", "Tags"), ("Search ID", "ID suchen"), ("whitelist_sep", "Getrennt durch Komma, Semikolon, Leerzeichen oder Zeilenumbruch"), ("Add ID", "ID hinzufügen"), - ("Add Tag", "Stichwort hinzufügen"), - ("Unselect all tags", "Alle Stichworte abwählen"), + ("Add Tag", "Tag hinzufügen"), + ("Unselect all tags", "Alle Tags abwählen"), ("Network error", "Netzwerkfehler"), ("Username missed", "Benutzername fehlt"), ("Password missed", "Passwort fehlt"), ("Wrong credentials", "Falsche Anmeldedaten"), ("The verification code is incorrect or has expired", "Der Verifizierungscode ist falsch oder abgelaufen"), - ("Edit Tag", "Schlagwort bearbeiten"), + ("Edit Tag", "Tag bearbeiten"), ("Unremember Password", "Gespeichertes Passwort löschen"), ("Favorites", "Favoriten"), ("Add to Favorites", "Zu Favoriten hinzufügen"), @@ -518,11 +518,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Beenden"), ("Open", "Öffnen"), ("logout_tip", "Sind Sie sicher, dass Sie sich abmelden wollen?"), - ("Service", ""), - ("Start", ""), - ("Stop", ""), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), + ("Service", "Vermittlungsdienst"), + ("Start", "Start"), + ("Stop", "Stopp"), + ("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."), + ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), + ("Sort tags", "Tags sortieren"), ].iter().cloned().collect(); } From 27353f98ff3a65fc822cf62fc95117bbf3594df7 Mon Sep 17 00:00:00 2001 From: SelfRef Date: Fri, 28 Jul 2023 11:29:17 +0200 Subject: [PATCH 219/612] Fix icon name in .desktop entry to allow theming --- res/rustdesk.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/rustdesk.desktop b/res/rustdesk.desktop index e6ee6476a..cc72ff449 100644 --- a/res/rustdesk.desktop +++ b/res/rustdesk.desktop @@ -3,7 +3,7 @@ Name=RustDesk GenericName=Remote Desktop Comment=Remote Desktop Exec=rustdesk %u -Icon=/usr/share/rustdesk/files/rustdesk.png +Icon=rustdesk Terminal=false Type=Application StartupNotify=true From 1de50e8170cfd4c887ad32825667ee8629450ac7 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 28 Jul 2023 17:52:43 +0800 Subject: [PATCH 220/612] --option --- src/core_main.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/core_main.rs b/src/core_main.rs index 47e7e7834..73508f293 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -313,6 +313,19 @@ pub fn core_main() -> Option> { } } return None; + } else if args[0] == "--option" { + if crate::platform::is_installed() + && crate::platform::check_super_user_permission().unwrap_or_default() + { + if args.len() == 2 { + let options = crate::ipc::get_options(); + my_println!("{}", options.get(&args[1]).unwrap_or(&"".to_owned())); + } else if args.len() == 3 { + crate::ipc::set_option(&args[1], &args[2]); + } + } else { + my_println!("Installation and administrative privileges required!"); + } } else if args[0] == "--check-hwcodec-config" { #[cfg(feature = "hwcodec")] scrap::hwcodec::check_config(); From e5bdbffbcf61af187408dd68c6552101fdaef4e6 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 28 Jul 2023 17:53:02 +0800 Subject: [PATCH 221/612] ab compression --- flutter/lib/models/ab_model.dart | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index ee16fb798..8ae320a52 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/models/model.dart'; @@ -47,7 +48,8 @@ class AbModel { try { var authHeaders = getHttpHeaders(); authHeaders['Content-Type'] = "application/json"; - final resp = await http.post(Uri.parse(api), headers: authHeaders); + authHeaders['Accept-Encoding'] = "gzip"; + final resp = await http.get(Uri.parse(api), headers: authHeaders); if (resp.body.isNotEmpty && resp.body.toLowerCase() != "null") { Map json = jsonDecode(resp.body); if (json.containsKey('error')) { @@ -136,8 +138,16 @@ class AbModel { final body = jsonEncode({ "data": jsonEncode({"tags": tags, "peers": peersJsonData}) }); + var request = http.Request('POST', Uri.parse(api)); + if (licensedDevices > 0) { + authHeaders['Content-Encoding'] = "gzip"; + request.bodyBytes = GZipCodec().encode(utf8.encode(body)); + } else { + request.body = body; + } + request.headers.addAll(authHeaders); try { - await http.post(Uri.parse(api), headers: authHeaders, body: body); + await http.Client().send(request); await pullAb(quiet: true); } catch (e) { BotToast.showText(contentColor: Colors.red, text: e.toString()); From 6dd476fecbd973ee772d341b47a1e87b158743eb Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 28 Jul 2023 17:55:33 +0800 Subject: [PATCH 222/612] fix --option --- src/core_main.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core_main.rs b/src/core_main.rs index 73508f293..78e245358 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -326,6 +326,7 @@ pub fn core_main() -> Option> { } else { my_println!("Installation and administrative privileges required!"); } + return None; } else if args[0] == "--check-hwcodec-config" { #[cfg(feature = "hwcodec")] scrap::hwcodec::check_config(); From ceb78aa095052d2af267c35b1568d79bca00aeee Mon Sep 17 00:00:00 2001 From: Integral Date: Fri, 28 Jul 2023 23:48:11 +0800 Subject: [PATCH 223/612] Update cn.rs --- src/lang/cn.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lang/cn.rs b/src/lang/cn.rs index d15c21d4b..b4a76c62e 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -518,11 +518,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "退出"), ("Open", "打开"), ("logout_tip", "确定要退出登录吗?"), - ("Service", ""), - ("Start", ""), - ("Stop", ""), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), + ("Service", "服务"), + ("Start", "启动"), + ("Stop", "停止"), + ("exceed_max_devices", "管理的设备数已达到最大值"), + ("Sync with recent sessions", "同步最近会话"), + ("Sort tags", "对标签进行排序"), ].iter().cloned().collect(); } From 0a29fa87f0af632d711f449ad6a82be1083acfc3 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 29 Jul 2023 11:41:44 +0800 Subject: [PATCH 224/612] remove System::new_all in hwcodec check Signed-off-by: 21pages --- libs/scrap/src/common/hwcodec.rs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index f84f3bb7f..c1e3636d8 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -371,14 +371,7 @@ pub fn check_config_process() { HwCodecConfig::clear(); if let Ok(exe) = std::env::current_exe() { if let Some(file_name) = exe.file_name().to_owned() { - let s = System::new_all(); let arg = "--check-hwcodec-config"; - for process in s.processes_by_name(&file_name.to_string_lossy().to_string()) { - if process.cmd().iter().any(|cmd| cmd.contains(arg)) { - log::warn!("already have process {}", arg); - return; - } - } if let Ok(mut child) = std::process::Command::new(exe).arg(arg).spawn() { // wait up to 10 seconds for _ in 0..10 { From 61a48b536768dab51b5c2d1c44e9dc5409e6419d Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 29 Jul 2023 13:47:59 +0800 Subject: [PATCH 225/612] fix IDTextEditingController extra character Signed-off-by: 21pages --- flutter/lib/common/formatter/id_formatter.dart | 2 ++ libs/scrap/src/common/hwcodec.rs | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/flutter/lib/common/formatter/id_formatter.dart b/flutter/lib/common/formatter/id_formatter.dart index a9e4893a6..bd7f76666 100644 --- a/flutter/lib/common/formatter/id_formatter.dart +++ b/flutter/lib/common/formatter/id_formatter.dart @@ -26,6 +26,8 @@ class IDTextInputFormatter extends TextInputFormatter { selection: TextSelection.collapsed( offset: newID.length - selectionIndexFromTheRight, ), + // https://github.com/flutter/flutter/issues/78066#issuecomment-797869906 + composing: newValue.composing, ); } } diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index c1e3636d8..60be40d4f 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -363,14 +363,13 @@ pub fn check_config() { } pub fn check_config_process() { - use hbb_common::sysinfo::{ProcessExt, System, SystemExt}; use std::sync::Once; let f = || { // Clear to avoid checking process errors // But when the program is just started, the configuration file has not been updated, and the new connection will read an empty configuration HwCodecConfig::clear(); if let Ok(exe) = std::env::current_exe() { - if let Some(file_name) = exe.file_name().to_owned() { + if let Some(_) = exe.file_name().to_owned() { let arg = "--check-hwcodec-config"; if let Ok(mut child) = std::process::Command::new(exe).arg(arg).spawn() { // wait up to 10 seconds From c15e3c306e78755dee0b6bbf94fc61de97634c66 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 29 Jul 2023 13:06:18 +0800 Subject: [PATCH 226/612] refact, option, allow linux headless Signed-off-by: fufesou --- libs/hbb_common/src/config.rs | 4 + src/platform/linux.rs | 10 ++ src/platform/linux_desktop_manager.rs | 4 + src/rendezvous_mediator.rs | 4 +- src/server/connection.rs | 147 +++++++++++++++----------- 5 files changed, 106 insertions(+), 63 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 7bdd322d3..19730e630 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -32,6 +32,10 @@ pub const COMPRESS_LEVEL: i32 = 3; const SERIAL: i32 = 3; const PASSWORD_ENC_VERSION: &str = "00"; +// config2 options +#[cfg(all(target_os = "linux"))] +pub const CONFIG_OPTION_ALLOW_LINUX_HEADLESS: &str = "allow-linux-headless"; + #[cfg(target_os = "macos")] lazy_static::lazy_static! { pub static ref ORG: Arc> = Arc::new(RwLock::new("com.carriez".to_owned())); diff --git a/src/platform/linux.rs b/src/platform/linux.rs index 9c5a8b9fc..e254af12e 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -9,6 +9,9 @@ use hbb_common::{ message_proto::Resolution, regex::{Captures, Regex}, }; +#[cfg(all(feature = "linux_headless"))] +#[cfg(not(any(feature = "flatpak", feature = "appimage")))] +use hbb_common::config::CONFIG_OPTION_ALLOW_LINUX_HEADLESS; use std::{ cell::RefCell, io::Write, @@ -69,6 +72,13 @@ pub struct xcb_xfixes_get_cursor_image { pub pixels: *const c_long, } +#[inline] +#[cfg(feature = "linux_headless")] +#[cfg(not(any(feature = "flatpak", feature = "appimage")))] +pub fn is_headless_allowed() -> bool { + Config::get_option(CONFIG_OPTION_ALLOW_LINUX_HEADLESS) == "Y" +} + #[inline] fn sleep_millis(millis: u64) { std::thread::sleep(Duration::from_millis(millis)); diff --git a/src/platform/linux_desktop_manager.rs b/src/platform/linux_desktop_manager.rs index fe60964cc..1382fa2ed 100644 --- a/src/platform/linux_desktop_manager.rs +++ b/src/platform/linux_desktop_manager.rs @@ -109,6 +109,10 @@ pub fn try_start_desktop(_username: &str, _passsword: &str) -> String { // No need to verify password here. return "".to_owned(); } + if username.is_empty() { + // Another user is logged in. No need to start a new xsession. + return "".to_owned(); + } if let Some(msg) = detect_headless() { return msg.to_owned(); diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 3e3b6c9b3..97a6d91d8 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -75,7 +75,9 @@ impl RendezvousMediator { } #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - crate::platform::linux_desktop_manager::start_xdesktop(); + if crate::platform::is_headless_allowed() { + crate::platform::linux_desktop_manager::start_xdesktop(); + } loop { Config::reset_online(); if Config::get_option("stop-service").is_empty() { diff --git a/src/server/connection.rs b/src/server/connection.rs index ed51a6c29..efa0f88e1 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -985,8 +985,10 @@ impl Connection { } #[cfg(feature = "linux_headless")] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if linux_desktop_manager::is_headless() { - platform_additions.insert("headless".into(), json!(true)); + if crate::platform::is_headless_allowed() { + if linux_desktop_manager::is_headless() { + platform_additions.insert("headless".into(), json!(true)); + } } if !platform_additions.is_empty() { pi.platform_additions = @@ -1375,23 +1377,42 @@ impl Connection { #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - let desktop_err = match lr.os_login.as_ref() { - Some(os_login) => { - linux_desktop_manager::try_start_desktop(&os_login.username, &os_login.password) + let is_headless_allowed = crate::platform::is_headless_allowed(); + #[cfg(all(target_os = "linux", feature = "linux_headless"))] + #[cfg(not(any(feature = "flatpak", feature = "appimage")))] + let desktop_err = if is_headless_allowed { + match lr.os_login.as_ref() { + Some(os_login) => linux_desktop_manager::try_start_desktop( + &os_login.username, + &os_login.password, + ), + None => linux_desktop_manager::try_start_desktop("", ""), } - None => linux_desktop_manager::try_start_desktop("", ""), + } else { + "".to_string() }; #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - let is_headless = linux_desktop_manager::is_headless(); + let is_headless = is_headless_allowed && linux_desktop_manager::is_headless(); #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] let wait_ipc_timeout = 10_000; + #[cfg(all(target_os = "linux", feature = "linux_headless"))] + #[cfg(not(any(feature = "flatpak", feature = "appimage")))] + let is_headless_proc = is_headless_allowed; + #[cfg(any( + feature = "flatpak", + feature = "appimage", + not(all(target_os = "linux", feature = "linux_headless")) + ))] + let is_headless_proc = false; + // If err is LOGIN_MSG_DESKTOP_SESSION_NOT_READY, just keep this msg and go on checking password. #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if !desktop_err.is_empty() + if is_headless_proc + && !desktop_err.is_empty() && desktop_err != crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY { self.send_login_error(desktop_err).await; @@ -1424,22 +1445,23 @@ impl Connection { } else if self.is_recent_session() { #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if desktop_err.is_empty() { - #[cfg(target_os = "linux")] - if is_headless { - self.tx_desktop_ready.send(()).await.ok(); - let _res = timeout(wait_ipc_timeout, self.rx_cm_stream_ready.recv()).await; + if is_headless_proc { + if desktop_err.is_empty() { + if is_headless { + self.tx_desktop_ready.send(()).await.ok(); + let _res = + timeout(wait_ipc_timeout, self.rx_cm_stream_ready.recv()).await; + } + self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), true); + self.send_logon_response().await; + if self.port_forward_socket.is_some() { + return false; + } + } else { + self.send_login_error(desktop_err).await; } - self.try_start_cm(lr.my_id, lr.my_name, true); - self.send_logon_response().await; - if self.port_forward_socket.is_some() { - return false; - } - } else { - self.send_login_error(desktop_err).await; } - #[cfg(not(all(target_os = "linux", feature = "linux_headless")))] - { + if !is_headless_proc { self.try_start_cm(lr.my_id, lr.my_name, true); self.send_logon_response().await; if self.port_forward_socket.is_some() { @@ -1449,16 +1471,19 @@ impl Connection { } else if lr.password.is_empty() { #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if desktop_err.is_empty() { - self.try_start_cm(lr.my_id, lr.my_name, false); - } else { - self.send_login_error( - crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY_PASSWORD_EMPTY, - ) - .await; + if is_headless_proc { + if desktop_err.is_empty() { + self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), false); + } else { + self.send_login_error( + crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY_PASSWORD_EMPTY, + ) + .await; + } + } + if !is_headless_proc { + self.try_start_cm(lr.my_id, lr.my_name, false); } - #[cfg(not(all(target_os = "linux", feature = "linux_headless")))] - self.try_start_cm(lr.my_id, lr.my_name, false); } else { let mut failure = LOGIN_FAILURES .lock() @@ -1499,18 +1524,19 @@ impl Connection { .insert(self.ip.clone(), failure); #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if desktop_err.is_empty() { - self.send_login_error(crate::client::LOGIN_MSG_PASSWORD_WRONG) + if is_headless_proc { + if desktop_err.is_empty() { + self.send_login_error(crate::client::LOGIN_MSG_PASSWORD_WRONG) + .await; + self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), false); + } else { + self.send_login_error( + crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY_PASSWORD_WRONG, + ) .await; - self.try_start_cm(lr.my_id, lr.my_name, false); - } else { - self.send_login_error( - crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY_PASSWORD_WRONG, - ) - .await; + } } - #[cfg(not(all(target_os = "linux", feature = "linux_headless")))] - { + if !is_headless_proc { self.send_login_error(crate::client::LOGIN_MSG_PASSWORD_WRONG) .await; self.try_start_cm(lr.my_id, lr.my_name, false); @@ -1521,23 +1547,23 @@ impl Connection { } #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if desktop_err.is_empty() { - #[cfg(target_os = "linux")] - if is_headless { - self.tx_desktop_ready.send(()).await.ok(); - let _res = - timeout(wait_ipc_timeout, self.rx_cm_stream_ready.recv()).await; + if is_headless_proc { + if desktop_err.is_empty() { + if is_headless { + self.tx_desktop_ready.send(()).await.ok(); + let _res = + timeout(wait_ipc_timeout, self.rx_cm_stream_ready.recv()).await; + } + self.send_logon_response().await; + self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), true); + if self.port_forward_socket.is_some() { + return false; + } + } else { + self.send_login_error(desktop_err).await; } - self.send_logon_response().await; - self.try_start_cm(lr.my_id, lr.my_name, true); - if self.port_forward_socket.is_some() { - return false; - } - } else { - self.send_login_error(desktop_err).await; } - #[cfg(not(all(target_os = "linux", feature = "linux_headless")))] - { + if !is_headless_proc { self.send_logon_response().await; self.try_start_cm(lr.my_id, lr.my_name, true); if self.port_forward_socket.is_some() { @@ -2361,19 +2387,16 @@ async fn start_ipc( args.push("--hide"); }; - #[cfg(target_os = "linux")] - #[cfg(not(feature = "linux_headless"))] - let user = None; - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(any(feature = "flatpak", feature = "appimage"))] + #[cfg(any(feature = "flatpak", feature = "appimage", not(all(target_os = "linux", feature = "linux_headless"))))] let user = None; #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] let mut user = None; + // Cm run as user, wait until desktop session is ready. #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if linux_desktop_manager::is_headless() { + if crate::platform::is_headless_allowed() && linux_desktop_manager::is_headless() { let mut username = linux_desktop_manager::get_username(); loop { if !username.is_empty() { From c0ead118a25a925b5d9f7b925bff6e1d0ff46523 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 29 Jul 2023 14:02:13 +0800 Subject: [PATCH 227/612] refact, option, allow linux headless Signed-off-by: fufesou --- src/client.rs | 10 +++++++++- src/lang/ca.rs | 2 ++ src/lang/cn.rs | 2 ++ src/lang/cs.rs | 2 ++ src/lang/da.rs | 2 ++ src/lang/de.rs | 2 ++ src/lang/el.rs | 2 ++ src/lang/en.rs | 2 ++ src/lang/eo.rs | 2 ++ src/lang/es.rs | 2 ++ src/lang/fa.rs | 2 ++ src/lang/fr.rs | 2 ++ src/lang/hu.rs | 2 ++ src/lang/id.rs | 2 ++ src/lang/it.rs | 2 ++ src/lang/ja.rs | 2 ++ src/lang/ko.rs | 2 ++ src/lang/kz.rs | 2 ++ src/lang/lt.rs | 2 ++ src/lang/nl.rs | 2 ++ src/lang/pl.rs | 2 ++ src/lang/pt_PT.rs | 2 ++ src/lang/ptbr.rs | 2 ++ src/lang/ro.rs | 2 ++ src/lang/ru.rs | 2 ++ src/lang/sk.rs | 2 ++ src/lang/sl.rs | 2 ++ src/lang/sq.rs | 2 ++ src/lang/sr.rs | 2 ++ src/lang/sv.rs | 2 ++ src/lang/template.rs | 2 ++ src/lang/th.rs | 2 ++ src/lang/tr.rs | 2 ++ src/lang/tw.rs | 2 ++ src/lang/ua.rs | 2 ++ src/lang/vn.rs | 2 ++ src/server/connection.rs | 30 +++++++++++++++++++++--------- 37 files changed, 100 insertions(+), 10 deletions(-) diff --git a/src/client.rs b/src/client.rs index a48669899..40b3542b3 100644 --- a/src/client.rs +++ b/src/client.rs @@ -91,6 +91,8 @@ pub const LOGIN_MSG_PASSWORD_WRONG: &str = "Wrong Password"; pub const LOGIN_MSG_NO_PASSWORD_ACCESS: &str = "No Password Access"; pub const LOGIN_MSG_OFFLINE: &str = "Offline"; #[cfg(target_os = "linux")] +pub const LOGIN_SCREEN_WAYLAND: &str = "Wayland login screen"; +#[cfg(target_os = "linux")] pub const SCRAP_UBUNTU_HIGHER_REQUIRED: &str = "Wayland requires Ubuntu 21.04 or higher version."; #[cfg(target_os = "linux")] pub const SCRAP_OTHER_VERSION_OR_X11_REQUIRED: &str = @@ -2100,7 +2102,13 @@ struct LoginErrorMsgBox { lazy_static::lazy_static! { static ref LOGIN_ERROR_MAP: Arc> = { use hbb_common::config::LINK_HEADLESS_LINUX_SUPPORT; - let map = HashMap::from([(LOGIN_MSG_DESKTOP_SESSION_NOT_READY, LoginErrorMsgBox{ + let map = HashMap::from([(LOGIN_SCREEN_WAYLAND, LoginErrorMsgBox{ + msgtype: "error", + title: "login_wayland_title_tip", + text: "login_wayland_text_tip", + link: "https://rustdesk.com/docs/en/manual/linux/#login-screen", + try_again: true, + }), (LOGIN_MSG_DESKTOP_SESSION_NOT_READY, LoginErrorMsgBox{ msgtype: "session-login", title: "", text: "", diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 51a731c35..b172ec34b 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index b4a76c62e..004a9e1fc 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "管理的设备数已达到最大值"), ("Sync with recent sessions", "同步最近会话"), ("Sort tags", "对标签进行排序"), + ("login_wayland_title_tip", "无法连接"), + ("login_wayland_text_tip", "不支持 Wayland 登录界面。"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 29898eaf7..cd6e23142 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 0a4adaf36..6400e6f1c 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index c42ac5719..ff01fa645 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."), ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index eb91e9a83..d49df927a 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/en.rs b/src/lang/en.rs index 001d9133d..6563f5ada 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -73,5 +73,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("clipboard_wait_response_timeout_tip", "Timed out waiting for copy response."), ("logout_tip", "Are you sure you want to log out?"), ("exceed_max_devices", "You have reached the maximum number of managed devices."), + ("login_wayland_title_tip", "Failed to connect"), + ("login_wayland_text_tip", "Login screen of Wayland is not supported."), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index a576538ef..23965e679 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index c39bcb7f5..cf764c542 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Has alcanzado el máximo número de dispositivos administrados."), ("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sort tags", "Ordenar etiquetas"), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 112edf32a..9f4ece250 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 57c548e08..2fae8c90d 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 638ed3adf..69cba6c72 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index ac9df01b3..e6b1e268f 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index c89e6cf72..d7fea8cec 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."), ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 67234039d..05cb41089 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index c0b71c205..f0e1b4d4b 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 829c59c73..2732835e3 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 69936b2b4..ea2c80e8e 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 92bd7fd1f..91c90559a 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index af6d11659..a6196206d 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 52675daf7..91e1020bd 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 195b79804..ac374a5ec 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 378d7c035..00494e359 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 6b48ef20b..7b29c106f 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index f24f55bef..2dc9e572c 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index ff5c254e0..f74220b92 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 797328139..4ce234d23 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 3bb40f4ce..233eff041 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index ac898e38f..034643a13 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 5c710624f..42784f016 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 2b2d0f4b2..64b422ce6 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index d7bd99f25..26041d881 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index bef733f00..75f0c7a87 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 3b115a5f3..44df50c47 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 59490da1d..2441193bf 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("login_wayland_title_tip", ""), + ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/server/connection.rs b/src/server/connection.rs index efa0f88e1..30a87cd80 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1007,14 +1007,22 @@ impl Connection { } #[cfg(target_os = "linux")] if !self.file_transfer.is_some() && !self.port_forward_socket.is_some() { - let dtype = crate::platform::linux::get_display_server(); - if dtype != crate::platform::linux::DISPLAY_SERVER_X11 - && dtype != crate::platform::linux::DISPLAY_SERVER_WAYLAND - { - res.set_error(format!( - "Unsupported display server type \"{}\", x11 or wayland expected", - dtype - )); + let mut msg = "".to_owned(); + if crate::platform::linux::is_login_wayland() { + msg = crate::client::LOGIN_SCREEN_WAYLAND.to_owned(); + } else { + let dtype = crate::platform::linux::get_display_server(); + if dtype != crate::platform::linux::DISPLAY_SERVER_X11 + && dtype != crate::platform::linux::DISPLAY_SERVER_WAYLAND + { + msg = format!( + "Unsupported display server type \"{}\", x11 or wayland expected", + dtype + ); + } + } + if !msg.is_empty() { + res.set_error(msg); let mut msg_out = Message::new(); msg_out.set_login_response(res); self.send(msg_out).await; @@ -2387,7 +2395,11 @@ async fn start_ipc( args.push("--hide"); }; - #[cfg(any(feature = "flatpak", feature = "appimage", not(all(target_os = "linux", feature = "linux_headless"))))] + #[cfg(any( + feature = "flatpak", + feature = "appimage", + not(all(target_os = "linux", feature = "linux_headless")) + ))] let user = None; #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] From 55972bfac53381cc11f95ed78d7432b27085b7b5 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 29 Jul 2023 15:22:25 +0800 Subject: [PATCH 228/612] refact, linux headless option, debug Signed-off-by: fufesou --- src/client.rs | 2 +- src/platform/linux.rs | 26 +++++++++++++------- src/platform/linux_desktop_manager.rs | 2 +- src/rendezvous_mediator.rs | 5 ++-- src/server/connection.rs | 34 ++++++++++++--------------- 5 files changed, 36 insertions(+), 33 deletions(-) diff --git a/src/client.rs b/src/client.rs index 40b3542b3..a60251980 100644 --- a/src/client.rs +++ b/src/client.rs @@ -91,7 +91,7 @@ pub const LOGIN_MSG_PASSWORD_WRONG: &str = "Wrong Password"; pub const LOGIN_MSG_NO_PASSWORD_ACCESS: &str = "No Password Access"; pub const LOGIN_MSG_OFFLINE: &str = "Offline"; #[cfg(target_os = "linux")] -pub const LOGIN_SCREEN_WAYLAND: &str = "Wayland login screen"; +pub const LOGIN_SCREEN_WAYLAND: &str = "Wayland login screen is not supported"; #[cfg(target_os = "linux")] pub const SCRAP_UBUNTU_HIGHER_REQUIRED: &str = "Wayland requires Ubuntu 21.04 or higher version."; #[cfg(target_os = "linux")] diff --git a/src/platform/linux.rs b/src/platform/linux.rs index e254af12e..f553d63ba 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -1,5 +1,8 @@ use super::{CursorData, ResultType}; use desktop::Desktop; +#[cfg(all(feature = "linux_headless"))] +#[cfg(not(any(feature = "flatpak", feature = "appimage")))] +use hbb_common::config::CONFIG_OPTION_ALLOW_LINUX_HEADLESS; pub use hbb_common::platform::linux::*; use hbb_common::{ allow_err, bail, @@ -9,9 +12,6 @@ use hbb_common::{ message_proto::Resolution, regex::{Captures, Regex}, }; -#[cfg(all(feature = "linux_headless"))] -#[cfg(not(any(feature = "flatpak", feature = "appimage")))] -use hbb_common::config::CONFIG_OPTION_ALLOW_LINUX_HEADLESS; use std::{ cell::RefCell, io::Write, @@ -439,13 +439,21 @@ fn get_cm() -> bool { } pub fn is_login_wayland() -> bool { - if let Ok(contents) = std::fs::read_to_string("/etc/gdm3/custom.conf") { - contents.contains("#WaylandEnable=false") || contents.contains("WaylandEnable=true") - } else if let Ok(contents) = std::fs::read_to_string("/etc/gdm/custom.conf") { - contents.contains("#WaylandEnable=false") || contents.contains("WaylandEnable=true") - } else { - false + let files = ["/etc/gdm3/custom.conf", "/etc/gdm/custom.conf"]; + match ( + Regex::new(r"# *WaylandEnable *= *false"), + Regex::new(r"WaylandEnable *= *true"), + ) { + (Ok(pat1), Ok(pat2)) => { + for file in files { + if let Ok(contents) = std::fs::read_to_string(file) { + return pat1.is_match(&contents) || pat2.is_match(&contents); + } + } + } + _ => {} } + false } #[inline] diff --git a/src/platform/linux_desktop_manager.rs b/src/platform/linux_desktop_manager.rs index 1382fa2ed..b7caa527c 100644 --- a/src/platform/linux_desktop_manager.rs +++ b/src/platform/linux_desktop_manager.rs @@ -109,7 +109,7 @@ pub fn try_start_desktop(_username: &str, _passsword: &str) -> String { // No need to verify password here. return "".to_owned(); } - if username.is_empty() { + if !username.is_empty() { // Another user is logged in. No need to start a new xsession. return "".to_owned(); } diff --git a/src/rendezvous_mediator.rs b/src/rendezvous_mediator.rs index 97a6d91d8..924c0c709 100644 --- a/src/rendezvous_mediator.rs +++ b/src/rendezvous_mediator.rs @@ -73,11 +73,10 @@ impl RendezvousMediator { allow_err!(super::lan::start_listening()); }); } + // It is ok to run xdesktop manager when the headless function is not allowed. #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if crate::platform::is_headless_allowed() { - crate::platform::linux_desktop_manager::start_xdesktop(); - } + crate::platform::linux_desktop_manager::start_xdesktop(); loop { Config::reset_online(); if Config::get_option("stop-service").is_empty() { diff --git a/src/server/connection.rs b/src/server/connection.rs index 30a87cd80..7e0f39809 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1386,6 +1386,12 @@ impl Connection { #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] let is_headless_allowed = crate::platform::is_headless_allowed(); + #[cfg(any( + feature = "flatpak", + feature = "appimage", + not(all(target_os = "linux", feature = "linux_headless")) + ))] + let is_headless_allowed = false; #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] let desktop_err = if is_headless_allowed { @@ -1406,20 +1412,10 @@ impl Connection { #[cfg(not(any(feature = "flatpak", feature = "appimage")))] let wait_ipc_timeout = 10_000; - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - let is_headless_proc = is_headless_allowed; - #[cfg(any( - feature = "flatpak", - feature = "appimage", - not(all(target_os = "linux", feature = "linux_headless")) - ))] - let is_headless_proc = false; - // If err is LOGIN_MSG_DESKTOP_SESSION_NOT_READY, just keep this msg and go on checking password. #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if is_headless_proc + if is_headless_allowed && !desktop_err.is_empty() && desktop_err != crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY { @@ -1453,7 +1449,7 @@ impl Connection { } else if self.is_recent_session() { #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if is_headless_proc { + if is_headless_allowed { if desktop_err.is_empty() { if is_headless { self.tx_desktop_ready.send(()).await.ok(); @@ -1469,7 +1465,7 @@ impl Connection { self.send_login_error(desktop_err).await; } } - if !is_headless_proc { + if !is_headless_allowed { self.try_start_cm(lr.my_id, lr.my_name, true); self.send_logon_response().await; if self.port_forward_socket.is_some() { @@ -1479,7 +1475,7 @@ impl Connection { } else if lr.password.is_empty() { #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if is_headless_proc { + if is_headless_allowed { if desktop_err.is_empty() { self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), false); } else { @@ -1489,7 +1485,7 @@ impl Connection { .await; } } - if !is_headless_proc { + if !is_headless_allowed { self.try_start_cm(lr.my_id, lr.my_name, false); } } else { @@ -1532,7 +1528,7 @@ impl Connection { .insert(self.ip.clone(), failure); #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if is_headless_proc { + if is_headless_allowed { if desktop_err.is_empty() { self.send_login_error(crate::client::LOGIN_MSG_PASSWORD_WRONG) .await; @@ -1544,7 +1540,7 @@ impl Connection { .await; } } - if !is_headless_proc { + if !is_headless_allowed { self.send_login_error(crate::client::LOGIN_MSG_PASSWORD_WRONG) .await; self.try_start_cm(lr.my_id, lr.my_name, false); @@ -1555,7 +1551,7 @@ impl Connection { } #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if is_headless_proc { + if is_headless_allowed { if desktop_err.is_empty() { if is_headless { self.tx_desktop_ready.send(()).await.ok(); @@ -1571,7 +1567,7 @@ impl Connection { self.send_login_error(desktop_err).await; } } - if !is_headless_proc { + if !is_headless_allowed { self.send_logon_response().await; self.try_start_cm(lr.my_id, lr.my_name, true); if self.port_forward_socket.is_some() { From 19c8ba719af300235db1910ad2552c49c5f3dc72 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 29 Jul 2023 15:45:16 +0800 Subject: [PATCH 229/612] refact, linux headless option, ui Signed-off-by: fufesou --- .../desktop/pages/desktop_setting_page.dart | 30 +++++++++++-------- libs/hbb_common/src/config.rs | 2 +- src/flutter_ffi.rs | 9 ++++++ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index b89929ad9..81cd2af7d 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -312,20 +312,26 @@ class _GeneralState extends State<_General> { } Widget other() { - return _Card(title: 'Other', children: [ + final children = [ _OptionCheckBox(context, 'Confirm before closing multiple tabs', 'enable-confirm-closing-tabs'), - _OptionCheckBox(context, 'Adaptive Bitrate', 'enable-abr'), - if (Platform.isLinux) - Tooltip( - message: translate('software_render_tip'), - child: _OptionCheckBox( - context, - "Always use software rendering", - 'allow-always-software-render', - ), - ) - ]); + _OptionCheckBox(context, 'Adaptive Bitrate', 'enable-abr') + ]; + if (Platform.isLinux) { + children.add(Tooltip( + message: translate('software_render_tip'), + child: _OptionCheckBox( + context, + "Always use software rendering", + 'allow-always-software-render', + ), + )); + } + if (bind.mainShowOption(key: 'allow-linux-headless')) { + children.add(_OptionCheckBox( + context, 'Allow linux headless', 'allow-linux-headless')); + } + return _Card(title: 'Other', children: children); } Widget hwcodec() { diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 19730e630..ce041e75c 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -33,7 +33,7 @@ const SERIAL: i32 = 3; const PASSWORD_ENC_VERSION: &str = "00"; // config2 options -#[cfg(all(target_os = "linux"))] +#[cfg(target_os = "linux")] pub const CONFIG_OPTION_ALLOW_LINUX_HEADLESS: &str = "allow-linux-headless"; #[cfg(target_os = "macos")] diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index c25ac78b0..67fc286e6 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -614,6 +614,15 @@ pub fn main_get_error() -> String { get_error() } +pub fn main_show_option(key: String) -> SyncReturn { + if key.eq(config::CONFIG_OPTION_ALLOW_LINUX_HEADLESS) { + #[cfg(all(target_os = "linux", feature = "linux_headless"))] + #[cfg(not(any(feature = "flatpak", feature = "appimage")))] + return SyncReturn(true) + } + SyncReturn(false) +} + pub fn main_set_option(key: String, value: String) { if key.eq("custom-rendezvous-server") { set_option(key, value); From d761d2f00ec0b7ef1faa71b591476bfde7534ee2 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 29 Jul 2023 16:09:10 +0800 Subject: [PATCH 230/612] fix build Signed-off-by: fufesou --- src/client.rs | 1 - src/flutter_ffi.rs | 8 ++++---- src/server/connection.rs | 3 ++- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/client.rs b/src/client.rs index a60251980..dbd893c5a 100644 --- a/src/client.rs +++ b/src/client.rs @@ -90,7 +90,6 @@ pub const LOGIN_MSG_PASSWORD_EMPTY: &str = "Empty Password"; pub const LOGIN_MSG_PASSWORD_WRONG: &str = "Wrong Password"; pub const LOGIN_MSG_NO_PASSWORD_ACCESS: &str = "No Password Access"; pub const LOGIN_MSG_OFFLINE: &str = "Offline"; -#[cfg(target_os = "linux")] pub const LOGIN_SCREEN_WAYLAND: &str = "Wayland login screen is not supported"; #[cfg(target_os = "linux")] pub const SCRAP_UBUNTU_HIGHER_REQUIRED: &str = "Wayland requires Ubuntu 21.04 or higher version."; diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 67fc286e6..64a221141 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -614,10 +614,10 @@ pub fn main_get_error() -> String { get_error() } -pub fn main_show_option(key: String) -> SyncReturn { - if key.eq(config::CONFIG_OPTION_ALLOW_LINUX_HEADLESS) { - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] +pub fn main_show_option(_key: String) -> SyncReturn { + #[cfg(all(target_os = "linux", feature = "linux_headless"))] + #[cfg(not(any(feature = "flatpak", feature = "appimage")))] + if _key.eq(config::CONFIG_OPTION_ALLOW_LINUX_HEADLESS) { return SyncReturn(true) } SyncReturn(false) diff --git a/src/server/connection.rs b/src/server/connection.rs index 7e0f39809..bc101e697 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -2391,10 +2391,11 @@ async fn start_ipc( args.push("--hide"); }; + #[cfg(target_os = "linux")] #[cfg(any( feature = "flatpak", feature = "appimage", - not(all(target_os = "linux", feature = "linux_headless")) + not(feature = "linux_headless") ))] let user = None; #[cfg(all(target_os = "linux", feature = "linux_headless"))] From 540316655229262d80f57e43ca8b6ff2a363e03f Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 29 Jul 2023 17:16:53 +0800 Subject: [PATCH 231/612] refact, linux headless option, debug Signed-off-by: fufesou --- src/platform/linux.rs | 6 ++++++ src/server/connection.rs | 23 ++++++++++------------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index f553d63ba..86b530342 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -79,6 +79,12 @@ pub fn is_headless_allowed() -> bool { Config::get_option(CONFIG_OPTION_ALLOW_LINUX_HEADLESS) == "Y" } +#[inline] +pub fn is_login_screen_wayland() -> bool { + let values = get_values_of_seat0_with_gdm_wayland(&[0, 2]); + is_gdm_user(&values[1]) && get_display_server_of_session(&values[0]) == DISPLAY_SERVER_WAYLAND +} + #[inline] fn sleep_millis(millis: u64) { std::thread::sleep(Duration::from_millis(millis)); diff --git a/src/server/connection.rs b/src/server/connection.rs index bc101e697..5765e59bd 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1007,21 +1007,18 @@ impl Connection { } #[cfg(target_os = "linux")] if !self.file_transfer.is_some() && !self.port_forward_socket.is_some() { - let mut msg = "".to_owned(); - if crate::platform::linux::is_login_wayland() { - msg = crate::client::LOGIN_SCREEN_WAYLAND.to_owned(); - } else { - let dtype = crate::platform::linux::get_display_server(); - if dtype != crate::platform::linux::DISPLAY_SERVER_X11 - && dtype != crate::platform::linux::DISPLAY_SERVER_WAYLAND - { - msg = format!( + let dtype = crate::platform::linux::get_display_server(); + if dtype != crate::platform::linux::DISPLAY_SERVER_X11 + && dtype != crate::platform::linux::DISPLAY_SERVER_WAYLAND + { + let msg = if crate::platform::linux::is_login_screen_wayland() { + crate::client::LOGIN_SCREEN_WAYLAND.to_owned() + } else { + format!( "Unsupported display server type \"{}\", x11 or wayland expected", dtype - ); - } - } - if !msg.is_empty() { + ) + }; res.set_error(msg); let mut msg_out = Message::new(); msg_out.set_login_response(res); From 2e256c0fca18a4651ddc803f263fa290054703ce Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 29 Jul 2023 17:35:44 +0800 Subject: [PATCH 232/612] refact, wayland login screen translate Signed-off-by: fufesou --- flutter/lib/desktop/pages/desktop_home_page.dart | 2 +- src/lang/en.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index 5b03b39ef..05b0c1720 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -377,7 +377,7 @@ class _DesktopHomePageState extends State link: 'https://rustdesk.com/docs/en/manual/linux/#x11-required'); } else if (bind.mainIsLoginWayland()) { return buildInstallCard("Warning", - "Login screen using Wayland is not supported", "", () async {}, + translate("login_wayland_text_tip"), "", () async {}, help: 'Help', link: 'https://rustdesk.com/docs/en/manual/linux/#login-screen'); } diff --git a/src/lang/en.rs b/src/lang/en.rs index 6563f5ada..e9b2789a3 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -74,6 +74,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("logout_tip", "Are you sure you want to log out?"), ("exceed_max_devices", "You have reached the maximum number of managed devices."), ("login_wayland_title_tip", "Failed to connect"), - ("login_wayland_text_tip", "Login screen of Wayland is not supported."), + ("login_wayland_text_tip", "Login screen using Wayland is not supported."), ].iter().cloned().collect(); } From 3343210e8b54b66b1ea8d63f1f3aa51e11460025 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 29 Jul 2023 18:02:12 +0800 Subject: [PATCH 233/612] remove translation Signed-off-by: fufesou --- flutter/lib/desktop/pages/desktop_home_page.dart | 2 +- src/client.rs | 4 ++-- src/lang/ca.rs | 2 -- src/lang/cn.rs | 2 -- src/lang/cs.rs | 2 -- src/lang/da.rs | 2 -- src/lang/de.rs | 2 -- src/lang/el.rs | 2 -- src/lang/en.rs | 2 -- src/lang/eo.rs | 2 -- src/lang/es.rs | 2 -- src/lang/fa.rs | 2 -- src/lang/fr.rs | 2 -- src/lang/hu.rs | 2 -- src/lang/id.rs | 2 -- src/lang/it.rs | 2 -- src/lang/ja.rs | 2 -- src/lang/ko.rs | 2 -- src/lang/kz.rs | 2 -- src/lang/lt.rs | 2 -- src/lang/nl.rs | 2 -- src/lang/pl.rs | 2 -- src/lang/pt_PT.rs | 2 -- src/lang/ptbr.rs | 2 -- src/lang/ro.rs | 2 -- src/lang/ru.rs | 2 -- src/lang/sk.rs | 2 -- src/lang/sl.rs | 2 -- src/lang/sq.rs | 2 -- src/lang/sr.rs | 2 -- src/lang/sv.rs | 2 -- src/lang/template.rs | 2 -- src/lang/th.rs | 2 -- src/lang/tr.rs | 2 -- src/lang/tw.rs | 2 -- src/lang/ua.rs | 2 -- src/lang/vn.rs | 2 -- 37 files changed, 3 insertions(+), 73 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index 05b0c1720..0911808d0 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -377,7 +377,7 @@ class _DesktopHomePageState extends State link: 'https://rustdesk.com/docs/en/manual/linux/#x11-required'); } else if (bind.mainIsLoginWayland()) { return buildInstallCard("Warning", - translate("login_wayland_text_tip"), "", () async {}, + translate("Login screen using Wayland is not supported"), "", () async {}, help: 'Help', link: 'https://rustdesk.com/docs/en/manual/linux/#login-screen'); } diff --git a/src/client.rs b/src/client.rs index dbd893c5a..e98e6bd3a 100644 --- a/src/client.rs +++ b/src/client.rs @@ -2103,8 +2103,8 @@ lazy_static::lazy_static! { use hbb_common::config::LINK_HEADLESS_LINUX_SUPPORT; let map = HashMap::from([(LOGIN_SCREEN_WAYLAND, LoginErrorMsgBox{ msgtype: "error", - title: "login_wayland_title_tip", - text: "login_wayland_text_tip", + title: "Login Error", + text: "Login screen using Wayland is not supported", link: "https://rustdesk.com/docs/en/manual/linux/#login-screen", try_again: true, }), (LOGIN_MSG_DESKTOP_SESSION_NOT_READY, LoginErrorMsgBox{ diff --git a/src/lang/ca.rs b/src/lang/ca.rs index b172ec34b..51a731c35 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 004a9e1fc..b4a76c62e 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "管理的设备数已达到最大值"), ("Sync with recent sessions", "同步最近会话"), ("Sort tags", "对标签进行排序"), - ("login_wayland_title_tip", "无法连接"), - ("login_wayland_text_tip", "不支持 Wayland 登录界面。"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index cd6e23142..29898eaf7 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 6400e6f1c..0a4adaf36 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index ff01fa645..c42ac5719 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."), ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index d49df927a..eb91e9a83 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/en.rs b/src/lang/en.rs index e9b2789a3..001d9133d 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -73,7 +73,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("clipboard_wait_response_timeout_tip", "Timed out waiting for copy response."), ("logout_tip", "Are you sure you want to log out?"), ("exceed_max_devices", "You have reached the maximum number of managed devices."), - ("login_wayland_title_tip", "Failed to connect"), - ("login_wayland_text_tip", "Login screen using Wayland is not supported."), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 23965e679..a576538ef 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index cf764c542..c39bcb7f5 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Has alcanzado el máximo número de dispositivos administrados."), ("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sort tags", "Ordenar etiquetas"), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 9f4ece250..112edf32a 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 2fae8c90d..57c548e08 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 69cba6c72..638ed3adf 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index e6b1e268f..ac9df01b3 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index d7fea8cec..c89e6cf72 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."), ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 05cb41089..67234039d 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index f0e1b4d4b..c0b71c205 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 2732835e3..829c59c73 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index ea2c80e8e..69936b2b4 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 91c90559a..92bd7fd1f 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index a6196206d..af6d11659 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 91e1020bd..52675daf7 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index ac374a5ec..195b79804 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 00494e359..378d7c035 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 7b29c106f..6b48ef20b 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 2dc9e572c..f24f55bef 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index f74220b92..ff5c254e0 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 4ce234d23..797328139 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 233eff041..3bb40f4ce 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 034643a13..ac898e38f 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 42784f016..5c710624f 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 64b422ce6..2b2d0f4b2 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 26041d881..d7bd99f25 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 75f0c7a87..bef733f00 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 44df50c47..3b115a5f3 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 2441193bf..59490da1d 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -524,7 +524,5 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("login_wayland_title_tip", ""), - ("login_wayland_text_tip", ""), ].iter().cloned().collect(); } From ddaefddc6e3d6f9046df2f1f0d1ffd6eb266f98e Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 29 Jul 2023 21:28:42 +0800 Subject: [PATCH 234/612] refact, linux headless option Signed-off-by: fufesou --- .../lib/desktop/pages/desktop_home_page.dart | 4 +- src/server/connection.rs | 195 ++++++++---------- 2 files changed, 86 insertions(+), 113 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index 0911808d0..32ca6c20d 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -372,12 +372,12 @@ class _DesktopHomePageState extends State } else if (Platform.isLinux) { if (bind.mainCurrentIsWayland()) { return buildInstallCard( - "Warning", translate("wayland_experiment_tip"), "", () async {}, + "Warning", "wayland_experiment_tip", "", () async {}, help: 'Help', link: 'https://rustdesk.com/docs/en/manual/linux/#x11-required'); } else if (bind.mainIsLoginWayland()) { return buildInstallCard("Warning", - translate("Login screen using Wayland is not supported"), "", () async {}, + "Login screen using Wayland is not supported", "", () async {}, help: 'Help', link: 'https://rustdesk.com/docs/en/manual/linux/#login-screen'); } diff --git a/src/server/connection.rs b/src/server/connection.rs index 5765e59bd..4173d4f02 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -191,10 +191,7 @@ pub struct Connection { pressed_modifiers: HashSet, #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - rx_cm_stream_ready: mpsc::Receiver<()>, - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - tx_desktop_ready: mpsc::Sender<()>, + linux_headless_handle: LinuxHeadlessHandle, closed: bool, delay_response_instant: Instant, } @@ -266,6 +263,10 @@ impl Connection { let (tx_cm_stream_ready, _rx_cm_stream_ready) = mpsc::channel(1); #[cfg(not(any(target_os = "android", target_os = "ios")))] let (_tx_desktop_ready, rx_desktop_ready) = mpsc::channel(1); + #[cfg(all(target_os = "linux", feature = "linux_headless"))] + #[cfg(not(any(feature = "flatpak", feature = "appimage")))] + let linux_headless_handle = + LinuxHeadlessHandle::new(_rx_cm_stream_ready, _tx_desktop_ready); #[cfg(not(any(target_os = "android", target_os = "ios")))] let tx_cloned = tx.clone(); @@ -322,10 +323,7 @@ impl Connection { pressed_modifiers: Default::default(), #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - rx_cm_stream_ready: _rx_cm_stream_ready, - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - tx_desktop_ready: _tx_desktop_ready, + linux_headless_handle, closed: false, delay_response_instant: Instant::now(), }; @@ -1380,43 +1378,22 @@ impl Connection { } } - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - let is_headless_allowed = crate::platform::is_headless_allowed(); #[cfg(any( feature = "flatpak", feature = "appimage", not(all(target_os = "linux", feature = "linux_headless")) ))] - let is_headless_allowed = false; + let err_msg = "".to_owned(); #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - let desktop_err = if is_headless_allowed { - match lr.os_login.as_ref() { - Some(os_login) => linux_desktop_manager::try_start_desktop( - &os_login.username, - &os_login.password, - ), - None => linux_desktop_manager::try_start_desktop("", ""), - } - } else { - "".to_string() - }; - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - let is_headless = is_headless_allowed && linux_desktop_manager::is_headless(); - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - let wait_ipc_timeout = 10_000; + let err_msg = self + .linux_headless_handle + .try_start_desktop(lr.os_login.as_ref()); // If err is LOGIN_MSG_DESKTOP_SESSION_NOT_READY, just keep this msg and go on checking password. - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if is_headless_allowed - && !desktop_err.is_empty() - && desktop_err != crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY + if !err_msg.is_empty() && err_msg != crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY { - self.send_login_error(desktop_err).await; + self.send_login_error(err_msg).await; return true; } @@ -1444,46 +1421,26 @@ impl Connection { self.send_login_error("Connection not allowed").await; return false; } else if self.is_recent_session() { - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if is_headless_allowed { - if desktop_err.is_empty() { - if is_headless { - self.tx_desktop_ready.send(()).await.ok(); - let _res = - timeout(wait_ipc_timeout, self.rx_cm_stream_ready.recv()).await; - } - self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), true); - self.send_logon_response().await; - if self.port_forward_socket.is_some() { - return false; - } - } else { - self.send_login_error(desktop_err).await; - } - } - if !is_headless_allowed { - self.try_start_cm(lr.my_id, lr.my_name, true); + if err_msg.is_empty() { + #[cfg(all(target_os = "linux", feature = "linux_headless"))] + #[cfg(not(any(feature = "flatpak", feature = "appimage")))] + self.linux_headless_handle.wait_desktop_cm_ready().await; + self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), true); self.send_logon_response().await; if self.port_forward_socket.is_some() { return false; } + } else { + self.send_login_error(err_msg).await; } } else if lr.password.is_empty() { - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if is_headless_allowed { - if desktop_err.is_empty() { - self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), false); - } else { - self.send_login_error( - crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY_PASSWORD_EMPTY, - ) - .await; - } - } - if !is_headless_allowed { + if err_msg.is_empty() { self.try_start_cm(lr.my_id, lr.my_name, false); + } else { + self.send_login_error( + crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY_PASSWORD_EMPTY, + ) + .await; } } else { let mut failure = LOGIN_FAILURES @@ -1523,53 +1480,31 @@ impl Connection { .lock() .unwrap() .insert(self.ip.clone(), failure); - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if is_headless_allowed { - if desktop_err.is_empty() { - self.send_login_error(crate::client::LOGIN_MSG_PASSWORD_WRONG) - .await; - self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), false); - } else { - self.send_login_error( - crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY_PASSWORD_WRONG, - ) - .await; - } - } - if !is_headless_allowed { + if err_msg.is_empty() { self.send_login_error(crate::client::LOGIN_MSG_PASSWORD_WRONG) .await; self.try_start_cm(lr.my_id, lr.my_name, false); + } else { + self.send_login_error( + crate::client::LOGIN_MSG_DESKTOP_SESSION_NOT_READY_PASSWORD_WRONG, + ) + .await; } } else { if failure.0 != 0 { LOGIN_FAILURES.lock().unwrap().remove(&self.ip); } - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] - if is_headless_allowed { - if desktop_err.is_empty() { - if is_headless { - self.tx_desktop_ready.send(()).await.ok(); - let _res = - timeout(wait_ipc_timeout, self.rx_cm_stream_ready.recv()).await; - } - self.send_logon_response().await; - self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), true); - if self.port_forward_socket.is_some() { - return false; - } - } else { - self.send_login_error(desktop_err).await; - } - } - if !is_headless_allowed { + if err_msg.is_empty() { + #[cfg(all(target_os = "linux", feature = "linux_headless"))] + #[cfg(not(any(feature = "flatpak", feature = "appimage")))] + self.linux_headless_handle.wait_desktop_cm_ready().await; self.send_logon_response().await; self.try_start_cm(lr.my_id, lr.my_name, true); if self.port_forward_socket.is_some() { return false; } + } else { + self.send_login_error(err_msg).await; } } } @@ -2388,15 +2323,7 @@ async fn start_ipc( args.push("--hide"); }; - #[cfg(target_os = "linux")] - #[cfg(any( - feature = "flatpak", - feature = "appimage", - not(feature = "linux_headless") - ))] - let user = None; - #[cfg(all(target_os = "linux", feature = "linux_headless"))] - #[cfg(not(any(feature = "flatpak", feature = "appimage")))] + #[allow(unused_mut)] let mut user = None; // Cm run as user, wait until desktop session is ready. @@ -2601,6 +2528,52 @@ impl Drop for Connection { } } +#[cfg(all(target_os = "linux", feature = "linux_headless"))] +#[cfg(not(any(feature = "flatpak", feature = "appimage")))] +struct LinuxHeadlessHandle { + pub is_headless_allowed: bool, + pub is_headless: bool, + pub wait_ipc_timeout: u64, + pub rx_cm_stream_ready: mpsc::Receiver<()>, + pub tx_desktop_ready: mpsc::Sender<()>, +} + +#[cfg(all(target_os = "linux", feature = "linux_headless"))] +#[cfg(not(any(feature = "flatpak", feature = "appimage")))] +impl LinuxHeadlessHandle { + pub fn new(rx_cm_stream_ready: mpsc::Receiver<()>, tx_desktop_ready: mpsc::Sender<()>) -> Self { + let is_headless_allowed = crate::platform::is_headless_allowed(); + let is_headless = is_headless_allowed && linux_desktop_manager::is_headless(); + Self { + is_headless_allowed, + is_headless, + wait_ipc_timeout: 10_000, + rx_cm_stream_ready, + tx_desktop_ready, + } + } + + pub fn try_start_desktop(&mut self, os_login: Option<&OSLogin>) -> String { + if self.is_headless_allowed { + match os_login { + Some(os_login) => { + linux_desktop_manager::try_start_desktop(&os_login.username, &os_login.password) + } + None => linux_desktop_manager::try_start_desktop("", ""), + } + } else { + "".to_string() + } + } + + pub async fn wait_desktop_cm_ready(&mut self) { + if self.is_headless { + self.tx_desktop_ready.send(()).await.ok(); + let _res = timeout(self.wait_ipc_timeout, self.rx_cm_stream_ready.recv()).await; + } + } +} + mod raii { use super::*; pub struct ConnectionID(i32); From 64b680e7cf5904493c8466de4e23a66900c66809 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 29 Jul 2023 22:26:14 +0800 Subject: [PATCH 235/612] fix build Signed-off-by: fufesou --- src/server/connection.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/connection.rs b/src/server/connection.rs index 4173d4f02..f3e059696 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -2324,6 +2324,7 @@ async fn start_ipc( }; #[allow(unused_mut)] + #[cfg(target_os = "linux")] let mut user = None; // Cm run as user, wait until desktop session is ready. From dd4f52b63da46a9fd4b1747c922bf39fab3310cd Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 30 Jul 2023 12:16:00 +0800 Subject: [PATCH 236/612] move closing-tabs to local config, and add glgetstring to stack check --- flutter/lib/common.dart | 9 +++++ .../desktop/pages/desktop_setting_page.dart | 34 +++++++++++-------- .../desktop/pages/file_manager_tab_page.dart | 2 +- .../lib/desktop/pages/remote_tab_page.dart | 2 +- flutter/lib/desktop/pages/server_page.dart | 2 +- .../lib/desktop/widgets/tabbar_widget.dart | 2 +- flutter/lib/models/ab_model.dart | 3 +- libs/hbb_common/src/platform/mod.rs | 1 + 8 files changed, 35 insertions(+), 20 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index b069fcee1..eb22d4cc4 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1282,6 +1282,15 @@ bool mainGetBoolOptionSync(String key) { return option2bool(key, bind.mainGetOptionSync(key: key)); } +mainSetLocalBoolOption(String key, bool value) async { + String v = bool2option(key, value); + await bind.mainSetLocalOption(key: key, value: v); +} + +bool mainGetLocalBoolOptionSync(String key) { + return option2bool(key, bind.mainGetLocalOption(key: key)); +} + Future matchPeer(String searchText, Peer peer) async { if (searchText.isEmpty) { return true; diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 81cd2af7d..b3dc960d8 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -314,19 +314,16 @@ class _GeneralState extends State<_General> { Widget other() { final children = [ _OptionCheckBox(context, 'Confirm before closing multiple tabs', - 'enable-confirm-closing-tabs'), + 'enable-confirm-closing-tabs', + isServer: false), _OptionCheckBox(context, 'Adaptive Bitrate', 'enable-abr') ]; - if (Platform.isLinux) { - children.add(Tooltip( - message: translate('software_render_tip'), - child: _OptionCheckBox( - context, - "Always use software rendering", - 'allow-always-software-render', - ), - )); - } + // though this is related to GUI, but opengl problem affects all users, so put in config rather than local + children.add(Tooltip( + message: translate('software_render_tip'), + child: _OptionCheckBox(context, "Always use software rendering", + 'allow-always-software-render'), + )); if (bind.mainShowOption(key: 'allow-linux-headless')) { children.add(_OptionCheckBox( context, 'Allow linux headless', 'allow-linux-headless')); @@ -1666,15 +1663,22 @@ Widget _OptionCheckBox(BuildContext context, String label, String key, bool reverse = false, bool enabled = true, Icon? checkedIcon, - bool? fakeValue}) { - bool value = mainGetBoolOptionSync(key); + bool? fakeValue, + bool isServer = true}) { + bool value = + isServer ? mainGetBoolOptionSync(key) : mainGetLocalBoolOptionSync(key); if (reverse) value = !value; var ref = value.obs; onChanged(option) async { if (option != null) { if (reverse) option = !option; - await mainSetBoolOption(key, option); - ref.value = mainGetBoolOptionSync(key); + isServer + ? await mainSetBoolOption(key, option) + : await mainSetLocalBoolOption(key, option); + ref.value = isServer + ? mainGetBoolOptionSync(key) + : mainGetLocalBoolOptionSync(key); + ; update?.call(); } } diff --git a/flutter/lib/desktop/pages/file_manager_tab_page.dart b/flutter/lib/desktop/pages/file_manager_tab_page.dart index f994e461c..c011fe48d 100644 --- a/flutter/lib/desktop/pages/file_manager_tab_page.dart +++ b/flutter/lib/desktop/pages/file_manager_tab_page.dart @@ -129,7 +129,7 @@ class _FileManagerTabPageState extends State { } else { final opt = "enable-confirm-closing-tabs"; final bool res; - if (!option2bool(opt, await bind.mainGetOption(key: opt))) { + if (!option2bool(opt, await bind.mainGetLocalOption(key: opt))) { res = true; } else { res = await closeConfirmDialog(); diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 9ee04f8b1..af6e00f4a 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -360,7 +360,7 @@ class _ConnectionTabPageState extends State { } else { final opt = "enable-confirm-closing-tabs"; final bool res; - if (!option2bool(opt, await bind.mainGetOption(key: opt))) { + if (!option2bool(opt, await bind.mainGetLocalOption(key: opt))) { res = true; } else { res = await closeConfirmDialog(); diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index f1e35364c..c22935f09 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -254,7 +254,7 @@ class ConnectionManagerState extends State { } else { final opt = "enable-confirm-closing-tabs"; final bool res; - if (!option2bool(opt, await bind.mainGetOption(key: opt))) { + if (!option2bool(opt, await bind.mainGetLocalOption(key: opt))) { res = true; } else { res = await closeConfirmDialog(); diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index bc7864e45..adafaf0aa 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -701,7 +701,7 @@ Future closeConfirmDialog() async { submit() { final opt = "enable-confirm-closing-tabs"; String value = bool2option(opt, confirm); - bind.mainSetOption(key: opt, value: value); + bind.mainSetLocalOption(key: opt, value: value); close(true); } diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 8ae320a52..d3104a611 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -139,7 +139,8 @@ class AbModel { "data": jsonEncode({"tags": tags, "peers": peersJsonData}) }); var request = http.Request('POST', Uri.parse(api)); - if (licensedDevices > 0) { + // support compression + if (licensedDevices > 0 && body.length > 1024) { authHeaders['Content-Encoding'] = "gzip"; request.bodyBytes = GZipCodec().encode(utf8.encode(body)); } else { diff --git a/libs/hbb_common/src/platform/mod.rs b/libs/hbb_common/src/platform/mod.rs index 78cf61e97..5dc004a81 100644 --- a/libs/hbb_common/src/platform/mod.rs +++ b/libs/hbb_common/src/platform/mod.rs @@ -31,6 +31,7 @@ extern "C" fn breakdown_signal_handler(sig: i32) { s.contains(&"nouveau_pushbuf_kick") || s.to_lowercase().contains("nvidia") || s.contains("gdk_window_end_draw_frame") + || s.contains("glGetString") }) { Config::set_option("allow-always-software-render".to_string(), "Y".to_string()); info = "Always use software rendering will be set.".to_string(); From 2c619cbe410945887681d5814441f0fecd7a1b5b Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 30 Jul 2023 11:09:14 +0800 Subject: [PATCH 237/612] quite if config file not found, remove HW_CODEC_CONFIG, option env LIBGL_ALWAYS_SOFTWARE=1 Signed-off-by: 21pages --- libs/hbb_common/src/config.rs | 16 +++++----------- libs/scrap/src/common/hwcodec.rs | 8 ++------ src/core_main.rs | 2 +- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 7bdd322d3..2e45f2165 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -52,7 +52,6 @@ lazy_static::lazy_static! { pub static ref EXE_RENDEZVOUS_SERVER: Arc> = Default::default(); pub static ref APP_NAME: Arc> = Arc::new(RwLock::new("RustDesk".to_owned())); static ref KEY_PAIR: Arc>> = Default::default(); - static ref HW_CODEC_CONFIG: Arc> = Arc::new(RwLock::new(HwCodecConfig::load())); static ref USER_DEFAULT_CONFIG: Arc> = Arc::new(RwLock::new((UserDefaultConfig::load(), Instant::now()))); } @@ -400,6 +399,11 @@ pub fn load_path config, Err(err) => { + if let confy::ConfyError::GeneralLoadError(err) = &err { + if err.kind() == std::io::ErrorKind::NotFound { + return T::default(); + } + } log::error!("Failed to load config '{}': {}", file.display(), err); T::default() } @@ -1358,16 +1362,6 @@ impl HwCodecConfig { pub fn clear() { HwCodecConfig::default().store(); } - - /// refresh current global HW_CODEC_CONFIG, usually uesd after HwCodecConfig::remove() - pub fn refresh() { - *HW_CODEC_CONFIG.write().unwrap() = HwCodecConfig::load(); - log::debug!("HW_CODEC_CONFIG refreshed successfully"); - } - - pub fn get() -> HwCodecConfig { - return HW_CODEC_CONFIG.read().unwrap().clone(); - } } #[derive(Debug, Default, Serialize, Deserialize, Clone)] diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index 60be40d4f..ba834e048 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -314,7 +314,7 @@ impl HwDecoderImage<'_> { } fn get_config(k: &str) -> ResultType { - let v = HwCodecConfig::get() + let v = HwCodecConfig::load() .options .get(k) .unwrap_or(&"".to_owned()) @@ -375,10 +375,7 @@ pub fn check_config_process() { // wait up to 10 seconds for _ in 0..10 { std::thread::sleep(std::time::Duration::from_secs(1)); - if let Ok(Some(status)) = child.try_wait() { - if status.success() { - HwCodecConfig::refresh(); - } + if let Ok(Some(_)) = child.try_wait() { break; } } @@ -399,7 +396,6 @@ pub fn check_config_process() { log::error!("Check hwcodec config, error attempting to wait: {e}") } } - HwCodecConfig::refresh(); } } }; diff --git a/src/core_main.rs b/src/core_main.rs index 78e245358..265beb23d 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -77,7 +77,7 @@ pub fn core_main() -> Option> { #[cfg(target_os = "linux")] #[cfg(feature = "flutter")] { - let (k, v) = ("LIBGL_ALWAYS_SOFTWARE", "true"); + let (k, v) = ("LIBGL_ALWAYS_SOFTWARE", "1"); if !hbb_common::config::Config::get_option("allow-always-software-render").is_empty() { std::env::set_var(k, v); } else { From ac743ca2fe77c3cb05bf4ea7dc7878cf67b04d43 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 30 Jul 2023 16:42:39 +0800 Subject: [PATCH 238/612] check IsClipboardFormatAvailable(CF_HDROP) on clipboard update Signed-off-by: dignow --- libs/clipboard/src/lib.rs | 49 +++++++++++++++++-------- libs/clipboard/src/windows/wf_cliprdr.c | 27 ++++++-------- 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/libs/clipboard/src/lib.rs b/libs/clipboard/src/lib.rs index 84179621d..ea659b550 100644 --- a/libs/clipboard/src/lib.rs +++ b/libs/clipboard/src/lib.rs @@ -181,32 +181,37 @@ pub fn server_clip_file( ClipboardFile::MonitorReady => { log::debug!("server_monitor_ready called"); ret = server_monitor_ready(context, conn_id); - log::debug!("server_monitor_ready called, return {}", ret); + log::debug!("server_monitor_ready called, conn_id {}, return {}", conn_id, ret); } ClipboardFile::FormatList { format_list } => { - log::debug!("server_format_list called"); + log::debug!("server_format_list called, conn_id {}, format_list: {:?}", conn_id, &format_list); ret = server_format_list(context, conn_id, format_list); - log::debug!("server_format_list called, return {}", ret); + log::debug!("server_format_list called, conn_id {}, return {}", conn_id, ret); } ClipboardFile::FormatListResponse { msg_flags } => { - log::debug!("format_list_response called"); + log::debug!("server_format_list_response called"); ret = server_format_list_response(context, conn_id, msg_flags); - log::debug!("server_format_list_response called, return {}", ret); + log::debug!("server_format_list_response called, conn_id {}, msg_flags {}, return {}", conn_id, msg_flags, ret); } ClipboardFile::FormatDataRequest { requested_format_id, } => { - log::debug!("format_data_request called"); + log::debug!("server_format_data_request called"); ret = server_format_data_request(context, conn_id, requested_format_id); - log::debug!("server_format_data_request called, return {}", ret); + log::debug!("server_format_data_request called, conn_id {}, requested_format_id {}, return {}", conn_id, requested_format_id, ret); } ClipboardFile::FormatDataResponse { msg_flags, format_data, } => { - log::debug!("format_data_response called"); + log::debug!("server_format_data_response called"); ret = server_format_data_response(context, conn_id, msg_flags, format_data); - log::debug!("server_format_data_response called, return {}", ret); + log::debug!( + "server_format_data_response called, conn_id {}, msg_flags: {}, return {}", + conn_id, + msg_flags, + ret + ); } ClipboardFile::FileContentsRequest { stream_id, @@ -218,7 +223,7 @@ pub fn server_clip_file( have_clip_data_id, clip_data_id, } => { - log::debug!("file_contents_request called"); + log::debug!("server_file_contents_request called"); ret = server_file_contents_request( context, conn_id, @@ -231,14 +236,24 @@ pub fn server_clip_file( have_clip_data_id, clip_data_id, ); - log::debug!("server_file_contents_request called, return {}", ret); + log::debug!("server_file_contents_request called, conn_id {}, stream_id: {}, list_index {}, dw_flags {}, n_position_low {}, n_position_high {}, cb_requested {}, have_clip_data_id {}, clip_data_id {}, return {}", conn_id, + stream_id, + list_index, + dw_flags, + n_position_low, + n_position_high, + cb_requested, + have_clip_data_id, + clip_data_id, + ret + ); } ClipboardFile::FileContentsResponse { msg_flags, stream_id, requested_data, } => { - log::debug!("file_contents_response called"); + log::debug!("server_file_contents_response called"); ret = server_file_contents_response( context, conn_id, @@ -246,7 +261,12 @@ pub fn server_clip_file( stream_id, requested_data, ); - log::debug!("server_file_contents_response called, return {}", ret); + log::debug!("server_file_contents_response called, conn_id {}, msg_flags {}, stream_id {}, return {}", + conn_id, + msg_flags, + stream_id, + ret + ); } } ret @@ -578,8 +598,6 @@ extern "C" fn client_format_data_request( _context: *mut CliprdrClientContext, format_data_request: *const CLIPRDR_FORMAT_DATA_REQUEST, ) -> UINT { - log::debug!("client_format_data_request called"); - let conn_id; let requested_format_id; unsafe { @@ -589,6 +607,7 @@ extern "C" fn client_format_data_request( let data = ClipboardFile::FormatDataRequest { requested_format_id, }; + log::debug!("client_format_data_request called, conn_id: {}, requested_format_id: {}", conn_id, requested_format_id); // no need to handle result here send_data(conn_id, data); diff --git a/libs/clipboard/src/windows/wf_cliprdr.c b/libs/clipboard/src/windows/wf_cliprdr.c index 801fa71f3..6d5a2e7b9 100644 --- a/libs/clipboard/src/windows/wf_cliprdr.c +++ b/libs/clipboard/src/windows/wf_cliprdr.c @@ -1367,6 +1367,11 @@ static UINT cliprdr_send_format_list(wfClipboard *clipboard, UINT32 connID) if (!clipboard) return ERROR_INTERNAL_ERROR; + if (!IsClipboardFormatAvailable(CF_HDROP)) + { + return ERROR_SUCCESS; + } + ZeroMemory(&formatList, sizeof(CLIPRDR_FORMAT_LIST)); /* Ignore if other app is holding clipboard */ @@ -1392,21 +1397,11 @@ static UINT cliprdr_send_format_list(wfClipboard *clipboard, UINT32 connID) } index = 0; - - if (IsClipboardFormatAvailable(CF_HDROP)) - { - UINT fsid = RegisterClipboardFormat(CFSTR_FILEDESCRIPTORW); - UINT fcid = RegisterClipboardFormat(CFSTR_FILECONTENTS); - - formats[index++].formatId = fsid; - formats[index++].formatId = fcid; - } - else - { - while (formatId = EnumClipboardFormats(formatId) && index < numFormats) - formats[index++].formatId = formatId; - } - + // IsClipboardFormatAvailable(CF_HDROP) is checked above + UINT fsid = RegisterClipboardFormat(CFSTR_FILEDESCRIPTORW); + UINT fcid = RegisterClipboardFormat(CFSTR_FILECONTENTS); + formats[index++].formatId = fsid; + formats[index++].formatId = fcid; numFormats = index; if (!CloseClipboard()) @@ -2215,6 +2210,7 @@ static UINT wf_cliprdr_server_format_list(CliprdrClientContext *context, for (i = 0; i < formatList->numFormats; i++) { + printf("REMOVE ME ========================== idx: %d, format id: %d\n", i, formatList->formats[i].formatId); format = &(formatList->formats[i]); mapping = &(clipboard->format_mappings[i]); mapping->remote_format_id = format->formatId; @@ -2594,6 +2590,7 @@ wf_cliprdr_server_format_data_response(CliprdrClientContext *context, { // BOOL emptyRes = wf_do_empty_cliprdr((wfClipboard *)context->custom); // (void)emptyRes; + printf("REMOVE ME ================================= msg flags: %d\n", formatDataResponse->msgFlags); rc = E_FAIL; break; } From 549dc057132dd48de95584403e5c4acdb28e58cd Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 30 Jul 2023 17:16:25 +0800 Subject: [PATCH 239/612] add debug log Signed-off-by: dignow --- libs/clipboard/src/lib.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/libs/clipboard/src/lib.rs b/libs/clipboard/src/lib.rs index ea659b550..2cec93237 100644 --- a/libs/clipboard/src/lib.rs +++ b/libs/clipboard/src/lib.rs @@ -535,8 +535,6 @@ extern "C" fn client_format_list( _context: *mut CliprdrClientContext, clip_format_list: *const CLIPRDR_FORMAT_LIST, ) -> UINT { - log::debug!("client_format_list called"); - let conn_id; let mut format_list: Vec<(i32, String)> = Vec::new(); unsafe { @@ -561,6 +559,8 @@ extern "C" fn client_format_list( } conn_id = (*clip_format_list).connID as i32; } + log::debug!("client_format_list called, client id: {}, format_list: {:?}", conn_id, &format_list); + let data = ClipboardFile::FormatList { format_list }; // no need to handle result here if conn_id == 0 { @@ -580,14 +580,13 @@ extern "C" fn client_format_list_response( _context: *mut CliprdrClientContext, format_list_response: *const CLIPRDR_FORMAT_LIST_RESPONSE, ) -> UINT { - log::debug!("client_format_list_response called"); - let conn_id; let msg_flags; unsafe { conn_id = (*format_list_response).connID as i32; msg_flags = (*format_list_response).msgFlags as i32; } + log::debug!("client_format_list_response called, client id: {}, msg_flags: {}", conn_id, msg_flags); let data = ClipboardFile::FormatListResponse { msg_flags }; send_data(conn_id, data); @@ -618,8 +617,6 @@ extern "C" fn client_format_data_response( _context: *mut CliprdrClientContext, format_data_response: *const CLIPRDR_FORMAT_DATA_RESPONSE, ) -> UINT { - log::debug!("cconn_idlient_format_data_response called"); - let conn_id; let msg_flags; let format_data; @@ -636,6 +633,7 @@ extern "C" fn client_format_data_response( .to_vec(); } } + log::debug!("client_format_data_response called, client id: {}, msg_flags: {}", conn_id, msg_flags); let data = ClipboardFile::FormatDataResponse { msg_flags, format_data, @@ -649,8 +647,6 @@ extern "C" fn client_file_contents_request( _context: *mut CliprdrClientContext, file_contents_request: *const CLIPRDR_FILE_CONTENTS_REQUEST, ) -> UINT { - log::debug!("client_file_contents_request called"); - // TODO: support huge file? // if (!cliprdr->hasHugeFileSupport) // { @@ -692,6 +688,8 @@ extern "C" fn client_file_contents_request( have_clip_data_id, clip_data_id, }; + log::debug!("client_file_contents_request called, data: {:?}", &data); + send_data(conn_id, data); 0 @@ -701,8 +699,6 @@ extern "C" fn client_file_contents_response( _context: *mut CliprdrClientContext, file_contents_response: *const CLIPRDR_FILE_CONTENTS_RESPONSE, ) -> UINT { - log::debug!("client_file_contents_response called"); - let conn_id; let msg_flags; let stream_id; @@ -726,6 +722,7 @@ extern "C" fn client_file_contents_response( stream_id, requested_data, }; + log::debug!("client_file_contents_response called, conn_id: {}, msg_flags: {}, stream_id: {}", conn_id, msg_flags, stream_id); send_data(conn_id, data); 0 From 50c737694f739539b6af3f7e2ba353127d2f247b Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 30 Jul 2023 17:25:35 +0800 Subject: [PATCH 240/612] remove debug log Signed-off-by: dignow --- libs/clipboard/src/lib.rs | 3 --- libs/clipboard/src/windows/wf_cliprdr.c | 2 -- 2 files changed, 5 deletions(-) diff --git a/libs/clipboard/src/lib.rs b/libs/clipboard/src/lib.rs index 2cec93237..7a5941029 100644 --- a/libs/clipboard/src/lib.rs +++ b/libs/clipboard/src/lib.rs @@ -560,7 +560,6 @@ extern "C" fn client_format_list( conn_id = (*clip_format_list).connID as i32; } log::debug!("client_format_list called, client id: {}, format_list: {:?}", conn_id, &format_list); - let data = ClipboardFile::FormatList { format_list }; // no need to handle result here if conn_id == 0 { @@ -677,7 +676,6 @@ extern "C" fn client_file_contents_request( have_clip_data_id = (*file_contents_request).haveClipDataId == TRUE; clip_data_id = (*file_contents_request).clipDataId as i32; } - let data = ClipboardFile::FileContentsRequest { stream_id, list_index, @@ -689,7 +687,6 @@ extern "C" fn client_file_contents_request( clip_data_id, }; log::debug!("client_file_contents_request called, data: {:?}", &data); - send_data(conn_id, data); 0 diff --git a/libs/clipboard/src/windows/wf_cliprdr.c b/libs/clipboard/src/windows/wf_cliprdr.c index 6d5a2e7b9..c8f2038a1 100644 --- a/libs/clipboard/src/windows/wf_cliprdr.c +++ b/libs/clipboard/src/windows/wf_cliprdr.c @@ -2210,7 +2210,6 @@ static UINT wf_cliprdr_server_format_list(CliprdrClientContext *context, for (i = 0; i < formatList->numFormats; i++) { - printf("REMOVE ME ========================== idx: %d, format id: %d\n", i, formatList->formats[i].formatId); format = &(formatList->formats[i]); mapping = &(clipboard->format_mappings[i]); mapping->remote_format_id = format->formatId; @@ -2590,7 +2589,6 @@ wf_cliprdr_server_format_data_response(CliprdrClientContext *context, { // BOOL emptyRes = wf_do_empty_cliprdr((wfClipboard *)context->custom); // (void)emptyRes; - printf("REMOVE ME ================================= msg flags: %d\n", formatDataResponse->msgFlags); rc = E_FAIL; break; } From c88219b7696013b31b0a62c34a1865e303c1619c Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Sun, 30 Jul 2023 15:07:17 +0530 Subject: [PATCH 241/612] retry _get_values_of_seat0 function to fix connection refused error Signed-off-by: Sahil Yeole --- libs/hbb_common/src/platform/linux.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libs/hbb_common/src/platform/linux.rs b/libs/hbb_common/src/platform/linux.rs index 89c96799d..2b14fcd67 100644 --- a/libs/hbb_common/src/platform/linux.rs +++ b/libs/hbb_common/src/platform/linux.rs @@ -133,6 +133,8 @@ pub fn get_values_of_seat0_with_gdm_wayland(indices: &[usize]) -> Vec { } fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool) -> Vec { + let mut retry_attempt = 0; + loop{ if let Ok(output) = run_loginctl(None) { for line in String::from_utf8_lossy(&output.stdout).lines() { if line.contains("seat0") { @@ -172,7 +174,13 @@ fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool) -> Vec= 1 { + return line_values(indices, ""); + } + // Increment the retry_attempt counter and wait for 5 seconds before retrying + retry_attempt += 1; + std::thread::sleep(Duration::from_secs(5)); + } } pub fn is_active(sid: &str) -> bool { From a4600dd8a85e4b2dbe9e4b02bc9cba8c7848ee87 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 30 Jul 2023 19:12:51 +0800 Subject: [PATCH 242/612] refact, minimize on fullscreen Signed-off-by: dignow --- .../lib/desktop/widgets/remote_toolbar.dart | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index ab74dab59..dcf78b27b 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -1896,6 +1896,7 @@ class _DraggableShowHideState extends State<_DraggableShowHide> { padding: MaterialStateProperty.all(EdgeInsets.zero), ); final isFullscreen = stateGlobal.fullscreen; + const double iconSize = 20; final child = Row( mainAxisSize: MainAxisSize.min, children: [ @@ -1905,18 +1906,24 @@ class _DraggableShowHideState extends State<_DraggableShowHide> { widget.setFullscreen(!isFullscreen); setState(() {}); }, - child: Icon( - isFullscreen ? Icons.fullscreen_exit : Icons.fullscreen, - size: 20, + child: Tooltip( + message: translate(isFullscreen ? 'Exit Fullscreen' : 'Fullscreen'), + child: Icon( + isFullscreen ? Icons.fullscreen_exit : Icons.fullscreen, + size: iconSize, + ), ), ), Offstage( offstage: !isFullscreen, child: TextButton( onPressed: () => widget.setMinimize(), - child: Icon( - Icons.minimize, - size: 20, + child: Tooltip( + message: translate('Minimize'), + child: Icon( + Icons.remove, + size: iconSize, + ), ), ), ), @@ -1924,9 +1931,13 @@ class _DraggableShowHideState extends State<_DraggableShowHide> { onPressed: () => setState(() { widget.show.value = !widget.show.value; }), - child: Obx((() => Icon( - widget.show.isTrue ? Icons.expand_less : Icons.expand_more, - size: 20, + child: Obx((() => Tooltip( + message: translate( + widget.show.isTrue ? 'Hide Toolbar' : 'Show Toolbar'), + child: Icon( + widget.show.isTrue ? Icons.expand_less : Icons.expand_more, + size: iconSize, + ), ))), ), ], @@ -2008,7 +2019,8 @@ class _MultiMonitorMenu extends StatelessWidget { children: [ SvgPicture.asset( "assets/screen.svg", - colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn), + colorFilter: + ColorFilter.mode(Colors.white, BlendMode.srcIn), ), Obx( () => Text( From 30c002831ec38faf6236dffb56bf1755dbcfaa78 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Sun, 30 Jul 2023 17:45:36 +0530 Subject: [PATCH 243/612] make multiple attempts for _get_values_of_seat0 Signed-off-by: Sahil Yeole --- libs/hbb_common/src/platform/linux.rs | 66 +++++++++++++-------------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/libs/hbb_common/src/platform/linux.rs b/libs/hbb_common/src/platform/linux.rs index 2b14fcd67..4aeeefb58 100644 --- a/libs/hbb_common/src/platform/linux.rs +++ b/libs/hbb_common/src/platform/linux.rs @@ -124,7 +124,7 @@ fn line_values(indices: &[usize], line: &str) -> Vec { #[inline] pub fn get_values_of_seat0(indices: &[usize]) -> Vec { - _get_values_of_seat0(indices, true) + _get_values_of_seat0(indices, true, 20) } #[inline] @@ -132,55 +132,51 @@ pub fn get_values_of_seat0_with_gdm_wayland(indices: &[usize]) -> Vec { _get_values_of_seat0(indices, false) } -fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool) -> Vec { - let mut retry_attempt = 0; - loop{ - if let Ok(output) = run_loginctl(None) { - for line in String::from_utf8_lossy(&output.stdout).lines() { - if line.contains("seat0") { +fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool, attempts: usize) -> Vec { + for _ in 0..attempts { + if let Ok(output) = run_loginctl(None) { + for line in String::from_utf8_lossy(&output.stdout).lines() { + if line.contains("seat0") { + if let Some(sid) = line.split_whitespace().next() { + if is_active(sid) { + if ignore_gdm_wayland { + if is_gdm_user(line.split_whitespace().nth(2).unwrap_or("")) + && get_display_server_of_session(sid) == DISPLAY_SERVER_WAYLAND + { + continue; + } + } + return line_values(indices, line); + } + } + } + } + + // some case, there is no seat0 https://github.com/rustdesk/rustdesk/issues/73 + for line in String::from_utf8_lossy(&output.stdout).lines() { if let Some(sid) = line.split_whitespace().next() { if is_active(sid) { + let d = get_display_server_of_session(sid); if ignore_gdm_wayland { if is_gdm_user(line.split_whitespace().nth(2).unwrap_or("")) - && get_display_server_of_session(sid) == DISPLAY_SERVER_WAYLAND + && d == DISPLAY_SERVER_WAYLAND { continue; } } + if d == "tty" { + continue; + } return line_values(indices, line); } } } } - // some case, there is no seat0 https://github.com/rustdesk/rustdesk/issues/73 - for line in String::from_utf8_lossy(&output.stdout).lines() { - if let Some(sid) = line.split_whitespace().next() { - if is_active(sid) { - let d = get_display_server_of_session(sid); - if ignore_gdm_wayland { - if is_gdm_user(line.split_whitespace().nth(2).unwrap_or("")) - && d == DISPLAY_SERVER_WAYLAND - { - continue; - } - } - if d == "tty" { - continue; - } - return line_values(indices, line); - } - } - } - } - - if retry_attempt >= 1 { - return line_values(indices, ""); - } - // Increment the retry_attempt counter and wait for 5 seconds before retrying - retry_attempt += 1; - std::thread::sleep(Duration::from_secs(5)); + // Wait for 300ms and try again + std::thread::sleep(std::time::Duration::from_millis(300)); } + return line_values(indices, ""); } pub fn is_active(sid: &str) -> bool { From cf6fbae30a10aa1f70eb63b54d0de52e99073a25 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Sun, 30 Jul 2023 17:58:14 +0530 Subject: [PATCH 244/612] add attempts for getting values of seat0 for gdm_wayland Signed-off-by: Sahil Yeole --- libs/hbb_common/src/platform/linux.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/hbb_common/src/platform/linux.rs b/libs/hbb_common/src/platform/linux.rs index 4aeeefb58..65d18c701 100644 --- a/libs/hbb_common/src/platform/linux.rs +++ b/libs/hbb_common/src/platform/linux.rs @@ -129,7 +129,7 @@ pub fn get_values_of_seat0(indices: &[usize]) -> Vec { #[inline] pub fn get_values_of_seat0_with_gdm_wayland(indices: &[usize]) -> Vec { - _get_values_of_seat0(indices, false) + _get_values_of_seat0(indices, false, 20) } fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool, attempts: usize) -> Vec { From 086c48cea9a78d057cb991ad89c86d0de81c50ba Mon Sep 17 00:00:00 2001 From: FastAct <93490087+FastAct@users.noreply.github.com> Date: Mon, 31 Jul 2023 08:44:54 +0200 Subject: [PATCH 245/612] Update nl.rs --- src/lang/nl.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 92bd7fd1f..7c6d7ba05 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -1,4 +1,4 @@ -lazy_static::lazy_static! { +vicelazy_static::lazy_static! { pub static ref T: std::collections::HashMap<&'static str, &'static str> = [ ("Status", "Status"), @@ -518,11 +518,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Verlaten"), ("Open", "Open"), ("logout_tip", "Weet je zeker dat je je wilt afmelden?"), - ("Service", ""), - ("Start", ""), - ("Stop", ""), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), + ("Service", "Service"), + ("Start", "Start"), + ("Stop", "Stop"), + ("exceed_max_devices", "Het maximum aantal gecontroleerde apparaten is bereikt."), + ("Sync with recent sessions", "Recente sessies synchroniseren"), + ("Sort tags", "Labels sorteren"), ].iter().cloned().collect(); } From d649d13c97e2f26201dd98bfc40dc482959ba99e Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Mon, 31 Jul 2023 15:07:23 +0800 Subject: [PATCH 246/612] Update nl.rs --- src/lang/nl.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 7c6d7ba05..c470f2270 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -1,4 +1,4 @@ -vicelazy_static::lazy_static! { +lazy_static::lazy_static! { pub static ref T: std::collections::HashMap<&'static str, &'static str> = [ ("Status", "Status"), From 831a50e70247291c2c1c2ab346eef31c30f6b80e Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 31 Jul 2023 17:13:39 +0800 Subject: [PATCH 247/612] fix addressbook pull uri Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index d3104a611..3df43546a 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -44,7 +44,7 @@ class AbModel { abLoading.value = true; abError.value = ""; } - final api = "${await bind.mainGetApiServer()}/api/ab/get"; + final api = "${await bind.mainGetApiServer()}/api/ab"; try { var authHeaders = getHttpHeaders(); authHeaders['Content-Type'] = "application/json"; From ac60ba40a23dd76e9338c4febf5e661bf5bd4936 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 31 Jul 2023 18:13:54 +0800 Subject: [PATCH 248/612] fix #5205 --- src/platform/linux.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index 86b530342..b43c06e87 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -693,7 +693,8 @@ pub fn check_super_user_permission() -> ResultType { } // https://github.com/rustdesk/rustdesk/issues/2756 if let Ok(status) = Command::new("pkexec").arg(arg).status() { - Ok(status.code() != Some(126)) + // https://github.com/rustdesk/rustdesk/issues/5205#issuecomment-1658059657s + Ok(status.code() != Some(126) && status.code() != Some(127)) } else { Ok(true) } From f7c1b8d88fa4786e4e63e08a2f8be3362340657a Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 31 Jul 2023 19:57:35 +0800 Subject: [PATCH 249/612] fix, win file clipboard, when authrized by the remote Signed-off-by: dignow --- src/ui_cm_interface.rs | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 9a7556d25..8316139a5 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -413,6 +413,10 @@ impl IpcTaskRunner { if stop { ContextSend::set_is_stopped(); } else { + if !self.authorized { + log::debug!("Clipboard message from client peer, but not authorized"); + continue; + } let conn_id = self.conn_id; ContextSend::proc(|context: &mut Box| -> u32 { clipboard::server_clip_file(context, conn_id, _clip) @@ -454,16 +458,25 @@ impl IpcTaskRunner { } } Some(data) = self.rx.recv() => { - if let Data::SwitchPermission{name: _name, enabled: _enabled} = &data { - #[cfg(windows)] - if _name == "file" { - self.file_transfer_enabled = *_enabled; - } - } if self.stream.send(&data).await.is_err() { break; } - } + match &data { + Data::SwitchPermission{name: _name, enabled: _enabled} => { + #[cfg(windows)] + if _name == "file" { + self.file_transfer_enabled = *_enabled; + } + } + Data::Authorize => { + self.authorized = true; + self.running = true; + break; + } + _ => { + } + } + }, clip_file = rx_clip.recv() => match clip_file { Some(_clip) => { #[cfg(windows)] From e143493d7b9ba4df08e3709f9070a935ee7123b9 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 31 Jul 2023 20:02:01 +0800 Subject: [PATCH 250/612] simple changes Signed-off-by: dignow --- flutter/lib/models/server_model.dart | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 3f5fb43f9..6867aa6fe 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -410,18 +410,25 @@ class ServerModel with ChangeNotifier { updateClientState([String? json]) async { if (isTest) return; var res = await bind.cmGetClientsState(); + List clientsJson; try { - final List clientsJson = jsonDecode(res); - _clients.clear(); - tabController.state.value.tabs.clear(); - for (var clientJson in clientsJson) { + clientsJson = jsonDecode(res); + } catch (e) { + debugPrint("Failed to decode clientsJson: '$res', error $e"); + return; + } + + _clients.clear(); + tabController.state.value.tabs.clear(); + + for (var clientJson in clientsJson) { + try { final client = Client.fromJson(clientJson); _clients.add(client); _addTab(client); + } catch (e) { + debugPrint("Failed to decode clientJson '$clientJson', error $e"); } - notifyListeners(); - } catch (e) { - debugPrint("Failed to updateClientState:$e"); } } From 416cdac1fed7667e37ae375ccc064f2d0db685f3 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 31 Jul 2023 20:33:19 +0800 Subject: [PATCH 251/612] fix, win clipboard, remove duplicated state Signed-off-by: dignow --- src/ui_cm_interface.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 8316139a5..78949b0b5 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -68,7 +68,6 @@ struct IpcTaskRunner { rx: mpsc::UnboundedReceiver, close: bool, running: bool, - authorized: bool, conn_id: i32, #[cfg(windows)] file_transfer_enabled: bool, @@ -162,6 +161,16 @@ impl ConnectionManager { self.ui_handler.add_connection(&client); } + #[inline] + fn is_authorized(&self, id: i32) -> bool { + CLIENTS + .read() + .unwrap() + .get(&id) + .map(|c| c.authorized) + .unwrap_or(false) + } + fn remove_connection(&self, id: i32, close: bool) { if close { CLIENTS.write().unwrap().remove(&id); @@ -316,13 +325,14 @@ impl IpcTaskRunner { // for tmp use, without real conn id let mut write_jobs: Vec = Vec::new(); + let is_authorized = self.cm.is_authorized(self.conn_id); #[cfg(windows)] let rx_clip1; let mut rx_clip; let _tx_clip; #[cfg(windows)] - if self.conn_id > 0 && self.authorized { + if is_authorized { rx_clip1 = clipboard::get_rx_cliprdr_server(self.conn_id); rx_clip = rx_clip1.lock().await; } else { @@ -361,7 +371,6 @@ impl IpcTaskRunner { Data::Login{id, is_file_transfer, port_forward, peer_id, name, authorized, keyboard, clipboard, audio, file, file_transfer_enabled: _file_transfer_enabled, restart, recording, from_switch} => { log::debug!("conn_id: {}", id); self.cm.add_connection(id, is_file_transfer, port_forward, peer_id, name, authorized, keyboard, clipboard, audio, file, restart, recording, from_switch,self.tx.clone()); - self.authorized = authorized; self.conn_id = id; #[cfg(windows)] { @@ -413,7 +422,7 @@ impl IpcTaskRunner { if stop { ContextSend::set_is_stopped(); } else { - if !self.authorized { + if !is_authorized { log::debug!("Clipboard message from client peer, but not authorized"); continue; } @@ -469,7 +478,6 @@ impl IpcTaskRunner { } } Data::Authorize => { - self.authorized = true; self.running = true; break; } @@ -514,7 +522,6 @@ impl IpcTaskRunner { rx, close: true, running: true, - authorized: false, conn_id: 0, #[cfg(windows)] file_transfer_enabled: false, From 433059f8a0c0f0f37b939b8bcba518e1c9b19aa1 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 31 Jul 2023 20:56:48 +0800 Subject: [PATCH 252/612] fix, win clipboard, send clipboard message only after first frame is received Signed-off-by: dignow --- src/client/io_loop.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index b4e311227..bb79a2d5e 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -204,7 +204,7 @@ impl Remote { let is_stopping_allowed = clip.is_stopping_allowed(); let server_file_transfer_enabled = *self.handler.server_file_transfer_enabled.read().unwrap(); let file_transfer_enabled = self.handler.lc.read().unwrap().enable_file_transfer.v; - let stop = is_stopping_allowed && !(server_file_transfer_enabled && file_transfer_enabled); + let stop = is_stopping_allowed && (!self.first_frame || !(server_file_transfer_enabled && file_transfer_enabled)); log::debug!("Process clipboard message from system, stop: {}, is_stopping_allowed: {}, server_file_transfer_enabled: {}, file_transfer_enabled: {}", stop, is_stopping_allowed, server_file_transfer_enabled, file_transfer_enabled); if stop { ContextSend::set_is_stopped(); From 4009fd77e853f29808e1bca86482adf29c05ed37 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 31 Jul 2023 21:40:55 +0800 Subject: [PATCH 253/612] init sync file clipboard, local to remote Signed-off-by: dignow --- libs/clipboard/src/lib.rs | 7 ++++ src/client/io_loop.rs | 76 ++++++++++++++++++++++++++----------- src/platform/mod.rs | 5 +++ src/ui_session_interface.rs | 2 +- 4 files changed, 66 insertions(+), 24 deletions(-) diff --git a/libs/clipboard/src/lib.rs b/libs/clipboard/src/lib.rs index 7a5941029..497ce54c8 100644 --- a/libs/clipboard/src/lib.rs +++ b/libs/clipboard/src/lib.rs @@ -70,6 +70,7 @@ struct MsgChannel { lazy_static::lazy_static! { static ref VEC_MSG_CHANNEL: RwLock> = Default::default(); static ref CLIENT_CONN_ID_COUNTER: Mutex = Mutex::new(0); + static ref LAST_FILE_FORMAT_LIST: Arc>> = Default::default(); } impl ClipboardFile { @@ -90,6 +91,11 @@ impl ClipboardFile { } } +#[inline] +pub fn get_last_file_format_list() -> Option { + LAST_FILE_FORMAT_LIST.lock().unwrap().clone() +} + pub fn get_client_conn_id(session_uuid: &SessionID) -> Option { VEC_MSG_CHANNEL .read() @@ -561,6 +567,7 @@ extern "C" fn client_format_list( } log::debug!("client_format_list called, client id: {}, format_list: {:?}", conn_id, &format_list); let data = ClipboardFile::FormatList { format_list }; + *LAST_FILE_FORMAT_LIST.lock().unwrap() = Some(data.clone()); // no need to handle result here if conn_id == 0 { // msg_channel is used for debug, VEC_MSG_CHANNEL cannot be inspected by the debugger. diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index bb79a2d5e..498d022f1 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -6,7 +6,9 @@ use std::sync::{ }; #[cfg(windows)] -use clipboard::{cliprdr::CliprdrClientContext, empty_clipboard, ContextSend}; +use clipboard::{ + cliprdr::CliprdrClientContext, empty_clipboard, get_last_file_format_list, ContextSend, +}; use crossbeam_queue::ArrayQueue; use hbb_common::config::{PeerConfig, TransferSerde}; use hbb_common::fs::{ @@ -56,6 +58,7 @@ pub struct Remote { remove_jobs: HashMap, timer: Interval, last_update_jobs_status: (Instant, HashMap), + is_connected: bool, first_frame: bool, #[cfg(windows)] client_conn_id: i32, // used for file clipboard @@ -90,6 +93,7 @@ impl Remote { remove_jobs: Default::default(), timer: time::interval(SEC30), last_update_jobs_status: (Instant::now(), Default::default()), + is_connected: false, first_frame: false, #[cfg(windows)] client_conn_id: 0, @@ -195,28 +199,7 @@ impl Remote { } _msg = rx_clip_client.recv() => { #[cfg(windows)] - match _msg { - Some(clip) => match clip { - clipboard::ClipboardFile::NotifyCallback{r#type, title, text} => { - self.handler.msgbox(&r#type, &title, &text, ""); - } - _ => { - let is_stopping_allowed = clip.is_stopping_allowed(); - let server_file_transfer_enabled = *self.handler.server_file_transfer_enabled.read().unwrap(); - let file_transfer_enabled = self.handler.lc.read().unwrap().enable_file_transfer.v; - let stop = is_stopping_allowed && (!self.first_frame || !(server_file_transfer_enabled && file_transfer_enabled)); - log::debug!("Process clipboard message from system, stop: {}, is_stopping_allowed: {}, server_file_transfer_enabled: {}, file_transfer_enabled: {}", stop, is_stopping_allowed, server_file_transfer_enabled, file_transfer_enabled); - if stop { - ContextSend::set_is_stopped(); - } else { - allow_err!(peer.send(&crate::clipboard_file::clip_2_msg(clip)).await); - } - } - } - None => { - // unreachable!() - } - } + self.handle_local_clipboard_msg(&mut peer, _msg).await; } _ = self.timer.tick() => { if last_recv_time.elapsed() >= SEC30 { @@ -277,6 +260,44 @@ impl Remote { } } + #[cfg(windows)] + async fn handle_local_clipboard_msg( + &self, + peer: &mut crate::client::FramedStream, + msg: Option, + ) { + match msg { + Some(clip) => match clip { + clipboard::ClipboardFile::NotifyCallback { + r#type, + title, + text, + } => { + self.handler.msgbox(&r#type, &title, &text, ""); + } + _ => { + let is_stopping_allowed = clip.is_stopping_allowed(); + let server_file_transfer_enabled = + *self.handler.server_file_transfer_enabled.read().unwrap(); + let file_transfer_enabled = + self.handler.lc.read().unwrap().enable_file_transfer.v; + let stop = is_stopping_allowed + && (!self.is_connected + || !(server_file_transfer_enabled && file_transfer_enabled)); + log::debug!("Process clipboard message from system, stop: {}, is_stopping_allowed: {}, server_file_transfer_enabled: {}, file_transfer_enabled: {}", stop, is_stopping_allowed, server_file_transfer_enabled, file_transfer_enabled); + if stop { + ContextSend::set_is_stopped(); + } else { + allow_err!(peer.send(&crate::clipboard_file::clip_2_msg(clip)).await); + } + } + }, + None => { + // unreachable!() + } + } + } + fn handle_job_status(&mut self, id: i32, file_num: i32, err: Option) { if let Some(job) = self.remove_jobs.get_mut(&id) { if job.no_confirm { @@ -1030,6 +1051,15 @@ impl Remote { if self.handler.is_file_transfer() { self.handler.load_last_jobs(); } + + self.is_connected = true; + #[cfg(target_os = "windows")] + if self.handler.peer_platform() == crate::platform::PLATFORM_WINDOWS { + if let Some(last_file_format_list) = get_last_file_format_list() { + self.handle_local_clipboard_msg(peer, Some(last_file_format_list)) + .await; + } + } } _ => {} }, diff --git a/src/platform/mod.rs b/src/platform/mod.rs index e962ef9d5..6492e5e25 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -26,6 +26,11 @@ use hbb_common::{message_proto::CursorData, ResultType}; #[cfg(not(any(target_os = "macos", target_os = "android", target_os = "ios")))] const SERVICE_INTERVAL: u64 = 300; +pub const PLATFORM_WINDOWS: &str = "Windows"; +pub const PLATFORM_LINUX: &str = "Linux"; +pub const PLATFORM_MACOS: &str = "Mac OS"; +pub const PLATFORM_ANDROID: &str = "Android"; + pub fn is_xfce() -> bool { #[cfg(target_os = "linux")] { diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index a88a02edb..be0185d30 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -412,7 +412,7 @@ impl Session { pub fn get_path_sep(&self, is_remote: bool) -> &'static str { let p = self.get_platform(is_remote); - if &p == "Windows" { + if &p == crate::platform::PLATFORM_WINDOWS { return "\\"; } else { return "/"; From 4c32bea702b0a532856e0285e690a3708990d545 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 31 Jul 2023 21:57:37 +0800 Subject: [PATCH 254/612] remove system requirement, and remove dialgo --- src/core_main.rs | 52 ++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index 265beb23d..a1f0edecd 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -101,7 +101,6 @@ pub fn core_main() -> Option> { args.clear(); } if args.len() > 0 && args[0] == "--version" { - // not use my_println here, because check super use using this command, no dialog expected println!("{}", crate::VERSION); return None; } @@ -249,49 +248,41 @@ pub fn core_main() -> Option> { return None; } else if args[0] == "--password" { if args.len() == 2 { - if crate::platform::is_installed() - && crate::platform::check_super_user_permission().unwrap_or_default() - { + if crate::platform::is_installed() && is_root() { if let Err(err) = crate::ipc::set_permanent_password(args[1].to_owned()) { - my_println!("{err}"); + println!("{err}"); } else { - my_println!("Done!"); + println!("Done!"); } } else { - my_println!("Installation and administrative privileges required!"); + println!("Installation and administrative privileges required!"); } } return None; } else if args[0] == "--get-id" { - if crate::platform::is_installed() - && crate::platform::check_super_user_permission().unwrap_or_default() - { - my_println!("{}", crate::ipc::get_id()); + if crate::platform::is_installed() && is_root() { + println!("{}", crate::ipc::get_id()); } else { - my_println!("Installation and administrative privileges required!"); + println!("Installation and administrative privileges required!"); } return None; } else if args[0] == "--set-id" { if args.len() == 2 { - if crate::platform::is_installed() - && crate::platform::check_super_user_permission().unwrap_or_default() - { + if crate::platform::is_installed() && is_root() { let old_id = crate::ipc::get_id(); let mut res = crate::ui_interface::change_id_shared(args[1].to_owned(), old_id); if res.is_empty() { res = "Done!".to_owned(); } - my_println!("{}", res); + println!("{}", res); } else { - my_println!("Installation and administrative privileges required!"); + println!("Installation and administrative privileges required!"); } } return None; } else if args[0] == "--config" { if args.len() == 2 && !args[0].contains("host=") { - if crate::platform::is_installed() - && crate::platform::check_super_user_permission().unwrap_or_default() - { + if crate::platform::is_installed() && is_root() { // encrypted string used in renaming exe. let name = if args[1].ends_with(".exe") { args[1].to_owned() @@ -309,22 +300,20 @@ pub fn core_main() -> Option> { } } } else { - my_println!("Installation and administrative privileges required!"); + println!("Installation and administrative privileges required!"); } } return None; } else if args[0] == "--option" { - if crate::platform::is_installed() - && crate::platform::check_super_user_permission().unwrap_or_default() - { + if crate::platform::is_installed() && is_root() { if args.len() == 2 { let options = crate::ipc::get_options(); - my_println!("{}", options.get(&args[1]).unwrap_or(&"".to_owned())); + println!("{}", options.get(&args[1]).unwrap_or(&"".to_owned())); } else if args.len() == 3 { crate::ipc::set_option(&args[1], &args[2]); } } else { - my_println!("Installation and administrative privileges required!"); + println!("Installation and administrative privileges required!"); } return None; } else if args[0] == "--check-hwcodec-config" { @@ -499,3 +488,14 @@ fn try_send_by_dbus(uni_links: String) -> Option> { } } } + +#[cfg(not(any(target_os = "android", target_os = "ios")))] +fn is_root() -> bool { + #[cfg(windows)] + { + return crate::platform::is_elevated(None).unwrap_or_default() + || crate::platform::is_root(); + } + #[allow(unreachable_code)] + crate::platform::is_root() +} From f47f2a91512feba30f0907f08690bbbae2311e75 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 31 Jul 2023 22:08:59 +0800 Subject: [PATCH 255/612] change to inout firewall rule --- src/platform/windows.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index b790fa1a1..029cbac01 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -954,7 +954,7 @@ fn get_after_install(exe: &str) -> String { reg add HKEY_CLASSES_ROOT\\{ext}\\shell\\open /f reg add HKEY_CLASSES_ROOT\\{ext}\\shell\\open\\command /f reg add HKEY_CLASSES_ROOT\\{ext}\\shell\\open\\command /f /ve /t REG_SZ /d \"\\\"{exe}\\\" \\\"%%1\\\"\" - netsh advfirewall firewall add rule name=\"{app_name} Service\" dir=in action=allow program=\"{exe}\" enable=yes + netsh advfirewall firewall add rule name=\"{app_name} Service\" dir=inout action=allow program=\"{exe}\" enable=yes {create_service} reg add HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /f /v SoftwareSASGeneration /t REG_DWORD /d 1 ", create_service=get_create_service(&exe)) From 9ca01b08982d48a3b193234a829fbbd985fb7421 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 31 Jul 2023 22:31:26 +0800 Subject: [PATCH 256/612] Do not sync file clipboard before conn Signed-off-by: dignow --- libs/clipboard/src/lib.rs | 70 +++++++++++++++++++++++++++++---------- src/client/io_loop.rs | 11 +----- 2 files changed, 54 insertions(+), 27 deletions(-) diff --git a/libs/clipboard/src/lib.rs b/libs/clipboard/src/lib.rs index 497ce54c8..fb20615d8 100644 --- a/libs/clipboard/src/lib.rs +++ b/libs/clipboard/src/lib.rs @@ -70,7 +70,6 @@ struct MsgChannel { lazy_static::lazy_static! { static ref VEC_MSG_CHANNEL: RwLock> = Default::default(); static ref CLIENT_CONN_ID_COUNTER: Mutex = Mutex::new(0); - static ref LAST_FILE_FORMAT_LIST: Arc>> = Default::default(); } impl ClipboardFile { @@ -91,11 +90,6 @@ impl ClipboardFile { } } -#[inline] -pub fn get_last_file_format_list() -> Option { - LAST_FILE_FORMAT_LIST.lock().unwrap().clone() -} - pub fn get_client_conn_id(session_uuid: &SessionID) -> Option { VEC_MSG_CHANNEL .read() @@ -187,24 +181,46 @@ pub fn server_clip_file( ClipboardFile::MonitorReady => { log::debug!("server_monitor_ready called"); ret = server_monitor_ready(context, conn_id); - log::debug!("server_monitor_ready called, conn_id {}, return {}", conn_id, ret); + log::debug!( + "server_monitor_ready called, conn_id {}, return {}", + conn_id, + ret + ); } ClipboardFile::FormatList { format_list } => { - log::debug!("server_format_list called, conn_id {}, format_list: {:?}", conn_id, &format_list); + log::debug!( + "server_format_list called, conn_id {}, format_list: {:?}", + conn_id, + &format_list + ); ret = server_format_list(context, conn_id, format_list); - log::debug!("server_format_list called, conn_id {}, return {}", conn_id, ret); + log::debug!( + "server_format_list called, conn_id {}, return {}", + conn_id, + ret + ); } ClipboardFile::FormatListResponse { msg_flags } => { log::debug!("server_format_list_response called"); ret = server_format_list_response(context, conn_id, msg_flags); - log::debug!("server_format_list_response called, conn_id {}, msg_flags {}, return {}", conn_id, msg_flags, ret); + log::debug!( + "server_format_list_response called, conn_id {}, msg_flags {}, return {}", + conn_id, + msg_flags, + ret + ); } ClipboardFile::FormatDataRequest { requested_format_id, } => { log::debug!("server_format_data_request called"); ret = server_format_data_request(context, conn_id, requested_format_id); - log::debug!("server_format_data_request called, conn_id {}, requested_format_id {}, return {}", conn_id, requested_format_id, ret); + log::debug!( + "server_format_data_request called, conn_id {}, requested_format_id {}, return {}", + conn_id, + requested_format_id, + ret + ); } ClipboardFile::FormatDataResponse { msg_flags, @@ -565,9 +581,12 @@ extern "C" fn client_format_list( } conn_id = (*clip_format_list).connID as i32; } - log::debug!("client_format_list called, client id: {}, format_list: {:?}", conn_id, &format_list); + log::debug!( + "client_format_list called, client id: {}, format_list: {:?}", + conn_id, + &format_list + ); let data = ClipboardFile::FormatList { format_list }; - *LAST_FILE_FORMAT_LIST.lock().unwrap() = Some(data.clone()); // no need to handle result here if conn_id == 0 { // msg_channel is used for debug, VEC_MSG_CHANNEL cannot be inspected by the debugger. @@ -592,7 +611,11 @@ extern "C" fn client_format_list_response( conn_id = (*format_list_response).connID as i32; msg_flags = (*format_list_response).msgFlags as i32; } - log::debug!("client_format_list_response called, client id: {}, msg_flags: {}", conn_id, msg_flags); + log::debug!( + "client_format_list_response called, client id: {}, msg_flags: {}", + conn_id, + msg_flags + ); let data = ClipboardFile::FormatListResponse { msg_flags }; send_data(conn_id, data); @@ -612,7 +635,11 @@ extern "C" fn client_format_data_request( let data = ClipboardFile::FormatDataRequest { requested_format_id, }; - log::debug!("client_format_data_request called, conn_id: {}, requested_format_id: {}", conn_id, requested_format_id); + log::debug!( + "client_format_data_request called, conn_id: {}, requested_format_id: {}", + conn_id, + requested_format_id + ); // no need to handle result here send_data(conn_id, data); @@ -639,7 +666,11 @@ extern "C" fn client_format_data_response( .to_vec(); } } - log::debug!("client_format_data_response called, client id: {}, msg_flags: {}", conn_id, msg_flags); + log::debug!( + "client_format_data_response called, client id: {}, msg_flags: {}", + conn_id, + msg_flags + ); let data = ClipboardFile::FormatDataResponse { msg_flags, format_data, @@ -726,7 +757,12 @@ extern "C" fn client_file_contents_response( stream_id, requested_data, }; - log::debug!("client_file_contents_response called, conn_id: {}, msg_flags: {}, stream_id: {}", conn_id, msg_flags, stream_id); + log::debug!( + "client_file_contents_response called, conn_id: {}, msg_flags: {}, stream_id: {}", + conn_id, + msg_flags, + stream_id + ); send_data(conn_id, data); 0 diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 498d022f1..15ce93c32 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -6,9 +6,7 @@ use std::sync::{ }; #[cfg(windows)] -use clipboard::{ - cliprdr::CliprdrClientContext, empty_clipboard, get_last_file_format_list, ContextSend, -}; +use clipboard::{cliprdr::CliprdrClientContext, empty_clipboard, ContextSend}; use crossbeam_queue::ArrayQueue; use hbb_common::config::{PeerConfig, TransferSerde}; use hbb_common::fs::{ @@ -1053,13 +1051,6 @@ impl Remote { } self.is_connected = true; - #[cfg(target_os = "windows")] - if self.handler.peer_platform() == crate::platform::PLATFORM_WINDOWS { - if let Some(last_file_format_list) = get_last_file_format_list() { - self.handle_local_clipboard_msg(peer, Some(last_file_format_list)) - .await; - } - } } _ => {} }, From cc9f69d63bce5dc779564531ece4d6fc752ab510 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Mon, 31 Jul 2023 20:54:05 +0530 Subject: [PATCH 257/612] add wrapper function _get_values_of_seat0_tries for attempts Signed-off-by: Sahil Yeole --- libs/hbb_common/src/platform/linux.rs | 70 +++++++++++++++------------ 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/libs/hbb_common/src/platform/linux.rs b/libs/hbb_common/src/platform/linux.rs index 65d18c701..1d33c36be 100644 --- a/libs/hbb_common/src/platform/linux.rs +++ b/libs/hbb_common/src/platform/linux.rs @@ -124,59 +124,67 @@ fn line_values(indices: &[usize], line: &str) -> Vec { #[inline] pub fn get_values_of_seat0(indices: &[usize]) -> Vec { - _get_values_of_seat0(indices, true, 20) + _get_values_of_seat0_tries(indices, true, 20) } #[inline] pub fn get_values_of_seat0_with_gdm_wayland(indices: &[usize]) -> Vec { - _get_values_of_seat0(indices, false, 20) + _get_values_of_seat0_tries(indices, false, 20) } -fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool, attempts: usize) -> Vec { - for _ in 0..attempts { - if let Ok(output) = run_loginctl(None) { - for line in String::from_utf8_lossy(&output.stdout).lines() { - if line.contains("seat0") { - if let Some(sid) = line.split_whitespace().next() { - if is_active(sid) { - if ignore_gdm_wayland { - if is_gdm_user(line.split_whitespace().nth(2).unwrap_or("")) - && get_display_server_of_session(sid) == DISPLAY_SERVER_WAYLAND - { - continue; - } - } - return line_values(indices, line); - } - } - } - } +fn _get_values_of_seat0_tries(indices: &[usize], ignore_gdm_wayland: bool, attempts: usize) -> Vec { + for _ in 0..attempts{ + let value = _get_values_of_seat0(indices, ignore_gdm_wayland); + if value != line_values(indices, "") { + return value; + } + // Wait for 300ms and try again + std::thread::sleep(std::time::Duration::from_millis(300)); + } + line_values(indices, "") +} - // some case, there is no seat0 https://github.com/rustdesk/rustdesk/issues/73 - for line in String::from_utf8_lossy(&output.stdout).lines() { +fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool) -> Vec { + if let Ok(output) = run_loginctl(None) { + for line in String::from_utf8_lossy(&output.stdout).lines() { + if line.contains("seat0") { if let Some(sid) = line.split_whitespace().next() { if is_active(sid) { - let d = get_display_server_of_session(sid); if ignore_gdm_wayland { if is_gdm_user(line.split_whitespace().nth(2).unwrap_or("")) - && d == DISPLAY_SERVER_WAYLAND + && get_display_server_of_session(sid) == DISPLAY_SERVER_WAYLAND { continue; } } - if d == "tty" { - continue; - } return line_values(indices, line); } } } } - // Wait for 300ms and try again - std::thread::sleep(std::time::Duration::from_millis(300)); + // some case, there is no seat0 https://github.com/rustdesk/rustdesk/issues/73 + for line in String::from_utf8_lossy(&output.stdout).lines() { + if let Some(sid) = line.split_whitespace().next() { + if is_active(sid) { + let d = get_display_server_of_session(sid); + if ignore_gdm_wayland { + if is_gdm_user(line.split_whitespace().nth(2).unwrap_or("")) + && d == DISPLAY_SERVER_WAYLAND + { + continue; + } + } + if d == "tty" { + continue; + } + return line_values(indices, line); + } + } + } } - return line_values(indices, ""); + + line_values(indices, "") } pub fn is_active(sid: &str) -> bool { From 4401ccd6fa8819010f3551daf96f0f8666f0f06d Mon Sep 17 00:00:00 2001 From: SelfRef Date: Tue, 1 Aug 2023 00:36:19 +0200 Subject: [PATCH 258/612] Change icon location in Unix packages --- build.py | 10 +++++----- res/PKGBUILD | 2 +- res/rpm-flutter-suse.spec | 10 +++++----- res/rpm-flutter.spec | 10 +++++----- res/rpm-suse.spec | 8 ++++---- res/rpm.spec | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/build.py b/build.py index d1fdd4aaf..bc72c1e6c 100755 --- a/build.py +++ b/build.py @@ -71,14 +71,14 @@ def parse_rc_features(feature): return 'osx' in platforms else: return 'linux' in platforms - + def get_all_features(): features = [] for (feat, feat_info) in available_features.items(): if platform_check(feat_info['platform']): features.append(feat) return features - + if isinstance(feature, str) and feature.upper() == 'ALL': return get_all_features() elif isinstance(feature, list): @@ -319,7 +319,7 @@ def build_flutter_deb(version, features): system2( 'cp ../res/rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/') system2( - 'cp ../res/128x128@2x.png tmpdeb/usr/share/rustdesk/files/rustdesk.png') + 'cp ../res/128x128@2x.png tmpdeb/usr/share/icons/hicolor/256x256/apps/rustdesk.png') system2( 'cp ../res/rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop') system2( @@ -359,7 +359,7 @@ def build_deb_from_folder(version, binary_folder): system2( 'cp ../res/rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/') system2( - 'cp ../res/128x128@2x.png tmpdeb/usr/share/rustdesk/files/rustdesk.png') + 'cp ../res/128x128@2x.png tmpdeb/usr/share/icons/hicolor/256x256/apps/rustdesk.png') system2( 'cp ../res/rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop') system2( @@ -584,7 +584,7 @@ def main(): system2( 'cp res/rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/') system2( - 'cp res/128x128@2x.png tmpdeb/usr/share/rustdesk/files/rustdesk.png') + 'cp res/128x128@2x.png tmpdeb/usr/share/icons/hicolor/256x256/apps/rustdesk.png') system2( 'cp res/rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop') system2( diff --git a/res/PKGBUILD b/res/PKGBUILD index 9e5b57b9d..6a9ca4094 100644 --- a/res/PKGBUILD +++ b/res/PKGBUILD @@ -30,5 +30,5 @@ package() { install -Dm 644 $HBB/res/rustdesk.service -t "${pkgdir}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/rustdesk.desktop -t "${pkgdir}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/rustdesk-link.desktop -t "${pkgdir}/usr/share/rustdesk/files" - install -Dm 644 $HBB/res/128x128@2x.png "${pkgdir}/usr/share/rustdesk/files/rustdesk.png" + install -Dm 644 $HBB/res/128x128@2x.png "${pkgdir}/usr/share/icons/hicolor/256x256/apps/rustdesk.png" } diff --git a/res/rpm-flutter-suse.spec b/res/rpm-flutter-suse.spec index 9b5131e07..1beb7234f 100644 --- a/res/rpm-flutter-suse.spec +++ b/res/rpm-flutter-suse.spec @@ -1,4 +1,4 @@ -Name: rustdesk +Name: rustdesk Version: 1.2.2 Release: 0 Summary: RPM package @@ -7,7 +7,7 @@ Requires: gtk3 libxcb1 xdotool libXfixes3 alsa-utils libXtst6 libappindicator- Provides: libdesktop_drop_plugin.so()(64bit), libdesktop_multi_window_plugin.so()(64bit), libflutter_custom_cursor_plugin.so()(64bit), libflutter_linux_gtk.so()(64bit), libscreen_retriever_plugin.so()(64bit), libtray_manager_plugin.so()(64bit), liburl_launcher_linux_plugin.so()(64bit), libwindow_manager_plugin.so()(64bit), libwindow_size_plugin.so()(64bit), libtexture_rgba_renderer_plugin.so()(64bit) %description -The best open-source remote desktop client software, written in Rust. +The best open-source remote desktop client software, written in Rust. %prep # we have no source, so nothing here @@ -24,12 +24,12 @@ mkdir -p "%{buildroot}/usr/bin" install -Dm 644 $HBB/res/rustdesk.service -t "%{buildroot}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/rustdesk.desktop -t "%{buildroot}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/rustdesk-link.desktop -t "%{buildroot}/usr/share/rustdesk/files" -install -Dm 644 $HBB/res/128x128@2x.png "%{buildroot}/usr/share/rustdesk/files/rustdesk.png" +install -Dm 644 $HBB/res/128x128@2x.png "%{buildroot}/usr/share/icons/hicolor/256x256/apps/rustdesk.png" %files /usr/lib/rustdesk/* /usr/share/rustdesk/files/rustdesk.service -/usr/share/rustdesk/files/rustdesk.png +/usr/share/icons/hicolor/256x256/apps/rustdesk.png /usr/share/rustdesk/files/rustdesk.desktop /usr/share/rustdesk/files/rustdesk-link.desktop @@ -53,7 +53,7 @@ esac cp /usr/share/rustdesk/files/rustdesk.service /etc/systemd/system/rustdesk.service cp /usr/share/rustdesk/files/rustdesk.desktop /usr/share/applications/ cp /usr/share/rustdesk/files/rustdesk-link.desktop /usr/share/applications/ -ln -s /usr/lib/rustdesk/rustdesk /usr/bin/rustdesk +ln -s /usr/lib/rustdesk/rustdesk /usr/bin/rustdesk systemctl daemon-reload systemctl enable rustdesk systemctl start rustdesk diff --git a/res/rpm-flutter.spec b/res/rpm-flutter.spec index 42009acb0..778e161c7 100644 --- a/res/rpm-flutter.spec +++ b/res/rpm-flutter.spec @@ -1,4 +1,4 @@ -Name: rustdesk +Name: rustdesk Version: 1.2.2 Release: 0 Summary: RPM package @@ -7,7 +7,7 @@ Requires: gtk3 libxcb libxdo libXfixes alsa-lib libappindicator-gtk3 libvdpau Provides: libdesktop_drop_plugin.so()(64bit), libdesktop_multi_window_plugin.so()(64bit), libflutter_custom_cursor_plugin.so()(64bit), libflutter_linux_gtk.so()(64bit), libscreen_retriever_plugin.so()(64bit), libtray_manager_plugin.so()(64bit), liburl_launcher_linux_plugin.so()(64bit), libwindow_manager_plugin.so()(64bit), libwindow_size_plugin.so()(64bit), libtexture_rgba_renderer_plugin.so()(64bit) %description -The best open-source remote desktop client software, written in Rust. +The best open-source remote desktop client software, written in Rust. %prep # we have no source, so nothing here @@ -24,12 +24,12 @@ mkdir -p "%{buildroot}/usr/bin" install -Dm 644 $HBB/res/rustdesk.service -t "%{buildroot}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/rustdesk.desktop -t "%{buildroot}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/rustdesk-link.desktop -t "%{buildroot}/usr/share/rustdesk/files" -install -Dm 644 $HBB/res/128x128@2x.png "%{buildroot}/usr/share/rustdesk/files/rustdesk.png" +install -Dm 644 $HBB/res/128x128@2x.png "%{buildroot}/usr/share/icons/hicolor/256x256/apps/rustdesk.png" %files /usr/lib/rustdesk/* /usr/share/rustdesk/files/rustdesk.service -/usr/share/rustdesk/files/rustdesk.png +/usr/share/icons/hicolor/256x256/apps/rustdesk.png /usr/share/rustdesk/files/rustdesk.desktop /usr/share/rustdesk/files/rustdesk-link.desktop @@ -53,7 +53,7 @@ esac cp /usr/share/rustdesk/files/rustdesk.service /etc/systemd/system/rustdesk.service cp /usr/share/rustdesk/files/rustdesk.desktop /usr/share/applications/ cp /usr/share/rustdesk/files/rustdesk-link.desktop /usr/share/applications/ -ln -s /usr/lib/rustdesk/rustdesk /usr/bin/rustdesk +ln -s /usr/lib/rustdesk/rustdesk /usr/bin/rustdesk systemctl daemon-reload systemctl enable rustdesk systemctl start rustdesk diff --git a/res/rpm-suse.spec b/res/rpm-suse.spec index 8309599b9..ea1b0f231 100644 --- a/res/rpm-suse.spec +++ b/res/rpm-suse.spec @@ -1,4 +1,4 @@ -Name: rustdesk +Name: rustdesk Version: 1.1.9 Release: 0 Summary: RPM package @@ -6,7 +6,7 @@ License: GPL-3.0 Requires: gtk3 libxcb1 xdotool libXfixes3 alsa-utils libXtst6 libayatana-appindicator3-1 libvdpau1 libva2 pam gstreamer-plugins-base gstreamer-plugin-pipewire %description -The best open-source remote desktop client software, written in Rust. +The best open-source remote desktop client software, written in Rust. %prep # we have no source, so nothing here @@ -23,7 +23,7 @@ mkdir -p %{buildroot}/usr/share/rustdesk/files/ install -m 755 $HBB/target/release/rustdesk %{buildroot}/usr/bin/rustdesk install $HBB/libsciter-gtk.so %{buildroot}/usr/lib/rustdesk/libsciter-gtk.so install $HBB/res/rustdesk.service %{buildroot}/usr/share/rustdesk/files/ -install $HBB/res/128x128@2x.png %{buildroot}/usr/share/rustdesk/files/rustdesk.png +install $HBB/res/128x128@2x.png %{buildroot}/usr/share/icons/hicolor/256x256/apps/rustdesk.png install $HBB/res/rustdesk.desktop %{buildroot}/usr/share/rustdesk/files/ install $HBB/res/rustdesk-link.desktop %{buildroot}/usr/share/rustdesk/files/ @@ -31,7 +31,7 @@ install $HBB/res/rustdesk-link.desktop %{buildroot}/usr/share/rustdesk/files/ /usr/bin/rustdesk /usr/lib/rustdesk/libsciter-gtk.so /usr/share/rustdesk/files/rustdesk.service -/usr/share/rustdesk/files/rustdesk.png +/usr/share/icons/hicolor/256x256/apps/rustdesk.png /usr/share/rustdesk/files/rustdesk.desktop /usr/share/rustdesk/files/rustdesk-link.desktop diff --git a/res/rpm.spec b/res/rpm.spec index 6a934b1f2..e9f9849da 100644 --- a/res/rpm.spec +++ b/res/rpm.spec @@ -1,4 +1,4 @@ -Name: rustdesk +Name: rustdesk Version: 1.2.2 Release: 0 Summary: RPM package @@ -6,7 +6,7 @@ License: GPL-3.0 Requires: gtk3 libxcb libxdo libXfixes alsa-lib libappindicator libvdpau1 libva2 pam gstreamer1-plugins-base %description -The best open-source remote desktop client software, written in Rust. +The best open-source remote desktop client software, written in Rust. %prep # we have no source, so nothing here @@ -23,7 +23,7 @@ mkdir -p %{buildroot}/usr/share/rustdesk/files/ install -m 755 $HBB/target/release/rustdesk %{buildroot}/usr/bin/rustdesk install $HBB/libsciter-gtk.so %{buildroot}/usr/lib/rustdesk/libsciter-gtk.so install $HBB/res/rustdesk.service %{buildroot}/usr/share/rustdesk/files/ -install $HBB/res/128x128@2x.png %{buildroot}/usr/share/rustdesk/files/rustdesk.png +install $HBB/res/128x128@2x.png %{buildroot}/usr/share/icons/hicolor/256x256/apps/rustdesk.png install $HBB/res/rustdesk.desktop %{buildroot}/usr/share/rustdesk/files/ install $HBB/res/rustdesk-link.desktop %{buildroot}/usr/share/rustdesk/files/ @@ -31,7 +31,7 @@ install $HBB/res/rustdesk-link.desktop %{buildroot}/usr/share/rustdesk/files/ /usr/bin/rustdesk /usr/lib/rustdesk/libsciter-gtk.so /usr/share/rustdesk/files/rustdesk.service -/usr/share/rustdesk/files/rustdesk.png +/usr/share/icons/hicolor/256x256/apps/rustdesk.png /usr/share/rustdesk/files/rustdesk.desktop /usr/share/rustdesk/files/rustdesk-link.desktop /usr/share/rustdesk/files/__pycache__/* From 8595d3e569dcf4066f5de4f7cbe5c6cbaf4fea4d Mon Sep 17 00:00:00 2001 From: SelfRef Date: Tue, 1 Aug 2023 00:54:21 +0200 Subject: [PATCH 259/612] Add scalable icon for Unix packages --- appimage/AppImageBuilder-aarch64.yml | 1 + appimage/AppImageBuilder-x86_64.yml | 1 + build.py | 6 ++ flatpak/rustdesk.json | 3 +- res/PKGBUILD | 1 + res/rpm-flutter-suse.spec | 2 + res/rpm-flutter.spec | 2 + res/rpm-suse.spec | 2 + res/rpm.spec | 2 + res/scalable.svg | 88 ++++++++++++++++++++++++++++ 10 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 res/scalable.svg diff --git a/appimage/AppImageBuilder-aarch64.yml b/appimage/AppImageBuilder-aarch64.yml index e4cfb723e..b372f4eb9 100644 --- a/appimage/AppImageBuilder-aarch64.yml +++ b/appimage/AppImageBuilder-aarch64.yml @@ -8,6 +8,7 @@ script: - mv ./usr ./AppDir/usr # 32x32 icon - for i in {32,64,128}; do mkdir -p ./AppDir/usr/share/icons/hicolor/$i\x$i/apps/; cp ../res/$i\x$i.png ./AppDir/usr/share/icons/hicolor/$i\x$i/apps/rustdesk.png; done + - mkdir -p ./AppDir/usr/share/icons/hicolor/scalable/apps/; cp ../res/scalable.svg ./AppDir/usr/share/icons/hicolor/scalable/apps/rustdesk.svg # desktop file # - sed -i "s/Icon=\/usr\/share\/rustdesk\/files\/rustdesk.png/Icon=rustdesk/g" ./AppDir/usr/share/applications/rustdesk.desktop - rm -rf ./AppDir/usr/share/applications diff --git a/appimage/AppImageBuilder-x86_64.yml b/appimage/AppImageBuilder-x86_64.yml index 1a443dc34..9a4054b62 100644 --- a/appimage/AppImageBuilder-x86_64.yml +++ b/appimage/AppImageBuilder-x86_64.yml @@ -8,6 +8,7 @@ script: - mv ./usr ./AppDir/usr # 32x32 icon - for i in {32,64,128}; do mkdir -p ./AppDir/usr/share/icons/hicolor/$i\x$i/apps/; cp ../res/$i\x$i.png ./AppDir/usr/share/icons/hicolor/$i\x$i/apps/rustdesk.png; done + - mkdir -p ./AppDir/usr/share/icons/hicolor/scalable/apps/; cp ../res/scalable.svg ./AppDir/usr/share/icons/hicolor/scalable/apps/rustdesk.svg # desktop file # - sed -i "s/Icon=\/usr\/share\/rustdesk\/files\/rustdesk.png/Icon=rustdesk/g" ./AppDir/usr/share/applications/rustdesk.desktop - rm -rf ./AppDir/usr/share/applications diff --git a/build.py b/build.py index bc72c1e6c..98d8aa30f 100755 --- a/build.py +++ b/build.py @@ -320,6 +320,8 @@ def build_flutter_deb(version, features): 'cp ../res/rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/') system2( 'cp ../res/128x128@2x.png tmpdeb/usr/share/icons/hicolor/256x256/apps/rustdesk.png') + system2( + 'cp ../res/scalable.svg tmpdeb/usr/share/icons/hicolor/scalable/apps/rustdesk.svg') system2( 'cp ../res/rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop') system2( @@ -360,6 +362,8 @@ def build_deb_from_folder(version, binary_folder): 'cp ../res/rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/') system2( 'cp ../res/128x128@2x.png tmpdeb/usr/share/icons/hicolor/256x256/apps/rustdesk.png') + system2( + 'cp ../res/scalable.svg tmpdeb/usr/share/icons/hicolor/scalable/apps/rustdesk.svg') system2( 'cp ../res/rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop') system2( @@ -585,6 +589,8 @@ def main(): 'cp res/rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/') system2( 'cp res/128x128@2x.png tmpdeb/usr/share/icons/hicolor/256x256/apps/rustdesk.png') + system2( + 'cp res/scalable.svg tmpdeb/usr/share/icons/hicolor/scalable/apps/rustdesk.svg') system2( 'cp res/rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop') system2( diff --git a/flatpak/rustdesk.json b/flatpak/rustdesk.json index ff7701d27..4a8334fc9 100644 --- a/flatpak/rustdesk.json +++ b/flatpak/rustdesk.json @@ -4,7 +4,7 @@ "runtime-version": "21.08", "sdk": "org.freedesktop.Sdk", "command": "rustdesk", - "icon": "share/rustdesk/files/rustdesk.png", + "icon": "share/icons/hicolor/scalable/apps/rustdesk.svg", "modules": [ "shared-modules/libappindicator/libappindicator-gtk3-12.10.json", "xdotool.json", @@ -19,6 +19,7 @@ "mv /app/share/applications/rustdesk.desktop /app/share/applications/com.rustdesk.RustDesk.desktop", "sed -i '/^Icon=/ c\\Icon=com.rustdesk.RustDesk' /app/share/applications/com.rustdesk.RustDesk.desktop", "sed -i '/^Icon=/ c\\Icon=com.rustdesk.RustDesk' /app/share/applications/rustdesk-link.desktop", + "mv /app/share/icons/hicolor/scalable/apps/rustdesk.svg /app/share/icons/hicolor/scalable/apps/com.rustdesk.RustDesk.svg", "for size in 16 24 32 48 64 128 256 512; do\n rsvg-convert -w $size -h $size -f png -o $size.png logo.svg\n install -Dm644 $size.png /app/share/icons/hicolor/${size}x${size}/apps/com.rustdesk.RustDesk.png\n done" ], "cleanup": ["/include", "/lib/pkgconfig", "/share/gtk-doc"], diff --git a/res/PKGBUILD b/res/PKGBUILD index 6a9ca4094..4d3911b3b 100644 --- a/res/PKGBUILD +++ b/res/PKGBUILD @@ -31,4 +31,5 @@ package() { install -Dm 644 $HBB/res/rustdesk.desktop -t "${pkgdir}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/rustdesk-link.desktop -t "${pkgdir}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/128x128@2x.png "${pkgdir}/usr/share/icons/hicolor/256x256/apps/rustdesk.png" + install -Dm 644 $HBB/res/scalable.svg "${pkgdir}/usr/share/icons/hicolor/scalable/apps/rustdesk.svg" } diff --git a/res/rpm-flutter-suse.spec b/res/rpm-flutter-suse.spec index 1beb7234f..08080424c 100644 --- a/res/rpm-flutter-suse.spec +++ b/res/rpm-flutter-suse.spec @@ -25,11 +25,13 @@ install -Dm 644 $HBB/res/rustdesk.service -t "%{buildroot}/usr/share/rustdesk/fi install -Dm 644 $HBB/res/rustdesk.desktop -t "%{buildroot}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/rustdesk-link.desktop -t "%{buildroot}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/128x128@2x.png "%{buildroot}/usr/share/icons/hicolor/256x256/apps/rustdesk.png" +install -Dm 644 $HBB/res/scalable.svg "%{buildroot}/usr/share/icons/hicolor/scalable/apps/rustdesk.svg" %files /usr/lib/rustdesk/* /usr/share/rustdesk/files/rustdesk.service /usr/share/icons/hicolor/256x256/apps/rustdesk.png +/usr/share/icons/hicolor/scalable/apps/rustdesk.svg /usr/share/rustdesk/files/rustdesk.desktop /usr/share/rustdesk/files/rustdesk-link.desktop diff --git a/res/rpm-flutter.spec b/res/rpm-flutter.spec index 778e161c7..5b4899bff 100644 --- a/res/rpm-flutter.spec +++ b/res/rpm-flutter.spec @@ -25,11 +25,13 @@ install -Dm 644 $HBB/res/rustdesk.service -t "%{buildroot}/usr/share/rustdesk/fi install -Dm 644 $HBB/res/rustdesk.desktop -t "%{buildroot}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/rustdesk-link.desktop -t "%{buildroot}/usr/share/rustdesk/files" install -Dm 644 $HBB/res/128x128@2x.png "%{buildroot}/usr/share/icons/hicolor/256x256/apps/rustdesk.png" +install -Dm 644 $HBB/res/scalable.svg "%{buildroot}/usr/share/icons/hicolor/scalable/apps/rustdesk.svg" %files /usr/lib/rustdesk/* /usr/share/rustdesk/files/rustdesk.service /usr/share/icons/hicolor/256x256/apps/rustdesk.png +/usr/share/icons/hicolor/scalable/apps/rustdesk.svg /usr/share/rustdesk/files/rustdesk.desktop /usr/share/rustdesk/files/rustdesk-link.desktop diff --git a/res/rpm-suse.spec b/res/rpm-suse.spec index ea1b0f231..6d190da32 100644 --- a/res/rpm-suse.spec +++ b/res/rpm-suse.spec @@ -24,6 +24,7 @@ install -m 755 $HBB/target/release/rustdesk %{buildroot}/usr/bin/rustdesk install $HBB/libsciter-gtk.so %{buildroot}/usr/lib/rustdesk/libsciter-gtk.so install $HBB/res/rustdesk.service %{buildroot}/usr/share/rustdesk/files/ install $HBB/res/128x128@2x.png %{buildroot}/usr/share/icons/hicolor/256x256/apps/rustdesk.png +install $HBB/res/scalable.svg %{buildroot}/usr/share/icons/hicolor/scalable/apps/rustdesk.svg install $HBB/res/rustdesk.desktop %{buildroot}/usr/share/rustdesk/files/ install $HBB/res/rustdesk-link.desktop %{buildroot}/usr/share/rustdesk/files/ @@ -32,6 +33,7 @@ install $HBB/res/rustdesk-link.desktop %{buildroot}/usr/share/rustdesk/files/ /usr/lib/rustdesk/libsciter-gtk.so /usr/share/rustdesk/files/rustdesk.service /usr/share/icons/hicolor/256x256/apps/rustdesk.png +/usr/share/icons/hicolor/scalable/apps/rustdesk.svg /usr/share/rustdesk/files/rustdesk.desktop /usr/share/rustdesk/files/rustdesk-link.desktop diff --git a/res/rpm.spec b/res/rpm.spec index e9f9849da..ff28a621b 100644 --- a/res/rpm.spec +++ b/res/rpm.spec @@ -24,6 +24,7 @@ install -m 755 $HBB/target/release/rustdesk %{buildroot}/usr/bin/rustdesk install $HBB/libsciter-gtk.so %{buildroot}/usr/lib/rustdesk/libsciter-gtk.so install $HBB/res/rustdesk.service %{buildroot}/usr/share/rustdesk/files/ install $HBB/res/128x128@2x.png %{buildroot}/usr/share/icons/hicolor/256x256/apps/rustdesk.png +install $HBB/res/scalable.svg %{buildroot}/usr/share/icons/hicolor/scalable/apps/rustdesk.svg install $HBB/res/rustdesk.desktop %{buildroot}/usr/share/rustdesk/files/ install $HBB/res/rustdesk-link.desktop %{buildroot}/usr/share/rustdesk/files/ @@ -32,6 +33,7 @@ install $HBB/res/rustdesk-link.desktop %{buildroot}/usr/share/rustdesk/files/ /usr/lib/rustdesk/libsciter-gtk.so /usr/share/rustdesk/files/rustdesk.service /usr/share/icons/hicolor/256x256/apps/rustdesk.png +/usr/share/icons/hicolor/scalable/apps/rustdesk.svg /usr/share/rustdesk/files/rustdesk.desktop /usr/share/rustdesk/files/rustdesk-link.desktop /usr/share/rustdesk/files/__pycache__/* diff --git a/res/scalable.svg b/res/scalable.svg new file mode 100644 index 000000000..50cab67a3 --- /dev/null +++ b/res/scalable.svg @@ -0,0 +1,88 @@ + + From 897bfbaf0ec647ba81b37306ab966c583272fa55 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 1 Aug 2023 09:38:19 +0800 Subject: [PATCH 260/612] use 20 tries as what in seat:` --- src/platform/linux.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index b43c06e87..cda26ea10 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -921,7 +921,7 @@ mod desktop { fn get_display(&mut self) { let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; for diplay_env in display_envs { - self.display = get_env_tries("DISPLAY", &self.uid, diplay_env, 10); + self.display = get_env_tries("DISPLAY", &self.uid, diplay_env, 20); if !self.display.is_empty() { break; } @@ -984,7 +984,7 @@ mod desktop { // try by direct access to window manager process by name let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; for diplay_env in display_envs { - self.xauth = get_env_tries("XAUTHORITY", &self.uid, diplay_env, 10); + self.xauth = get_env_tries("XAUTHORITY", &self.uid, diplay_env, 20); if !self.xauth.is_empty() { break; } From e978d1d0fd4fc2ab21182f3baebc139311260ea0 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 1 Aug 2023 09:56:46 +0800 Subject: [PATCH 261/612] fix build Signed-off-by: dignow --- src/common.rs | 5 +++++ src/platform/mod.rs | 5 ----- src/ui_session_interface.rs | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/common.rs b/src/common.rs index efda69dbd..cadf7330d 100644 --- a/src/common.rs +++ b/src/common.rs @@ -49,6 +49,11 @@ pub const DST_STRIDE_RGBA: usize = 1; // the executable name of the portable version pub const PORTABLE_APPNAME_RUNTIME_ENV_KEY: &str = "RUSTDESK_APPNAME"; +pub const PLATFORM_WINDOWS: &str = "Windows"; +pub const PLATFORM_LINUX: &str = "Linux"; +pub const PLATFORM_MACOS: &str = "Mac OS"; +pub const PLATFORM_ANDROID: &str = "Android"; + pub mod input { pub const MOUSE_TYPE_MOVE: i32 = 0; pub const MOUSE_TYPE_DOWN: i32 = 1; diff --git a/src/platform/mod.rs b/src/platform/mod.rs index 6492e5e25..e962ef9d5 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -26,11 +26,6 @@ use hbb_common::{message_proto::CursorData, ResultType}; #[cfg(not(any(target_os = "macos", target_os = "android", target_os = "ios")))] const SERVICE_INTERVAL: u64 = 300; -pub const PLATFORM_WINDOWS: &str = "Windows"; -pub const PLATFORM_LINUX: &str = "Linux"; -pub const PLATFORM_MACOS: &str = "Mac OS"; -pub const PLATFORM_ANDROID: &str = "Android"; - pub fn is_xfce() -> bool { #[cfg(target_os = "linux")] { diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index be0185d30..effd293a6 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -412,7 +412,7 @@ impl Session { pub fn get_path_sep(&self, is_remote: bool) -> &'static str { let p = self.get_platform(is_remote); - if &p == crate::platform::PLATFORM_WINDOWS { + if &p == crate::PLATFORM_WINDOWS { return "\\"; } else { return "/"; From 6c475bf02a1d83bb88e720165fa1cdca14e295e3 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 1 Aug 2023 12:45:44 +0800 Subject: [PATCH 262/612] opt _OptionCheckBox reaction Signed-off-by: 21pages --- flutter/lib/desktop/pages/desktop_setting_page.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index b3dc960d8..db3840918 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -1671,13 +1671,11 @@ Widget _OptionCheckBox(BuildContext context, String label, String key, var ref = value.obs; onChanged(option) async { if (option != null) { + ref.value = option; if (reverse) option = !option; isServer ? await mainSetBoolOption(key, option) : await mainSetLocalBoolOption(key, option); - ref.value = isServer - ? mainGetBoolOptionSync(key) - : mainGetLocalBoolOptionSync(key); ; update?.call(); } From d59be68e52f6eaa492679fcdf3258b55058c6fd6 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 1 Aug 2023 15:57:38 +0800 Subject: [PATCH 263/612] Fix check main args Signed-off-by: dignow --- src/core_main.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core_main.rs b/src/core_main.rs index a1f0edecd..cbcb0b474 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -147,7 +147,9 @@ pub fn core_main() -> Option> { #[cfg(all(feature = "flutter", feature = "plugin_framework"))] #[cfg(not(any(target_os = "android", target_os = "ios")))] init_plugins(&args); - if args.is_empty() { + log::info!("main start args:{:?}", args); + let empty_uni_link = "rustdesk:///"; + if args.is_empty() || args[0] == empty_uni_link { #[cfg(windows)] clipboard::ContextSend::enable(true); std::thread::spawn(move || crate::start_server(false)); From 7640a51726ca6c1a91f911b0858faf88f50ea78c Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 1 Aug 2023 17:10:21 +0800 Subject: [PATCH 264/612] check empty uni link arg Signed-off-by: dignow --- src/core_main.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index cbcb0b474..cf66255ca 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -18,6 +18,14 @@ macro_rules! my_println{ }; } +#[inline] +fn is_empty_uni_link(arg: &str) -> bool { + if !arg.starts_with("rustdesk://") { + return false; + } + arg["rustdesk://".len()..].chars().all(|c| c == '/') +} + /// shared by flutter and sciter main function /// /// [Note] @@ -141,6 +149,7 @@ pub fn core_main() -> Option> { } #[cfg(windows)] if !crate::platform::is_installed() && (_is_elevate || _is_run_as_system) { + clipboard::ContextSend::enable(true); crate::platform::elevate_or_run_as_system(click_setup, _is_elevate, _is_run_as_system); return None; } @@ -148,8 +157,7 @@ pub fn core_main() -> Option> { #[cfg(not(any(target_os = "android", target_os = "ios")))] init_plugins(&args); log::info!("main start args:{:?}", args); - let empty_uni_link = "rustdesk:///"; - if args.is_empty() || args[0] == empty_uni_link { + if args.is_empty() || is_empty_uni_link(&args[0]) { #[cfg(windows)] clipboard::ContextSend::enable(true); std::thread::spawn(move || crate::start_server(false)); From 2ffc528986566cbdfd8edeb06a52d653c963d70c Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 1 Aug 2023 20:12:56 +0800 Subject: [PATCH 265/612] refact, win file clipboard enable Signed-off-by: dignow --- src/core_main.rs | 3 --- src/ui_session_interface.rs | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index cf66255ca..14dbadf68 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -149,7 +149,6 @@ pub fn core_main() -> Option> { } #[cfg(windows)] if !crate::platform::is_installed() && (_is_elevate || _is_run_as_system) { - clipboard::ContextSend::enable(true); crate::platform::elevate_or_run_as_system(click_setup, _is_elevate, _is_run_as_system); return None; } @@ -158,8 +157,6 @@ pub fn core_main() -> Option> { init_plugins(&args); log::info!("main start args:{:?}", args); if args.is_empty() || is_empty_uni_link(&args[0]) { - #[cfg(windows)] - clipboard::ContextSend::enable(true); std::thread::spawn(move || crate::start_server(false)); } else { #[cfg(windows)] diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index effd293a6..fc00c64c8 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -1185,6 +1185,10 @@ impl Session { #[tokio::main(flavor = "current_thread")] pub async fn io_loop(handler: Session) { + // It is ok to call this function multiple times. + #[cfg(target_os ="windows")] + clipboard::ContextSend::enable(true); + #[cfg(any(target_os = "android", target_os = "ios"))] let (sender, receiver) = mpsc::unbounded_channel::(); #[cfg(not(any(target_os = "android", target_os = "ios")))] From a7e73df801f428c724bcdf4b1dc2ada798bc52e8 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 1 Aug 2023 20:15:37 +0800 Subject: [PATCH 266/612] simple change Signed-off-by: dignow --- src/ui_session_interface.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index fc00c64c8..33cfa2ced 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -1187,7 +1187,9 @@ impl Session { pub async fn io_loop(handler: Session) { // It is ok to call this function multiple times. #[cfg(target_os ="windows")] - clipboard::ContextSend::enable(true); + if !handler.is_file_transfer() && !handler.is_port_forward() { + clipboard::ContextSend::enable(true); + } #[cfg(any(target_os = "android", target_os = "ios"))] let (sender, receiver) = mpsc::unbounded_channel::(); From 4ecbf7aec6ff1ff64b1ff5ebf2519aa257eb4cab Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 1 Aug 2023 21:26:40 +0800 Subject: [PATCH 267/612] win clipboard context, use ref instead of box ref Signed-off-by: dignow --- libs/clipboard/src/context_send.rs | 9 ++---- libs/clipboard/src/lib.rs | 48 +++++++++++++++--------------- src/client/io_loop.rs | 4 +-- src/ui_cm_interface.rs | 4 +-- 4 files changed, 30 insertions(+), 35 deletions(-) diff --git a/libs/clipboard/src/context_send.rs b/libs/clipboard/src/context_send.rs index 76f8e4d7a..a2053d852 100644 --- a/libs/clipboard/src/context_send.rs +++ b/libs/clipboard/src/context_send.rs @@ -57,15 +57,10 @@ impl ContextSend { } } - pub fn proc) -> u32>(f: F) -> u32 { + pub fn proc u32>(f: F) -> u32 { let lock = CONTEXT_SEND.addr.lock().unwrap(); if *lock != 0 { - unsafe { - let mut context = Box::from_raw(*lock as *mut CliprdrClientContext); - let code = f(&mut context); - std::mem::forget(context); - code - } + unsafe { f(&mut *(*lock as *mut CliprdrClientContext)) } } else { 0 } diff --git a/libs/clipboard/src/lib.rs b/libs/clipboard/src/lib.rs index fb20615d8..dc6892d61 100644 --- a/libs/clipboard/src/lib.rs +++ b/libs/clipboard/src/lib.rs @@ -164,12 +164,12 @@ fn send_data(conn_id: i32, data: ClipboardFile) { } } -pub fn empty_clipboard(context: &mut Box, conn_id: i32) -> bool { - unsafe { TRUE == cliprdr::empty_cliprdr(&mut (**context), conn_id as u32) } +pub fn empty_clipboard(context: &mut CliprdrClientContext, conn_id: i32) -> bool { + unsafe { TRUE == cliprdr::empty_cliprdr(context, conn_id as u32) } } pub fn server_clip_file( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, msg: ClipboardFile, ) -> u32 { @@ -294,7 +294,7 @@ pub fn server_clip_file( ret } -pub fn server_monitor_ready(context: &mut Box, conn_id: i32) -> u32 { +pub fn server_monitor_ready(context: &mut CliprdrClientContext, conn_id: i32) -> u32 { unsafe { let monitor_ready = CLIPRDR_MONITOR_READY { connID: conn_id as UINT32, @@ -302,8 +302,8 @@ pub fn server_monitor_ready(context: &mut Box, conn_id: i3 msgFlags: 0 as UINT16, dataLen: 0 as UINT32, }; - if let Some(f) = (**context).MonitorReady { - let ret = f(&mut (**context), &monitor_ready); + if let Some(f) = context.MonitorReady { + let ret = f(context, &monitor_ready); ret as u32 } else { ERR_CODE_SERVER_FUNCTION_NONE @@ -312,7 +312,7 @@ pub fn server_monitor_ready(context: &mut Box, conn_id: i3 } pub fn server_format_list( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, format_list: Vec<(i32, String)>, ) -> u32 { @@ -348,8 +348,8 @@ pub fn server_format_list( formats: formats.as_mut_ptr(), }; - let ret = if let Some(f) = (**context).ServerFormatList { - f(&mut (**context), &format_list) + let ret = if let Some(f) = context.ServerFormatList { + f(context, &format_list) } else { ERR_CODE_SERVER_FUNCTION_NONE }; @@ -366,7 +366,7 @@ pub fn server_format_list( } pub fn server_format_list_response( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, msg_flags: i32, ) -> u32 { @@ -378,8 +378,8 @@ pub fn server_format_list_response( dataLen: 0 as UINT32, }; - if let Some(f) = (**context).ServerFormatListResponse { - f(&mut (**context), &format_list_response) + if let Some(f) = context.ServerFormatListResponse { + f(context, &format_list_response) } else { ERR_CODE_SERVER_FUNCTION_NONE } @@ -387,7 +387,7 @@ pub fn server_format_list_response( } pub fn server_format_data_request( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, requested_format_id: i32, ) -> u32 { @@ -399,8 +399,8 @@ pub fn server_format_data_request( dataLen: 0 as UINT32, requestedFormatId: requested_format_id as UINT32, }; - if let Some(f) = (**context).ServerFormatDataRequest { - f(&mut (**context), &format_data_request) + if let Some(f) = context.ServerFormatDataRequest { + f(context, &format_data_request) } else { ERR_CODE_SERVER_FUNCTION_NONE } @@ -408,7 +408,7 @@ pub fn server_format_data_request( } pub fn server_format_data_response( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, msg_flags: i32, mut format_data: Vec, @@ -421,8 +421,8 @@ pub fn server_format_data_response( dataLen: format_data.len() as UINT32, requestedFormatData: format_data.as_mut_ptr(), }; - if let Some(f) = (**context).ServerFormatDataResponse { - f(&mut (**context), &format_data_response) + if let Some(f) = context.ServerFormatDataResponse { + f(context, &format_data_response) } else { ERR_CODE_SERVER_FUNCTION_NONE } @@ -430,7 +430,7 @@ pub fn server_format_data_response( } pub fn server_file_contents_request( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, stream_id: i32, list_index: i32, @@ -456,8 +456,8 @@ pub fn server_file_contents_request( haveClipDataId: if have_clip_data_id { TRUE } else { FALSE }, clipDataId: clip_data_id as UINT32, }; - if let Some(f) = (**context).ServerFileContentsRequest { - f(&mut (**context), &file_contents_request) + if let Some(f) = context.ServerFileContentsRequest { + f(context, &file_contents_request) } else { ERR_CODE_SERVER_FUNCTION_NONE } @@ -465,7 +465,7 @@ pub fn server_file_contents_request( } pub fn server_file_contents_response( - context: &mut Box, + context: &mut CliprdrClientContext, conn_id: i32, msg_flags: i32, stream_id: i32, @@ -481,8 +481,8 @@ pub fn server_file_contents_response( cbRequested: requested_data.len() as UINT32, requestedData: requested_data.as_mut_ptr(), }; - if let Some(f) = (**context).ServerFileContentsResponse { - f(&mut (**context), &file_contents_response) + if let Some(f) = context.ServerFileContentsResponse { + f(context, &file_contents_response) } else { ERR_CODE_SERVER_FUNCTION_NONE } diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 15ce93c32..82c3794bb 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -251,7 +251,7 @@ impl Remote { #[cfg(windows)] { let conn_id = self.client_conn_id; - ContextSend::proc(|context: &mut Box| -> u32 { + ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 { empty_clipboard(context, conn_id); 0 }); @@ -1624,7 +1624,7 @@ impl Remote { "Process clipboard message from server peer, stop: {}, is_stopping_allowed: {}, file_transfer_enabled: {}", stop, is_stopping_allowed, file_transfer_enabled); if !stop { - ContextSend::proc(|context: &mut Box| -> u32 { + ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 { clipboard::server_clip_file(context, self.client_conn_id, clip) }); } diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 78949b0b5..29828d6b7 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -184,7 +184,7 @@ impl ConnectionManager { #[cfg(windows)] { - ContextSend::proc(|context: &mut Box| -> u32 { + ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 { empty_clipboard(context, id); 0 }); @@ -427,7 +427,7 @@ impl IpcTaskRunner { continue; } let conn_id = self.conn_id; - ContextSend::proc(|context: &mut Box| -> u32 { + ContextSend::proc(|context: &mut CliprdrClientContext| -> u32 { clipboard::server_clip_file(context, conn_id, _clip) }); } From e148cc7e51f805eb9979f13b4bd3436e23245c59 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 1 Aug 2023 22:24:13 +0800 Subject: [PATCH 268/612] fix issue #5224 --- flutter/lib/common/widgets/peer_card.dart | 4 ---- 1 file changed, 4 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index a73454040..2c2552439 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -797,7 +797,6 @@ class RecentPeerCard extends BasePeerCard { if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); } - menuItems.add(_wolAction(peer.id)); if (Platform.isWindows) { menuItems.add(_createShortCutAction(peer.id)); } @@ -849,7 +848,6 @@ class FavoritePeerCard extends BasePeerCard { if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); } - menuItems.add(_wolAction(peer.id)); if (Platform.isWindows) { menuItems.add(_createShortCutAction(peer.id)); } @@ -950,7 +948,6 @@ class AddressBookPeerCard extends BasePeerCard { if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); } - menuItems.add(_wolAction(peer.id)); if (Platform.isWindows) { menuItems.add(_createShortCutAction(peer.id)); } @@ -1090,7 +1087,6 @@ class MyGroupPeerCard extends BasePeerCard { if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); } - menuItems.add(_wolAction(peer.id)); if (Platform.isWindows) { menuItems.add(_createShortCutAction(peer.id)); } From 5cb4413655f06b1e5c40bdb1b686b30d5f1cc749 Mon Sep 17 00:00:00 2001 From: SelfRef Date: Tue, 1 Aug 2023 19:33:06 +0200 Subject: [PATCH 269/612] Add missing dirs --- build.py | 6 ++++++ res/rpm-suse.spec | 2 ++ res/rpm.spec | 2 ++ 3 files changed, 10 insertions(+) diff --git a/build.py b/build.py index 98d8aa30f..378cce940 100755 --- a/build.py +++ b/build.py @@ -311,6 +311,8 @@ def build_flutter_deb(version, features): system2('mkdir -p tmpdeb/etc/rustdesk/') system2('mkdir -p tmpdeb/etc/pam.d/') system2('mkdir -p tmpdeb/usr/share/rustdesk/files/systemd/') + system2('mkdir -p tmpdeb/usr/share/icons/hicolor/256x256/apps/') + system2('mkdir -p tmpdeb/usr/share/icons/hicolor/scalable/apps/') system2('mkdir -p tmpdeb/usr/share/applications/') system2('mkdir -p tmpdeb/usr/share/polkit-1/actions') system2('rm tmpdeb/usr/bin/rustdesk || true') @@ -353,6 +355,8 @@ def build_deb_from_folder(version, binary_folder): system2('mkdir -p tmpdeb/usr/bin/') system2('mkdir -p tmpdeb/usr/lib/rustdesk') system2('mkdir -p tmpdeb/usr/share/rustdesk/files/systemd/') + system2('mkdir -p tmpdeb/usr/share/icons/hicolor/256x256/apps/') + system2('mkdir -p tmpdeb/usr/share/icons/hicolor/scalable/apps/') system2('mkdir -p tmpdeb/usr/share/applications/') system2('mkdir -p tmpdeb/usr/share/polkit-1/actions') system2('rm tmpdeb/usr/bin/rustdesk || true') @@ -585,6 +589,8 @@ def main(): 'mv target/release/bundle/deb/rustdesk*.deb ./rustdesk.deb') system2('dpkg-deb -R rustdesk.deb tmpdeb') system2('mkdir -p tmpdeb/usr/share/rustdesk/files/systemd/') + system2('mkdir -p tmpdeb/usr/share/icons/hicolor/256x256/apps/') + system2('mkdir -p tmpdeb/usr/share/icons/hicolor/scalable/apps/') system2( 'cp res/rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/') system2( diff --git a/res/rpm-suse.spec b/res/rpm-suse.spec index 6d190da32..d84e14812 100644 --- a/res/rpm-suse.spec +++ b/res/rpm-suse.spec @@ -20,6 +20,8 @@ The best open-source remote desktop client software, written in Rust. mkdir -p %{buildroot}/usr/bin/ mkdir -p %{buildroot}/usr/lib/rustdesk/ mkdir -p %{buildroot}/usr/share/rustdesk/files/ +mkdir -p %{buildroot}/usr/share/icons/hicolor/256x256/apps/ +mkdir -p %{buildroot}/usr/share/icons/hicolor/scalable/apps/ install -m 755 $HBB/target/release/rustdesk %{buildroot}/usr/bin/rustdesk install $HBB/libsciter-gtk.so %{buildroot}/usr/lib/rustdesk/libsciter-gtk.so install $HBB/res/rustdesk.service %{buildroot}/usr/share/rustdesk/files/ diff --git a/res/rpm.spec b/res/rpm.spec index ff28a621b..6ce788ae7 100644 --- a/res/rpm.spec +++ b/res/rpm.spec @@ -20,6 +20,8 @@ The best open-source remote desktop client software, written in Rust. mkdir -p %{buildroot}/usr/bin/ mkdir -p %{buildroot}/usr/lib/rustdesk/ mkdir -p %{buildroot}/usr/share/rustdesk/files/ +mkdir -p %{buildroot}/usr/share/icons/hicolor/256x256/apps/ +mkdir -p %{buildroot}/usr/share/icons/hicolor/scalable/apps/ install -m 755 $HBB/target/release/rustdesk %{buildroot}/usr/bin/rustdesk install $HBB/libsciter-gtk.so %{buildroot}/usr/lib/rustdesk/libsciter-gtk.so install $HBB/res/rustdesk.service %{buildroot}/usr/share/rustdesk/files/ From 7cd12f151c3a486be690907ce860a634a75fcc8a Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 2 Aug 2023 10:28:34 +0800 Subject: [PATCH 270/612] it seems firewall has no dir=inout, change to two rule for safety --- src/platform/windows.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 029cbac01..1a0ce6711 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -954,7 +954,8 @@ fn get_after_install(exe: &str) -> String { reg add HKEY_CLASSES_ROOT\\{ext}\\shell\\open /f reg add HKEY_CLASSES_ROOT\\{ext}\\shell\\open\\command /f reg add HKEY_CLASSES_ROOT\\{ext}\\shell\\open\\command /f /ve /t REG_SZ /d \"\\\"{exe}\\\" \\\"%%1\\\"\" - netsh advfirewall firewall add rule name=\"{app_name} Service\" dir=inout action=allow program=\"{exe}\" enable=yes + netsh advfirewall firewall add rule name=\"{app_name} Service\" dir=out action=allow program=\"{exe}\" enable=yes + netsh advfirewall firewall add rule name=\"{app_name} Service\" dir=in action=allow program=\"{exe}\" enable=yes {create_service} reg add HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System /f /v SoftwareSASGeneration /t REG_DWORD /d 1 ", create_service=get_create_service(&exe)) From e12717fe5f47ca8cf1688cc26a80d7874df9f94e Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 2 Aug 2023 19:48:33 +0800 Subject: [PATCH 271/612] --assign --- src/core_main.rs | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/core_main.rs b/src/core_main.rs index 14dbadf68..a6088d6b2 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -323,6 +323,55 @@ pub fn core_main() -> Option> { println!("Installation and administrative privileges required!"); } return None; + } else if args[0] == "--assign" { + if crate::platform::is_installed() && is_root() { + let max = args.len() - 1; + let pos = args.iter().position(|x| x == "--token").unwrap_or(max); + if pos < max { + let token = args[pos + 1].to_owned(); + let id = crate::ipc::get_id(); + let uuid = crate::encode64(hbb_common::get_uuid()); + let mut user_name = None; + let pos = args.iter().position(|x| x == "--user_name").unwrap_or(max); + if pos < max { + user_name = Some(args[pos + 1].to_owned()); + } + let mut strategy_name = None; + let pos = args + .iter() + .position(|x| x == "--strategy_name") + .unwrap_or(max); + if pos < max { + strategy_name = Some(args[pos + 1].to_owned()); + } + let mut body = serde_json::json!({ + "id": id, + "uuid": uuid, + }); + let header = "Authorization: Bearer ".to_owned() + &token; + if user_name.is_none() && strategy_name.is_none() { + println!("--user_name or --strategy_name is required!"); + } else { + if let Some(name) = user_name { + body["user_name"] = serde_json::json!(name); + } + if let Some(name) = strategy_name { + body["strategy_name"] = serde_json::json!(name); + } + let url = crate::ui_interface::get_api_server() + "/api/devices/cli"; + if let Err(err) = crate::post_request_sync(url, body.to_string(), &header) { + println!("{}", err); + } else { + println!("Done!"); + } + } + } else { + println!("--token is required!"); + } + } else { + println!("Installation and administrative privileges required!"); + } + return None; } else if args[0] == "--check-hwcodec-config" { #[cfg(feature = "hwcodec")] scrap::hwcodec::check_config(); From cd5658f01da34e52674b881ef8eb4f5735f09704 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 2 Aug 2023 22:25:54 +0800 Subject: [PATCH 272/612] refactor addressbook sync Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_card.dart | 13 -- flutter/lib/models/ab_model.dart | 150 ++++++++++++++++++---- flutter/lib/models/peer_model.dart | 16 +++ libs/hbb_common/Cargo.toml | 3 +- libs/hbb_common/src/config.rs | 108 ++++++++++++++-- libs/hbb_common/src/password_security.rs | 62 +++++++-- src/client.rs | 20 ++- src/flutter_ffi.rs | 43 ++++++- src/ui.rs | 2 +- src/ui_interface.rs | 14 +- 10 files changed, 365 insertions(+), 66 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index a73454040..eea4812e4 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -500,7 +500,6 @@ abstract class BasePeerCard extends StatelessWidget { return await _isForceAlwaysRelay(id); }, setter: (bool v) async { - gFFI.abModel.setPeerForceAlwaysRelay(id, v); await bind.mainSetPeerOption( id: id, key: option, value: bool2option(option, v)); }, @@ -671,7 +670,6 @@ abstract class BasePeerCard extends StatelessWidget { isInProgress.value = true; String name = controller.text.trim(); await bind.mainSetPeerAlias(id: id, alias: name); - gFFI.abModel.setPeerAlias(id, name); _update(); close(); isInProgress.value = false; @@ -968,16 +966,6 @@ class AddressBookPeerCard extends BasePeerCard { return menuItems; } - @protected - @override - Future _isForceAlwaysRelay(String id) async => - gFFI.abModel.find(id)?.forceAlwaysRelay ?? false; - - @protected - @override - Future _getAlias(String id) async => - gFFI.abModel.find(id)?.alias ?? ''; - @protected @override void _update() => gFFI.abModel.pullAb(); @@ -1126,7 +1114,6 @@ void _rdpDialog(String id) async { id: id, key: 'rdp_username', value: username); await bind.mainSetPeerOption( id: id, key: 'rdp_password', value: password); - gFFI.abModel.setRdp(id, port, username); close(); } diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 3df43546a..2562a0b0e 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:convert'; import 'dart:io'; @@ -31,12 +32,21 @@ class AbModel { final selectedTags = List.empty(growable: true).obs; var initialized = false; var licensedDevices = 0; + var sync_all_from_recent = true; + var _timerCounter = 0; WeakReference parent; - AbModel(this.parent); + AbModel(this.parent) { + if (desktopType == DesktopType.main) { + Timer.periodic(Duration(milliseconds: 500), (timer) async { + if (_timerCounter++ % 6 == 0) syncFromRecent(); + }); + } + } Future pullAb({force = true, quiet = false}) async { + debugPrint("pullAb, force:$force, quite:$quiet"); if (gFFI.userModel.userName.isEmpty) return; if (abLoading.value) return; if (!force && initialized) return; @@ -75,18 +85,24 @@ class AbModel { } } } catch (err) { + reset(); abError.value = err.toString(); } finally { abLoading.value = false; initialized = true; + sync_all_from_recent = true; + _timerCounter = 0; + save(); } } Future reset() async { + abError.value = ''; await bind.mainSetLocalOption(key: "selected-tags", value: ''); tags.clear(); peers.clear(); initialized = false; + await bind.mainClearAb(); } void addId(String id, String alias, List tags) { @@ -131,10 +147,11 @@ class AbModel { } Future pushAb() async { + debugPrint("pushAb"); final api = "${await bind.mainGetApiServer()}/api/ab"; var authHeaders = getHttpHeaders(); authHeaders['Content-Type'] = "application/json"; - final peersJsonData = peers.map((e) => e.toJson()).toList(); + final peersJsonData = peers.map((e) => e.toAbUploadJson()).toList(); final body = jsonEncode({ "data": jsonEncode({"tags": tags, "peers": peersJsonData}) }); @@ -149,10 +166,14 @@ class AbModel { request.headers.addAll(authHeaders); try { await http.Client().send(request); - await pullAb(quiet: true); + // await pullAb(quiet: true); } catch (e) { BotToast.showText(contentColor: Colors.red, text: e.toString()); - } finally {} + } finally { + sync_all_from_recent = true; + _timerCounter = 0; + save(); + } } Peer? find(String id) { @@ -197,28 +218,111 @@ class AbModel { } } - Future setPeerAlias(String id, String value) async { - final it = peers.where((p0) => p0.id == id); - if (it.isNotEmpty) { - it.first.alias = value; - await pushAb(); + void syncFromRecent() async { + Peer merge(Peer r, Peer p) { + return Peer( + id: p.id, + hash: r.hash.isEmpty ? p.hash : r.hash, + username: r.username.isEmpty ? p.username : r.username, + hostname: r.hostname.isEmpty ? p.hostname : r.hostname, + platform: r.platform.isEmpty ? p.platform : r.platform, + alias: r.alias, + tags: p.tags, + forceAlwaysRelay: r.forceAlwaysRelay, + rdpPort: r.rdpPort, + rdpUsername: r.rdpUsername); + } + + bool shouldSync(Peer a, Peer b) { + return a.hash != b.hash || + a.username != b.username || + a.platform != b.platform || + a.hostname != b.hostname; + } + + Future> getRecentPeers() async { + try { + if (peers.isEmpty) []; + List filteredPeerIDs; + if (sync_all_from_recent) { + sync_all_from_recent = false; + filteredPeerIDs = peers.map((e) => e.id).toList(); + } else { + final new_stored_str = await bind.mainGetNewStoredPeers(); + if (new_stored_str.isEmpty) return []; + List new_stores = + (jsonDecode(new_stored_str) as List) + .map((e) => e.toString()) + .toList(); + final abPeerIds = peers.map((e) => e.id).toList(); + filteredPeerIDs = + new_stores.where((e) => abPeerIds.contains(e)).toList(); + } + if (filteredPeerIDs.isEmpty) return []; + final loadStr = await bind.mainLoadRecentPeersForAb( + filter: jsonEncode(filteredPeerIDs)); + if (loadStr.isEmpty) { + return []; + } + List mapPeers = jsonDecode(loadStr); + List recents = List.empty(growable: true); + for (var m in mapPeers) { + if (m is Map) { + recents.add(Peer.fromJson(m)); + } + } + return recents; + } catch (e) { + debugPrint('getRecentPeers:$e'); + } + return []; + } + + try { + if (!shouldSyncAb()) return; + final oldPeers = peers.toList(); + final recents = await getRecentPeers(); + if (recents.isEmpty) return; + for (var i = 0; i < peers.length; i++) { + var p = peers[i]; + var r = recents.firstWhereOrNull((r) => p.id == r.id); + if (r != null) { + peers[i] = merge(r, p); + } + } + bool changed = false; + for (var i = 0; i < peers.length; i++) { + final o = oldPeers[i]; + final p = peers[i]; + if (shouldSync(o, p)) { + changed = true; + break; + } + } + // Be careful with loop calls + if (changed) { + pushAb(); + } + } catch (e) { + debugPrint('syncFromRecent:$e'); } } - Future setPeerForceAlwaysRelay(String id, bool value) async { - final it = peers.where((p0) => p0.id == id); - if (it.isNotEmpty) { - it.first.forceAlwaysRelay = value; - await pushAb(); - } - } - - Future setRdp(String id, String port, String username) async { - final it = peers.where((p0) => p0.id == id); - if (it.isNotEmpty) { - it.first.rdpPort = port; - it.first.rdpUsername = username; - await pushAb(); + save() { + try { + final infos = peers + .map((e) => ({ + "id": e.id, + "hash": e.hash, + })) + .toList(); + final m = { + "access_token": bind.mainGetLocalOption(key: 'access_token'), + "peers": infos, + }; + bind.mainSaveAb(json: jsonEncode(m)); + } catch (e) { + debugPrint('ab save:$e'); } } } diff --git a/flutter/lib/models/peer_model.dart b/flutter/lib/models/peer_model.dart index 596355adc..7a61c3dcf 100644 --- a/flutter/lib/models/peer_model.dart +++ b/flutter/lib/models/peer_model.dart @@ -4,6 +4,7 @@ import 'platform_model.dart'; class Peer { final String id; + String hash; final String username; final String hostname; final String platform; @@ -23,6 +24,7 @@ class Peer { Peer.fromJson(Map json) : id = json['id'] ?? '', + hash = json['hash'] ?? '', username = json['username'] ?? '', hostname = json['hostname'] ?? '', platform = json['platform'] ?? '', @@ -35,6 +37,7 @@ class Peer { Map toJson() { return { "id": id, + "hash": hash, "username": username, "hostname": hostname, "platform": platform, @@ -46,8 +49,20 @@ class Peer { }; } + Map toAbUploadJson() { + return { + "id": id, + "hash": hash, + "username": username, + "hostname": hostname, + "platform": platform, + "tags": tags, + }; + } + Peer({ required this.id, + required this.hash, required this.username, required this.hostname, required this.platform, @@ -61,6 +76,7 @@ class Peer { Peer.loading() : this( id: '...', + hash: '', username: '...', hostname: '...', platform: '...', diff --git a/libs/hbb_common/Cargo.toml b/libs/hbb_common/Cargo.toml index 4d008a866..5c93ccd04 100644 --- a/libs/hbb_common/Cargo.toml +++ b/libs/hbb_common/Cargo.toml @@ -24,6 +24,7 @@ directories-next = "2.0" rand = "0.8" serde_derive = "1.0" serde = "1.0" +serde_json = "1.0" lazy_static = "1.4" confy = { git = "https://github.com/open-trade/confy" } dirs-next = "2.0" @@ -56,5 +57,3 @@ winapi = { version = "0.3", features = ["winuser"] } [target.'cfg(target_os = "macos")'.dependencies] osascript = "0.3" -[dev-dependencies] -serde_json = "1.0" diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 6d3a26c51..36709d8c5 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -1,6 +1,7 @@ use std::{ - collections::HashMap, + collections::{HashMap, HashSet}, fs, + io::{Read, Write}, net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}, ops::{Deref, DerefMut}, path::{Path, PathBuf}, @@ -13,10 +14,12 @@ use rand::Rng; use regex::Regex; use serde as de; use serde_derive::{Deserialize, Serialize}; +use serde_json; use sodiumoxide::base64; use sodiumoxide::crypto::sign; use crate::{ + compress::{compress, decompress}, log, password_security::{ decrypt_str_or_original, decrypt_vec_or_original, encrypt_str_or_original, @@ -31,6 +34,7 @@ pub const REG_INTERVAL: i64 = 12_000; pub const COMPRESS_LEVEL: i32 = 3; const SERIAL: i32 = 3; const PASSWORD_ENC_VERSION: &str = "00"; +const ENCRYPT_MAX_LEN: usize = 128; // config2 options #[cfg(target_os = "linux")] @@ -57,6 +61,7 @@ lazy_static::lazy_static! { pub static ref APP_NAME: Arc> = Arc::new(RwLock::new("RustDesk".to_owned())); static ref KEY_PAIR: Arc>> = Default::default(); static ref USER_DEFAULT_CONFIG: Arc> = Arc::new(RwLock::new((UserDefaultConfig::load(), Instant::now()))); + pub static ref NEW_STORED_PEER_CONFIG: Arc>> = Default::default(); } lazy_static::lazy_static! { @@ -376,7 +381,8 @@ impl Config2 { fn store(&self) { let mut config = self.clone(); if let Some(mut socks) = config.socks { - socks.password = encrypt_str_or_original(&socks.password, PASSWORD_ENC_VERSION); + socks.password = + encrypt_str_or_original(&socks.password, PASSWORD_ENC_VERSION, ENCRYPT_MAX_LEN); config.socks = Some(socks); } Config::store_(&config, "2"); @@ -485,8 +491,9 @@ impl Config { fn store(&self) { let mut config = self.clone(); - config.password = encrypt_str_or_original(&config.password, PASSWORD_ENC_VERSION); - config.enc_id = encrypt_str_or_original(&config.id, PASSWORD_ENC_VERSION); + config.password = + encrypt_str_or_original(&config.password, PASSWORD_ENC_VERSION, ENCRYPT_MAX_LEN); + config.enc_id = encrypt_str_or_original(&config.id, PASSWORD_ENC_VERSION, ENCRYPT_MAX_LEN); config.id = "".to_owned(); Config::store_(&config, ""); } @@ -980,15 +987,17 @@ impl PeerConfig { pub fn store(&self, id: &str) { let _lock = CONFIG.read().unwrap(); let mut config = self.clone(); - config.password = encrypt_vec_or_original(&config.password, PASSWORD_ENC_VERSION); + config.password = + encrypt_vec_or_original(&config.password, PASSWORD_ENC_VERSION, ENCRYPT_MAX_LEN); for opt in ["rdp_password", "os-username", "os-password"] { if let Some(v) = config.options.get_mut(opt) { - *v = encrypt_str_or_original(v, PASSWORD_ENC_VERSION) + *v = encrypt_str_or_original(v, PASSWORD_ENC_VERSION, ENCRYPT_MAX_LEN) } } if let Err(err) = store_path(Self::path(id), config) { log::error!("Failed to store config: {}", err); } + NEW_STORED_PEER_CONFIG.lock().unwrap().insert(id.to_owned()); } pub fn remove(id: &str) { @@ -1014,7 +1023,7 @@ impl PeerConfig { Config::with_extension(Config::path(path)) } - pub fn peers() -> Vec<(String, SystemTime, PeerConfig)> { + pub fn peers(id_filters: Option>) -> Vec<(String, SystemTime, PeerConfig)> { if let Ok(peers) = Config::path(PEERS).read_dir() { if let Ok(peers) = peers .map(|res| res.map(|e| e.path())) @@ -1027,7 +1036,6 @@ impl PeerConfig { && p.extension().map(|p| p.to_str().unwrap_or("")) == Some("toml") }) .map(|p| { - let t = crate::get_modified_time(p); let id = p .file_stem() .map(|p| p.to_str().unwrap_or("")) @@ -1041,12 +1049,21 @@ impl PeerConfig { } else { id }; - - let c = PeerConfig::load(&id_decoded_string); + (id_decoded_string, p) + }) + .filter(|(id, _)| { + let Some(filters) = &id_filters else { + return true; + }; + filters.contains(id) + }) + .map(|(id, p)| { + let t = crate::get_modified_time(p); + let c = PeerConfig::load(&id); if c.info.platform.is_empty() { fs::remove_file(p).ok(); } - (id_decoded_string, t, c) + (id, t, c) }) .filter(|p| !p.2.info.platform.is_empty()) .collect(); @@ -1445,6 +1462,74 @@ impl UserDefaultConfig { } } +#[derive(Debug, Default, Serialize, Deserialize, Clone)] +pub struct AbPeer { + #[serde( + default, + deserialize_with = "deserialize_string", + skip_serializing_if = "String::is_empty" + )] + pub id: String, + #[serde( + default, + deserialize_with = "deserialize_string", + skip_serializing_if = "String::is_empty" + )] + pub hash: String, +} + +#[derive(Debug, Default, Serialize, Deserialize, Clone)] +pub struct Ab { + #[serde( + default, + deserialize_with = "deserialize_string", + skip_serializing_if = "String::is_empty" + )] + pub access_token: String, + #[serde(default, deserialize_with = "deserialize_vec_abpeer")] + pub peers: Vec, +} + +impl Ab { + fn path() -> PathBuf { + let filename = format!("{}_ab", APP_NAME.read().unwrap().clone()); + Config::path(filename) + } + + pub fn store(json: String) { + if let Ok(mut file) = std::fs::File::create(Self::path()) { + let data = compress(json.as_bytes()); + let max_len = 32 * 1024 * 1024; + if data.len() > max_len { + // not store original + return; + } + let data = encrypt_vec_or_original(&data, PASSWORD_ENC_VERSION, max_len); + file.write_all(&data).ok(); + }; + } + + pub fn load() -> Ab { + if let Ok(mut file) = std::fs::File::open(Self::path()) { + let mut data = vec![]; + if file.read_to_end(&mut data).is_ok() { + let (data, succ, _) = decrypt_vec_or_original(&data, PASSWORD_ENC_VERSION); + if succ { + let data = decompress(&data); + if let Ok(ab) = serde_json::from_str::(&String::from_utf8_lossy(&data)) { + return ab; + } + } + } + }; + Ab::default() + } + + pub fn remove() { + std::fs::remove_file(Self::path()).ok(); + } +} + // use default value when field type is wrong macro_rules! deserialize_default { ($func_name:ident, $return_type:ty) => { @@ -1464,6 +1549,7 @@ deserialize_default!(deserialize_vec_u8, Vec); deserialize_default!(deserialize_vec_string, Vec); deserialize_default!(deserialize_vec_i32_string_i32, Vec<(i32, String, i32)>); deserialize_default!(deserialize_vec_discoverypeer, Vec); +deserialize_default!(deserialize_vec_abpeer, Vec); deserialize_default!(deserialize_keypair, KeyPair); deserialize_default!(deserialize_size, Size); deserialize_default!(deserialize_hashmap_string_string, HashMap); diff --git a/libs/hbb_common/src/password_security.rs b/libs/hbb_common/src/password_security.rs index 5aca2c85a..a127ccd2b 100644 --- a/libs/hbb_common/src/password_security.rs +++ b/libs/hbb_common/src/password_security.rs @@ -84,13 +84,13 @@ pub fn hide_cm() -> bool { const VERSION_LEN: usize = 2; -pub fn encrypt_str_or_original(s: &str, version: &str) -> String { +pub fn encrypt_str_or_original(s: &str, version: &str, max_len: usize) -> String { if decrypt_str_or_original(s, version).1 { log::error!("Duplicate encryption!"); return s.to_owned(); } if version == "00" { - if let Ok(s) = encrypt(s.as_bytes()) { + if let Ok(s) = encrypt(s.as_bytes(), max_len) { return version.to_owned() + &s; } } @@ -117,13 +117,13 @@ pub fn decrypt_str_or_original(s: &str, current_version: &str) -> (String, bool, (s.to_owned(), false, !s.is_empty()) } -pub fn encrypt_vec_or_original(v: &[u8], version: &str) -> Vec { +pub fn encrypt_vec_or_original(v: &[u8], version: &str, max_len: usize) -> Vec { if decrypt_vec_or_original(v, version).1 { log::error!("Duplicate encryption!"); return v.to_owned(); } if version == "00" { - if let Ok(s) = encrypt(v) { + if let Ok(s) = encrypt(v, max_len) { let mut version = version.to_owned().into_bytes(); version.append(&mut s.into_bytes()); return version; @@ -148,8 +148,8 @@ pub fn decrypt_vec_or_original(v: &[u8], current_version: &str) -> (Vec, boo (v.to_owned(), false, !v.is_empty()) } -fn encrypt(v: &[u8]) -> Result { - if !v.is_empty() && v.len() <= 128 { +fn encrypt(v: &[u8], max_len: usize) -> Result { + if !v.is_empty() && v.len() <= max_len { symmetric_crypt(v, true).map(|v| base64::encode(v, base64::Variant::Original)) } else { Err(()) @@ -185,12 +185,15 @@ mod test { #[test] fn test() { use super::*; + use rand::{thread_rng, Rng}; + use std::time::Instant; let version = "00"; + let max_len = 128; println!("test str"); let data = "Hello World"; - let encrypted = encrypt_str_or_original(data, version); + let encrypted = encrypt_str_or_original(data, version, max_len); let (decrypted, succ, store) = decrypt_str_or_original(&encrypted, version); println!("data: {data}"); println!("encrypted: {encrypted}"); @@ -202,11 +205,14 @@ mod test { let (_, _, store) = decrypt_str_or_original(&encrypted, "99"); assert!(store); assert!(!decrypt_str_or_original(&decrypted, version).1); - assert_eq!(encrypt_str_or_original(&encrypted, version), encrypted); + assert_eq!( + encrypt_str_or_original(&encrypted, version, max_len), + encrypted + ); println!("test vec"); let data: Vec = vec![1, 2, 3, 4, 5, 6]; - let encrypted = encrypt_vec_or_original(&data, version); + let encrypted = encrypt_vec_or_original(&data, version, max_len); let (decrypted, succ, store) = decrypt_vec_or_original(&encrypted, version); println!("data: {data:?}"); println!("encrypted: {encrypted:?}"); @@ -218,7 +224,10 @@ mod test { let (_, _, store) = decrypt_vec_or_original(&encrypted, "99"); assert!(store); assert!(!decrypt_vec_or_original(&decrypted, version).1); - assert_eq!(encrypt_vec_or_original(&encrypted, version), encrypted); + assert_eq!( + encrypt_vec_or_original(&encrypted, version, max_len), + encrypted + ); println!("test original"); let data = version.to_string() + "Hello World"; @@ -238,5 +247,38 @@ mod test { let (_, succ, store) = decrypt_vec_or_original(&[], version); assert!(!store); assert!(!succ); + + println!("test speed"); + let test_speed = |len: usize, name: &str| { + let mut data: Vec = vec![]; + let mut rng = thread_rng(); + for _ in 0..len { + data.push(rng.gen_range(0..255)); + } + let start: Instant = Instant::now(); + let encrypted = encrypt_vec_or_original(&data, version, len); + assert_ne!(data, decrypted); + let t1 = start.elapsed(); + let start = Instant::now(); + let (decrypted, _, _) = decrypt_vec_or_original(&encrypted, version); + let t2 = start.elapsed(); + assert_eq!(data, decrypted); + println!("{name}"); + println!("encrypt:{:?}, decrypt:{:?}", t1, t2); + + let start: Instant = Instant::now(); + let encrypted = base64::encode(&data, base64::Variant::Original); + let t1 = start.elapsed(); + let start = Instant::now(); + let decrypted = base64::decode(&encrypted, base64::Variant::Original).unwrap(); + let t2 = start.elapsed(); + assert_eq!(data, decrypted); + println!("base64, encrypt:{:?}, decrypt:{:?}", t1, t2,); + }; + test_speed(128, "128"); + test_speed(1024, "1k"); + test_speed(1024 * 1024, "1M"); + test_speed(10 * 1024 * 1024, "10M"); + test_speed(100 * 1024 * 1024, "100M"); } } diff --git a/src/client.rs b/src/client.rs index e98e6bd3a..dfd73455c 100644 --- a/src/client.rs +++ b/src/client.rs @@ -34,7 +34,8 @@ use hbb_common::{ anyhow::{anyhow, Context}, bail, config::{ - Config, PeerConfig, PeerInfoSerde, Resolution, CONNECT_TIMEOUT, READ_TIMEOUT, RELAY_PORT, + Config, LocalConfig, PeerConfig, PeerInfoSerde, Resolution, CONNECT_TIMEOUT, READ_TIMEOUT, + RELAY_PORT, }, get_version_number, log, message_proto::{option_message::BoolOption, *}, @@ -42,6 +43,7 @@ use hbb_common::{ rand, rendezvous_proto::*, socket_client, + sodiumoxide::base64, sodiumoxide::crypto::{box_, secretbox, sign}, tcp::FramedStream, timeout, @@ -2235,6 +2237,22 @@ pub async fn handle_hash( if password.is_empty() { password = lc.read().unwrap().config.password.clone(); } + if password.is_empty() { + let access_token = LocalConfig::get_option("access_token"); + let ab = hbb_common::config::Ab::load(); + if !access_token.is_empty() && access_token == ab.access_token { + let id = lc.read().unwrap().id.clone(); + if let Some(p) = ab + .peers + .iter() + .find_map(|p| if p.id == id { Some(p) } else { None }) + { + if let Ok(hash) = base64::decode(p.hash.clone(), base64::Variant::Original) { + password = hash; + } + } + } + } let password = if password.is_empty() { // login without password, the remote side can click accept interface.msgbox("input-password", "Password Required", "", ""); diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 64a221141..8925b5804 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -618,7 +618,7 @@ pub fn main_show_option(_key: String) -> SyncReturn { #[cfg(all(target_os = "linux", feature = "linux_headless"))] #[cfg(not(any(feature = "flatpak", feature = "appimage")))] if _key.eq(config::CONFIG_OPTION_ALLOW_LINUX_HEADLESS) { - return SyncReturn(true) + return SyncReturn(true); } SyncReturn(false) } @@ -777,6 +777,15 @@ pub fn main_set_peer_alias(id: String, alias: String) { set_peer_option(id, "alias".to_owned(), alias) } +pub fn main_get_new_stored_peers() -> String { + let peers: Vec = config::NEW_STORED_PEER_CONFIG + .lock() + .unwrap() + .drain() + .collect(); + serde_json::to_string(&peers).unwrap_or_default() +} + pub fn main_forget_password(id: String) { forget_password(id) } @@ -787,7 +796,7 @@ pub fn main_peer_has_password(id: String) -> bool { pub fn main_load_recent_peers() { if !config::APP_DIR.read().unwrap().is_empty() { - let peers: Vec> = PeerConfig::peers() + let peers: Vec> = PeerConfig::peers(None) .drain(..) .map(|(id, _, p)| peer_to_map(id, p)) .collect(); @@ -808,7 +817,7 @@ pub fn main_load_recent_peers() { pub fn main_load_recent_peers_sync() -> SyncReturn { if !config::APP_DIR.read().unwrap().is_empty() { - let peers: Vec> = PeerConfig::peers() + let peers: Vec> = PeerConfig::peers(None) .drain(..) .map(|(id, _, p)| peer_to_map(id, p)) .collect(); @@ -825,10 +834,22 @@ pub fn main_load_recent_peers_sync() -> SyncReturn { SyncReturn("".to_string()) } +pub fn main_load_recent_peers_for_ab(filter: String) -> String { + let id_filters = serde_json::from_str::>(&filter).unwrap_or_default(); + if !config::APP_DIR.read().unwrap().is_empty() { + let peers: Vec> = PeerConfig::peers(Some(id_filters)) + .drain(..) + .map(|(id, _, p)| peer_to_map_ab(id, p)) + .collect(); + return serde_json::ser::to_string(&peers).unwrap_or("".to_owned()); + } + "".to_string() +} + pub fn main_load_fav_peers() { if !config::APP_DIR.read().unwrap().is_empty() { let favs = get_fav(); - let mut recent = PeerConfig::peers(); + let mut recent = PeerConfig::peers(None); let mut lan = config::LanPeers::load() .peers .iter() @@ -1086,6 +1107,20 @@ pub fn main_start_dbus_server() { } } +pub fn main_save_ab(json: String) { + if json.len() > 1024 { + std::thread::spawn(|| { + config::Ab::store(json); + }); + } else { + config::Ab::store(json); + } +} + +pub fn main_clear_ab() { + config::Ab::remove(); +} + pub fn session_send_pointer(session_id: SessionID, msg: String) { if let Ok(m) = serde_json::from_str::>(&msg) { let alt = m.get("alt").is_some(); diff --git a/src/ui.rs b/src/ui.rs index 5554a3020..8f036509b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -412,7 +412,7 @@ impl UI { fn get_recent_sessions(&mut self) -> Value { // to-do: limit number of recent sessions, and remove old peer file - let peers: Vec = PeerConfig::peers() + let peers: Vec = PeerConfig::peers(None) .drain(..) .map(|p| Self::get_peer_value(p.0, p.2)) .collect(); diff --git a/src/ui_interface.rs b/src/ui_interface.rs index c620f4f91..512589b6e 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -3,7 +3,9 @@ use hbb_common::password_security; use hbb_common::{ allow_err, config::{self, Config, LocalConfig, PeerConfig}, - directories_next, log, tokio, + directories_next, log, + sodiumoxide::base64, + tokio, }; use hbb_common::{ bytes::Bytes, @@ -610,6 +612,16 @@ pub fn peer_to_map(id: String, p: PeerConfig) -> HashMap<&'static str, String> { ]) } +#[cfg(feature = "flutter")] +pub fn peer_to_map_ab(id: String, p: PeerConfig) -> HashMap<&'static str, String> { + let mut m = peer_to_map(id, p.clone()); + m.insert( + "hash", + base64::encode(p.password, base64::Variant::Original), + ); + m +} + #[inline] pub fn get_lan_peers() -> Vec> { config::LanPeers::load() From f64dd3794a23f9e156a7408ce343d883babf4515 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 3 Aug 2023 18:15:50 +0800 Subject: [PATCH 273/612] better restore window size Signed-off-by: dignow --- flutter/lib/common.dart | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 903eb0e11..b467f8484 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1419,24 +1419,10 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { } Future _adjustRestoreMainWindowSize(double? width, double? height) async { - const double minWidth = 600; - const double minHeight = 100; - double maxWidth = (((isDesktop || isWebDesktop) - ? kDesktopMaxDisplaySize - : kMobileMaxDisplaySize)) - .toDouble(); - double maxHeight = ((isDesktop || isWebDesktop) - ? kDesktopMaxDisplaySize - : kMobileMaxDisplaySize) - .toDouble(); - - if (isDesktop || isWebDesktop) { - final screen = (await window_size.getWindowInfo()).screen; - if (screen != null) { - maxWidth = screen.visibleFrame.width; - maxHeight = screen.visibleFrame.height; - } - } + const double minWidth = 1; + const double minHeight = 1; + const double maxWidth = 6480; + const double maxHeight = 6480; final defaultWidth = ((isDesktop || isWebDesktop) ? 1280 : kMobileDefaultDisplayWidth) From 5a0865559cc049e18df3ede728fe9159c365e292 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 3 Aug 2023 16:48:14 +0800 Subject: [PATCH 274/612] peer card batch operation Signed-off-by: 21pages --- flutter/lib/common/widgets/dialog.dart | 96 ++++++ flutter/lib/common/widgets/peer_card.dart | 291 ++++++++---------- flutter/lib/common/widgets/peer_tab_page.dart | 171 +++++++++- flutter/lib/common/widgets/peers_view.dart | 1 + flutter/lib/models/ab_model.dart | 18 ++ flutter/lib/models/peer_tab_model.dart | 53 +++- flutter/lib/models/user_model.dart | 1 + libs/hbb_common/src/config.rs | 5 + 8 files changed, 462 insertions(+), 174 deletions(-) diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index 6f9248c1d..05a105e68 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -9,6 +9,7 @@ import 'package:get/get.dart'; import '../../common.dart'; import '../../models/model.dart'; import '../../models/platform_model.dart'; +import 'address_book.dart'; void clientClose(SessionID sessionId, OverlayDialogManager dialogManager) { msgBox(sessionId, 'info', 'Close', 'Are you sure to close the connection?', @@ -1350,3 +1351,98 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { ); msgBoxCommon(ffi.dialogManager, 'Custom Image Quality', content, [btnClose]); } + +void deletePeerConfirmDialog(Function onSubmit) async { + gFFI.dialogManager.show( + (setState, close, context) { + submit() async { + await onSubmit(); + close(); + } + + return CustomAlertDialog( + title: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + Icons.delete_rounded, + color: Colors.red, + ), + Text(translate('Delete')).paddingOnly( + left: 10, + ), + ], + ), + content: SizedBox.shrink(), + actions: [ + dialogButton( + "Cancel", + icon: Icon(Icons.close_rounded), + onPressed: close, + isOutline: true, + ), + dialogButton( + "OK", + icon: Icon(Icons.done_rounded), + onPressed: submit, + ), + ], + onSubmit: submit, + onCancel: close, + ); + }, + ); +} + +void editAbTagDialog( + List currentTags, Function(List) onSubmit) { + var isInProgress = false; + + final tags = List.of(gFFI.abModel.tags); + var selectedTag = currentTags.obs; + + gFFI.dialogManager.show((setState, close, context) { + submit() async { + setState(() { + isInProgress = true; + }); + await onSubmit(selectedTag); + close(); + } + + return CustomAlertDialog( + title: Text(translate("Edit Tag")), + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Wrap( + children: tags + .map((e) => AddressBookTag( + name: e, + tags: selectedTag, + onTap: () { + if (selectedTag.contains(e)) { + selectedTag.remove(e); + } else { + selectedTag.add(e); + } + }, + showActionMenu: false)) + .toList(growable: false), + ), + ), + Offstage( + offstage: !isInProgress, child: const LinearProgressIndicator()) + ], + ), + actions: [ + dialogButton("Cancel", onPressed: close, isOutline: true), + dialogButton("OK", onPressed: submit), + ], + onSubmit: submit, + onCancel: close, + ); + }); +} diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 9da472fb4..a69b302f5 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -3,8 +3,11 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/common/widgets/address_book.dart'; +import 'package:flutter_hbb/common/widgets/dialog.dart'; import 'package:flutter_hbb/consts.dart'; +import 'package:flutter_hbb/models/peer_tab_model.dart'; import 'package:get/get.dart'; +import 'package:provider/provider.dart'; import '../../common.dart'; import '../../common/formatter/id_formatter.dart'; @@ -58,17 +61,21 @@ class _PeerCardState extends State<_PeerCard> final peer = super.widget.peer; final name = '${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}'; - + final PeerTabModel peerTabModel = Provider.of(context); + final selected = peerTabModel.isPeerSelected(peer.id); return Card( margin: EdgeInsets.symmetric(horizontal: 2), child: GestureDetector( - onTap: !isWebDesktop ? () => connect(context, peer.id) : null, + onTap: () { + if (peerTabModel.multiSelectionMode) { + peerTabModel.onPeerCardTap(peer); + } else { + if (!isWebDesktop) connect(context, peer.id); + } + }, onDoubleTap: isWebDesktop ? () => connect(context, peer.id) : null, - onLongPressStart: (details) { - final x = details.globalPosition.dx; - final y = details.globalPosition.dy; - _menuPos = RelativeRect.fromLTRB(x, y, x, y); - _showPeerMenu(peer.id); + onLongPress: () { + peerTabModel.togglePeerSelect(peer); }, child: Container( padding: EdgeInsets.only(left: 12, top: 8, bottom: 8), @@ -97,24 +104,30 @@ class _PeerCardState extends State<_PeerCard> ], ).paddingOnly(left: 8.0), ), - InkWell( - child: const Padding( - padding: EdgeInsets.all(12), - child: Icon(Icons.more_vert)), - onTapDown: (e) { - final x = e.globalPosition.dx; - final y = e.globalPosition.dy; - _menuPos = RelativeRect.fromLTRB(x, y, x, y); - }, - onTap: () { - _showPeerMenu(peer.id); - }) + selected + ? Padding( + padding: const EdgeInsets.all(12), + child: checkBox(), + ) + : InkWell( + child: const Padding( + padding: EdgeInsets.all(12), + child: Icon(Icons.more_vert)), + onTapDown: (e) { + final x = e.globalPosition.dx; + final y = e.globalPosition.dy; + _menuPos = RelativeRect.fromLTRB(x, y, x, y); + }, + onTap: () { + _showPeerMenu(peer.id); + }), ], ), ))); } Widget _buildDesktop() { + final PeerTabModel peerTabModel = Provider.of(context); final peer = super.widget.peer; var deco = Rx( BoxDecoration( @@ -144,7 +157,18 @@ class _PeerCardState extends State<_PeerCard> ); }, child: GestureDetector( - onDoubleTap: () => widget.connect(context, peer.id), + onDoubleTap: peerTabModel.multiSelectionMode + ? null + : () => widget.connect(context, peer.id), + onLongPress: () { + peerTabModel.togglePeerSelect(peer); + }, + onSecondaryTapDown: (_) { + peerTabModel.togglePeerSelect(peer); + }, + onTap: peerTabModel.multiSelectionMode + ? () => peerTabModel.onPeerCardTap(peer) + : null, child: Obx(() => peerCardUiType.value == PeerUiType.grid ? _buildPeerCard(context, peer, deco) : _buildPeerTile(context, peer, deco))), @@ -153,6 +177,8 @@ class _PeerCardState extends State<_PeerCard> Widget _buildPeerTile( BuildContext context, Peer peer, Rx deco) { + final PeerTabModel peerTabModel = Provider.of(context); + final selected = peerTabModel.isPeerSelected(peer.id); final name = '${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}'; final greyStyle = TextStyle( @@ -212,7 +238,7 @@ class _PeerCardState extends State<_PeerCard> ], ).marginOnly(top: 2), ), - _actionMore(peer), + selected ? checkBox() : _actionMore(peer), ], ).paddingOnly(left: 10.0, top: 3.0), ), @@ -225,6 +251,8 @@ class _PeerCardState extends State<_PeerCard> Widget _buildPeerCard( BuildContext context, Peer peer, Rx deco) { + final PeerTabModel peerTabModel = Provider.of(context); + final selected = peerTabModel.isPeerSelected(peer.id); final name = '${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}'; return Card( @@ -294,7 +322,7 @@ class _PeerCardState extends State<_PeerCard> style: Theme.of(context).textTheme.titleSmall, )), ]).paddingSymmetric(vertical: 8)), - _actionMore(peer), + selected ? checkBox() : _actionMore(peer), ], ).paddingSymmetric(horizontal: 12.0), ) @@ -306,6 +334,13 @@ class _PeerCardState extends State<_PeerCard> ); } + Widget checkBox() { + return Icon( + Icons.check_box, + color: MyTheme.accent, + ); + } + Widget _actionMore(Peer peer) => Listener( onPointerDown: (e) { final x = e.position.dx; @@ -332,9 +367,11 @@ class _PeerCardState extends State<_PeerCard> abstract class BasePeerCard extends StatelessWidget { final Peer peer; + final PeerTabIndex tab; final EdgeInsets? menuPadding; - BasePeerCard({required this.peer, this.menuPadding, Key? key}) + BasePeerCard( + {required this.peer, required this.tab, this.menuPadding, Key? key}) : super(key: key); @override @@ -524,9 +561,7 @@ abstract class BasePeerCard extends StatelessWidget { } @protected - MenuEntryBase _removeAction( - String id, Future Function() reloadFunc, - {bool isLan = false}) { + MenuEntryBase _removeAction(String id) { return MenuEntryButton( childBuilder: (TextStyle? style) => Row( children: [ @@ -545,7 +580,33 @@ abstract class BasePeerCard extends StatelessWidget { ], ), proc: () { - _delete(id, isLan, reloadFunc); + onSubmit() async { + switch (tab) { + case PeerTabIndex.recent: + await bind.mainRemovePeer(id: id); + await bind.mainLoadRecentPeers(); + break; + case PeerTabIndex.fav: + final favs = (await bind.mainGetFav()).toList(); + if (favs.remove(id)) { + await bind.mainStoreFav(favs: favs); + await bind.mainLoadFavPeers(); + } + break; + case PeerTabIndex.lan: + await bind.mainRemoveDiscovered(id: id); + await bind.mainLoadLanPeers(); + break; + case PeerTabIndex.ab: + gFFI.abModel.deletePeer(id); + await gFFI.abModel.pushAb(); + break; + case PeerTabIndex.group: + break; + } + } + + deletePeerConfirmDialog(onSubmit); }, padding: menuPadding, dismissOnClicked: true, @@ -721,62 +782,15 @@ abstract class BasePeerCard extends StatelessWidget { @protected void _update(); - - void _delete(String id, bool isLan, Function reloadFunc) async { - gFFI.dialogManager.show( - (setState, close, context) { - submit() async { - if (isLan) { - await bind.mainRemoveDiscovered(id: id); - } else { - final favs = (await bind.mainGetFav()).toList(); - if (favs.remove(id)) { - await bind.mainStoreFav(favs: favs); - } - await bind.mainRemovePeer(id: id); - } - await reloadFunc(); - close(); - } - - return CustomAlertDialog( - title: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon( - Icons.delete_rounded, - color: Colors.red, - ), - Text(translate('Delete')).paddingOnly( - left: 10, - ), - ], - ), - content: SizedBox.shrink(), - actions: [ - dialogButton( - "Cancel", - icon: Icon(Icons.close_rounded), - onPressed: close, - isOutline: true, - ), - dialogButton( - "OK", - icon: Icon(Icons.done_rounded), - onPressed: submit, - ), - ], - onSubmit: submit, - onCancel: close, - ); - }, - ); - } } class RecentPeerCard extends BasePeerCard { RecentPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key}) - : super(peer: peer, menuPadding: menuPadding, key: key); + : super( + peer: peer, + tab: PeerTabIndex.recent, + menuPadding: menuPadding, + key: key); @override Future>> _buildMenuItems( @@ -817,9 +831,7 @@ class RecentPeerCard extends BasePeerCard { } menuItems.add(MenuEntryDivider()); - menuItems.add(_removeAction(peer.id, () async { - await bind.mainLoadRecentPeers(); - })); + menuItems.add(_removeAction(peer.id)); return menuItems; } @@ -830,7 +842,11 @@ class RecentPeerCard extends BasePeerCard { class FavoritePeerCard extends BasePeerCard { FavoritePeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key}) - : super(peer: peer, menuPadding: menuPadding, key: key); + : super( + peer: peer, + tab: PeerTabIndex.fav, + menuPadding: menuPadding, + key: key); @override Future>> _buildMenuItems( @@ -865,9 +881,7 @@ class FavoritePeerCard extends BasePeerCard { } menuItems.add(MenuEntryDivider()); - menuItems.add(_removeAction(peer.id, () async { - await bind.mainLoadFavPeers(); - })); + menuItems.add(_removeAction(peer.id)); return menuItems; } @@ -878,7 +892,11 @@ class FavoritePeerCard extends BasePeerCard { class DiscoveredPeerCard extends BasePeerCard { DiscoveredPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key}) - : super(peer: peer, menuPadding: menuPadding, key: key); + : super( + peer: peer, + tab: PeerTabIndex.lan, + menuPadding: menuPadding, + key: key); @override Future>> _buildMenuItems( @@ -915,11 +933,7 @@ class DiscoveredPeerCard extends BasePeerCard { } menuItems.add(MenuEntryDivider()); - menuItems.add( - _removeAction(peer.id, () async { - await bind.mainLoadLanPeers(); - }, isLan: true), - ); + menuItems.add(_removeAction(peer.id)); return menuItems; } @@ -930,7 +944,11 @@ class DiscoveredPeerCard extends BasePeerCard { class AddressBookPeerCard extends BasePeerCard { AddressBookPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key}) - : super(peer: peer, menuPadding: menuPadding, key: key); + : super( + peer: peer, + tab: PeerTabIndex.ab, + menuPadding: menuPadding, + key: key); @override Future>> _buildMenuItems( @@ -959,7 +977,7 @@ class AddressBookPeerCard extends BasePeerCard { } menuItems.add(MenuEntryDivider()); - menuItems.add(_removeAction(peer.id, () async {})); + menuItems.add(_removeAction(peer.id)); return menuItems; } @@ -967,27 +985,6 @@ class AddressBookPeerCard extends BasePeerCard { @override void _update() => gFFI.abModel.pullAb(); - @protected - @override - MenuEntryBase _removeAction( - String id, Future Function() reloadFunc, - {bool isLan = false}) { - return MenuEntryButton( - childBuilder: (TextStyle? style) => Text( - translate('Remove'), - style: style, - ), - proc: () { - () async { - gFFI.abModel.deletePeer(id); - await gFFI.abModel.pushAb(); - }(); - }, - padding: super.menuPadding, - dismissOnClicked: true, - ); - } - @protected MenuEntryBase _editTagAction(String id) { return MenuEntryButton( @@ -996,70 +993,24 @@ class AddressBookPeerCard extends BasePeerCard { style: style, ), proc: () { - _abEditTag(id); + editAbTagDialog(gFFI.abModel.getPeerTags(id), (selectedTag) async { + gFFI.abModel.changeTagForPeer(id, selectedTag); + await gFFI.abModel.pushAb(); + }); }, padding: super.menuPadding, dismissOnClicked: true, ); } - - void _abEditTag(String id) { - var isInProgress = false; - - final tags = List.of(gFFI.abModel.tags); - var selectedTag = gFFI.abModel.getPeerTags(id).obs; - - gFFI.dialogManager.show((setState, close, context) { - submit() async { - setState(() { - isInProgress = true; - }); - gFFI.abModel.changeTagForPeer(id, selectedTag); - await gFFI.abModel.pushAb(); - close(); - } - - return CustomAlertDialog( - title: Text(translate("Edit Tag")), - content: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - padding: const EdgeInsets.symmetric(vertical: 8.0), - child: Wrap( - children: tags - .map((e) => AddressBookTag( - name: e, - tags: selectedTag, - onTap: () { - if (selectedTag.contains(e)) { - selectedTag.remove(e); - } else { - selectedTag.add(e); - } - }, - showActionMenu: false)) - .toList(growable: false), - ), - ), - Offstage( - offstage: !isInProgress, child: const LinearProgressIndicator()) - ], - ), - actions: [ - dialogButton("Cancel", onPressed: close, isOutline: true), - dialogButton("OK", onPressed: submit), - ], - onSubmit: submit, - onCancel: close, - ); - }); - } } class MyGroupPeerCard extends BasePeerCard { MyGroupPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key}) - : super(peer: peer, menuPadding: menuPadding, key: key); + : super( + peer: peer, + tab: PeerTabIndex.group, + menuPadding: menuPadding, + key: key); @override Future>> _buildMenuItems( diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index ab85b2960..56b5bc72c 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/common/widgets/address_book.dart'; +import 'package:flutter_hbb/common/widgets/dialog.dart'; import 'package:flutter_hbb/common/widgets/my_group.dart'; import 'package:flutter_hbb/common/widgets/peers_view.dart'; import 'package:flutter_hbb/common/widgets/peer_card.dart'; @@ -83,6 +84,11 @@ class _PeerTabPageState extends State @override Widget build(BuildContext context) { + final model = Provider.of(context); + Widget selectionWrap(Widget widget) { + return model.multiSelectionMode ? createMultiSelectionBar() : widget; + } + return Column( textBaseline: TextBaseline.ideographic, crossAxisAlignment: CrossAxisAlignment.start, @@ -91,7 +97,7 @@ class _PeerTabPageState extends State height: 32, child: Container( padding: isDesktop ? null : EdgeInsets.symmetric(horizontal: 2), - child: Row( + child: selectionWrap(Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Expanded(child: _createSwitchBar(context)), @@ -127,7 +133,7 @@ class _PeerTabPageState extends State ).marginOnly(left: 8), ), ], - ), + )), ), ), _createPeersView(), @@ -251,6 +257,167 @@ class _PeerTabPageState extends State ), ); } + + Widget createMultiSelectionBar() { + final model = Provider.of(context); + return Row( + children: [ + deleteSelection(), + addSelectionToFav(), + addSelectionToAb(), + editSelectionTags(), + Expanded(child: Container()), + selectionCount(model.selectedPeers.length), + selectAll(), + closeSelection(), + ], + ); + } + + Widget deleteSelection() { + final model = Provider.of(context); + return InkWell( + onTap: () { + onSubmit() async { + final peers = model.selectedPeers; + switch (model.currentTab) { + case 0: + peers.map((p) async { + await bind.mainRemovePeer(id: p.id); + }).toList(); + await bind.mainLoadRecentPeers(); + break; + case 1: + final favs = (await bind.mainGetFav()).toList(); + peers.map((p) { + favs.remove(p.id); + }).toList(); + await bind.mainStoreFav(favs: favs); + await bind.mainLoadFavPeers(); + break; + case 2: + peers.map((p) async { + await bind.mainRemoveDiscovered(id: p.id); + }).toList(); + await bind.mainLoadLanPeers(); + break; + case 3: + gFFI.abModel.deletePeers(peers.map((p) => p.id).toList()); + await gFFI.abModel.pushAb(); + break; + default: + break; + } + gFFI.peerTabModel.closeSelection(); + } + + deletePeerConfirmDialog(onSubmit); + }, + child: Tooltip( + message: translate('Delete'), + child: Icon(Icons.delete, color: Colors.red))); + } + + Widget addSelectionToFav() { + final model = Provider.of(context); + return Offstage( + offstage: + model.currentTab != PeerTabIndex.recent.index, // show based on recent + child: InkWell( + onTap: () async { + final peers = model.selectedPeers; + final favs = (await bind.mainGetFav()).toList(); + for (var p in peers) { + if (!favs.contains(p.id)) { + favs.add(p.id); + } + } + await bind.mainStoreFav(favs: favs); + gFFI.peerTabModel.closeSelection(); + }, + child: Tooltip( + message: translate('Add to Favorites'), + child: Icon(model.icons[PeerTabIndex.fav.index])) + .marginOnly(left: isMobile ? 15 : 10), + ), + ); + } + + Widget addSelectionToAb() { + final model = Provider.of(context); + return Offstage( + offstage: + !gFFI.userModel.isLogin || model.currentTab == PeerTabIndex.ab.index, + child: InkWell( + onTap: () { + final peers = model.selectedPeers; + gFFI.abModel.addPeers(peers); + gFFI.abModel.pushAb(); + gFFI.peerTabModel.closeSelection(); + }, + child: Tooltip( + message: translate('Add to Address Book'), + child: Icon(model.icons[PeerTabIndex.ab.index])) + .marginOnly(left: isMobile ? 15 : 10), + ), + ); + } + + Widget editSelectionTags() { + final model = Provider.of(context); + return Offstage( + offstage: !gFFI.userModel.isLogin || + model.currentTab != PeerTabIndex.ab.index || + gFFI.abModel.tags.isEmpty, + child: InkWell( + onTap: () { + editAbTagDialog(List.empty(), (selectedTags) async { + final peers = model.selectedPeers; + gFFI.abModel.changeTagForPeers( + peers.map((p) => p.id).toList(), selectedTags); + gFFI.abModel.pushAb(); + gFFI.peerTabModel.closeSelection(); + }); + }, + child: Tooltip( + message: translate('Edit Tag'), child: Icon(Icons.tag))) + .marginOnly(left: isMobile ? 15 : 10), + ); + } + + Widget selectionCount(int count) { + return Align( + alignment: Alignment.center, + child: Text('$count selected'), + ); + } + + Widget selectAll() { + final model = Provider.of(context); + return Offstage( + offstage: + model.selectedPeers.length >= model.currentTabCachedPeers.length, + child: InkWell( + onTap: () { + model.selectAll(); + }, + child: Tooltip( + message: translate('Select All'), child: Icon(Icons.select_all)) + .marginOnly(left: 10), + ), + ); + } + + Widget closeSelection() { + final model = Provider.of(context); + return InkWell( + onTap: () { + model.closeSelection(); + }, + child: + Tooltip(message: translate('Close'), child: Icon(Icons.clear))) + .marginOnly(left: 10); + } } class PeerSearchBar extends StatefulWidget { diff --git a/flutter/lib/common/widgets/peers_view.dart b/flutter/lib/common/widgets/peers_view.dart index 95099bcc8..e9af1c6e3 100644 --- a/flutter/lib/common/widgets/peers_view.dart +++ b/flutter/lib/common/widgets/peers_view.dart @@ -172,6 +172,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener { builder: (context, snapshot) { if (snapshot.hasData) { final peers = snapshot.data!; + gFFI.peerTabModel.setCurrentTabCachedPeers(peers); final cards = []; for (final peer in peers) { final visibilityChild = VisibilityDetector( diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 2562a0b0e..9d24de94c 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -131,6 +131,12 @@ class AbModel { peers.add(peer); } + void addPeers(List ps) { + for (var p in ps) { + addPeer(p); + } + } + void addTag(String tag) async { if (tagContainBy(tag)) { return; @@ -146,6 +152,14 @@ class AbModel { it.first.tags = tags; } + void changeTagForPeers(List ids, List tags) { + peers.map((e) { + if (ids.contains(e.id)) { + e.tags = tags; + } + }).toList(); + } + Future pushAb() async { debugPrint("pushAb"); final api = "${await bind.mainGetApiServer()}/api/ab"; @@ -192,6 +206,10 @@ class AbModel { peers.removeWhere((element) => element.id == id); } + void deletePeers(List ids) { + peers.removeWhere((e) => ids.contains(e.id)); + } + void deleteTag(String tag) { gFFI.abModel.selectedTags.remove(tag); tags.removeWhere((element) => element == tag); diff --git a/flutter/lib/models/peer_tab_model.dart b/flutter/lib/models/peer_tab_model.dart index 5c3c6b01e..31d1855e8 100644 --- a/flutter/lib/models/peer_tab_model.dart +++ b/flutter/lib/models/peer_tab_model.dart @@ -1,10 +1,19 @@ import 'package:flutter/material.dart'; +import 'package:flutter_hbb/models/peer_model.dart'; import 'package:flutter_hbb/models/platform_model.dart'; +import 'package:get/get.dart'; import '../common.dart'; import 'model.dart'; -const int groupTabIndex = 4; +enum PeerTabIndex { + recent, + fav, + lan, + ab, + group, +} + const String defaultGroupTabname = 'Group'; class PeerTabModel with ChangeNotifier { @@ -26,6 +35,11 @@ class PeerTabModel with ChangeNotifier { Icons.group, ]; List get indexs => List.generate(tabNames.length, (index) => index); + List _selectedPeers = List.empty(growable: true); + List get selectedPeers => _selectedPeers; + bool get multiSelectionMode => _selectedPeers.isNotEmpty; + List _currentTabCachedPeers = List.empty(growable: true); + List get currentTabCachedPeers => _currentTabCachedPeers; PeerTabModel(this.parent) { // init currentTab @@ -45,7 +59,7 @@ class PeerTabModel with ChangeNotifier { String tabTooltip(int index, String groupName) { if (index >= 0 && index < tabNames.length) { - if (index == groupTabIndex) { + if (index == PeerTabIndex.group.index) { if (gFFI.userModel.isAdmin.value || groupName.isEmpty) { return translate(defaultGroupTabname); } else { @@ -66,4 +80,39 @@ class PeerTabModel with ChangeNotifier { assert(false); return Icons.help; } + + togglePeerSelect(Peer peer) { + if (_selectedPeers.firstWhereOrNull((p) => p.id == peer.id) != null) { + _selectedPeers.removeWhere((p) => p.id == peer.id); + } else { + _selectedPeers.add(peer); + } + notifyListeners(); + } + + onPeerCardTap(Peer peer) { + if (!multiSelectionMode) return; + togglePeerSelect(peer); + } + + closeSelection() { + _selectedPeers.clear(); + notifyListeners(); + } + + setCurrentTabCachedPeers(List peers) { + Future.delayed(Duration.zero, () { + _currentTabCachedPeers = peers; + notifyListeners(); + }); + } + + selectAll() { + _selectedPeers = _currentTabCachedPeers.toList(); + notifyListeners(); + } + + bool isPeerSelected(String id) { + return selectedPeers.firstWhereOrNull((p) => p.id == id) != null; + } } diff --git a/flutter/lib/models/user_model.dart b/flutter/lib/models/user_model.dart index 5730f5054..83df2e632 100644 --- a/flutter/lib/models/user_model.dart +++ b/flutter/lib/models/user_model.dart @@ -15,6 +15,7 @@ bool refreshingUser = false; class UserModel { final RxString userName = ''.obs; final RxBool isAdmin = false.obs; + bool get isLogin => userName.isNotEmpty; WeakReference parent; UserModel(this.parent); diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 36709d8c5..8a801b42a 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -978,6 +978,11 @@ impl PeerConfig { config } Err(err) => { + if let confy::ConfyError::GeneralLoadError(err) = &err { + if err.kind() == std::io::ErrorKind::NotFound { + return Default::default(); + } + } log::error!("Failed to load peer config '{}': {}", id, err); Default::default() } From 56c8e00b8b10df10c887c14f975bb77c8453eaa4 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Thu, 3 Aug 2023 22:06:09 +0800 Subject: [PATCH 275/612] unify name --- flutter/lib/models/group_model.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/models/group_model.dart b/flutter/lib/models/group_model.dart index bade00442..f2592fa2b 100644 --- a/flutter/lib/models/group_model.dart +++ b/flutter/lib/models/group_model.dart @@ -126,7 +126,7 @@ class GroupModel { throw error; } groupName.value = data['name'] ?? ''; - groupId.value = data['id'] ?? ''; + groupId.value = data['guid'] ?? ''; return groupId.value.isNotEmpty && groupName.isNotEmpty; } catch (e) { debugPrint('$e'); From f000e052670d6c1c4384864b2420d3bea6448ff6 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 4 Aug 2023 11:27:33 +0800 Subject: [PATCH 276/612] fix license migration --- src/platform/windows.rs | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 1a0ce6711..feadffb2c 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1067,12 +1067,10 @@ if exist \"{tmp_path}\\{app_name} Tray.lnk\" del /f /q \"{tmp_path}\\{app_name} }; // potential bug here: if run_cmd cancelled, but config file is changed. - if let Ok(lic) = crate::platform::windows::get_license_from_exe_name() { - if !lic.host.is_empty() { - Config::set_option("key".into(), lic.key); - Config::set_option("custom-rendezvous-server".into(), lic.host); - Config::set_option("api-server".into(), lic.api); - } + if let Some(lic) = get_license() { + Config::set_option("key".into(), lic.key); + Config::set_option("custom-rendezvous-server".into(), lic.host); + Config::set_option("api-server".into(), lic.api); } let cmds = format!( @@ -2342,3 +2340,19 @@ pub fn alloc_console() { alloc_console_and_redirect(); } } + +fn get_license() -> Option { + let mut lic: License = Default::default(); + if let Ok(tmp) = get_license_from_exe_name() { + lic = tmp; + } else { + // for back compatibility from migrating from <= 1.2.1 to 1.2.2 + lic.key = get_reg("Key"); + lic.host = get_reg("Host"); + lic.api = get_reg("Api"); + } + if lic.key.is_empty() || lic.host.is_empty() { + return None; + } + Some(lic) +} From f5cf291f550c3102f4c2c9a02211461e3062e49e Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 4 Aug 2023 13:11:24 +0800 Subject: [PATCH 277/612] left shift key for peer card select Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_card.dart | 4 +- flutter/lib/main.dart | 20 +++++++++ flutter/lib/models/peer_tab_model.dart | 52 +++++++++++++++++++---- 3 files changed, 66 insertions(+), 10 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index a69b302f5..44178bd5d 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -68,7 +68,7 @@ class _PeerCardState extends State<_PeerCard> child: GestureDetector( onTap: () { if (peerTabModel.multiSelectionMode) { - peerTabModel.onPeerCardTap(peer); + peerTabModel.togglePeerSelect(peer); } else { if (!isWebDesktop) connect(context, peer.id); } @@ -167,7 +167,7 @@ class _PeerCardState extends State<_PeerCard> peerTabModel.togglePeerSelect(peer); }, onTap: peerTabModel.multiSelectionMode - ? () => peerTabModel.onPeerCardTap(peer) + ? () => peerTabModel.togglePeerSelect(peer) : null, child: Obx(() => peerCardUiType.value == PeerUiType.grid ? _buildPeerCard(context, peer, deco) diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index 59ff18615..4578c2f21 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -5,6 +5,7 @@ import 'dart:io'; import 'package:bot_toast/bot_toast.dart'; import 'package:desktop_multi_window/desktop_multi_window.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_hbb/desktop/pages/desktop_tab_page.dart'; import 'package:flutter_hbb/desktop/pages/install_page.dart'; import 'package:flutter_hbb/desktop/pages/server_page.dart'; @@ -417,6 +418,9 @@ class _AppState extends State { : (context, child) { child = _keepScaleBuilder(context, child); child = botToastBuilder(context, child); + if (desktopType == DesktopType.main) { + child = keyListenerBuilder(context, child); + } return child; }, ), @@ -453,3 +457,19 @@ _registerEventHandler() { }); } } + +Widget keyListenerBuilder(BuildContext context, Widget? child) { + return RawKeyboardListener( + focusNode: FocusNode(), + child: child ?? Container(), + onKey: (RawKeyEvent event) { + if (event.logicalKey == LogicalKeyboardKey.shiftLeft) { + if (event is RawKeyDownEvent) { + gFFI.peerTabModel.isShiftDown = true; + } else if (event is RawKeyUpEvent) { + gFFI.peerTabModel.isShiftDown = false; + } + } + }, + ); +} diff --git a/flutter/lib/models/peer_tab_model.dart b/flutter/lib/models/peer_tab_model.dart index 31d1855e8..024158ccc 100644 --- a/flutter/lib/models/peer_tab_model.dart +++ b/flutter/lib/models/peer_tab_model.dart @@ -1,3 +1,5 @@ +import 'dart:math'; + import 'package:flutter/material.dart'; import 'package:flutter_hbb/models/peer_model.dart'; import 'package:flutter_hbb/models/platform_model.dart'; @@ -40,6 +42,8 @@ class PeerTabModel with ChangeNotifier { bool get multiSelectionMode => _selectedPeers.isNotEmpty; List _currentTabCachedPeers = List.empty(growable: true); List get currentTabCachedPeers => _currentTabCachedPeers; + bool isShiftDown = false; + String? _shiftAnchorId; PeerTabModel(this.parent) { // init currentTab @@ -82,21 +86,53 @@ class PeerTabModel with ChangeNotifier { } togglePeerSelect(Peer peer) { - if (_selectedPeers.firstWhereOrNull((p) => p.id == peer.id) != null) { - _selectedPeers.removeWhere((p) => p.id == peer.id); + final cached = _currentTabCachedPeers.map((e) => e.id).toList(); + int thisIndex = cached.indexOf(peer.id); + int closestIndex = -1; + String? closestId; + int smallestDiff = -1; + for (var i = 0; i < cached.length; i++) { + if (isPeerSelected(cached[i])) { + int diff = (i - thisIndex).abs(); + if (smallestDiff == -1 || diff < smallestDiff) { + closestIndex = i; + closestId = cached[i]; + smallestDiff = diff; + } + } + } + if (isShiftDown && + thisIndex >= 0 && + closestIndex >= 0 && + closestId != null) { + int shiftAnchorIndex = cached.indexOf(_shiftAnchorId ?? ''); + if (shiftAnchorIndex < 0) { + // use closest as shift anchor, rather than focused which we don't have + shiftAnchorIndex = closestIndex; + _shiftAnchorId = closestId; + } + int start = min(shiftAnchorIndex, thisIndex); + int end = max(shiftAnchorIndex, thisIndex); + _selectedPeers.clear(); + for (var i = start; i <= end; i++) { + if (!isPeerSelected(cached[i])) { + _selectedPeers.add(_currentTabCachedPeers[i]); + } + } } else { - _selectedPeers.add(peer); + if (isPeerSelected(peer.id)) { + _selectedPeers.removeWhere((p) => p.id == peer.id); + } else { + _selectedPeers.add(peer); + } + _shiftAnchorId = null; } notifyListeners(); } - onPeerCardTap(Peer peer) { - if (!multiSelectionMode) return; - togglePeerSelect(peer); - } - closeSelection() { _selectedPeers.clear(); + _shiftAnchorId = null; notifyListeners(); } From 2f5ae54c08e2d6a44d5a8e1e3816136376dae29d Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 4 Aug 2023 15:32:09 +0800 Subject: [PATCH 278/612] simple ab store and add batch operation toast Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_tab_page.dart | 4 ++++ flutter/lib/models/ab_model.dart | 2 +- libs/hbb_common/src/config.rs | 15 ++++++++------- libs/hbb_common/src/password_security.rs | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 56b5bc72c..f2de21dc7 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -309,6 +309,7 @@ class _PeerTabPageState extends State break; } gFFI.peerTabModel.closeSelection(); + showToast(translate('Successful')); } deletePeerConfirmDialog(onSubmit); @@ -334,6 +335,7 @@ class _PeerTabPageState extends State } await bind.mainStoreFav(favs: favs); gFFI.peerTabModel.closeSelection(); + showToast(translate('Successful')); }, child: Tooltip( message: translate('Add to Favorites'), @@ -354,6 +356,7 @@ class _PeerTabPageState extends State gFFI.abModel.addPeers(peers); gFFI.abModel.pushAb(); gFFI.peerTabModel.closeSelection(); + showToast(translate('Successful')); }, child: Tooltip( message: translate('Add to Address Book'), @@ -377,6 +380,7 @@ class _PeerTabPageState extends State peers.map((p) => p.id).toList(), selectedTags); gFFI.abModel.pushAb(); gFFI.peerTabModel.closeSelection(); + showToast(translate('Successful')); }); }, child: Tooltip( diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 9d24de94c..5bbbc0f9f 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -61,7 +61,7 @@ class AbModel { authHeaders['Accept-Encoding'] = "gzip"; final resp = await http.get(Uri.parse(api), headers: authHeaders); if (resp.body.isNotEmpty && resp.body.toLowerCase() != "null") { - Map json = jsonDecode(resp.body); + Map json = jsonDecode(utf8.decode(resp.bodyBytes)); if (json.containsKey('error')) { abError.value = json['error']; } else if (json.containsKey('data')) { diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 8a801b42a..56ffa9a01 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -23,7 +23,7 @@ use crate::{ log, password_security::{ decrypt_str_or_original, decrypt_vec_or_original, encrypt_str_or_original, - encrypt_vec_or_original, + encrypt_vec_or_original, symmetric_crypt, }, }; @@ -1504,13 +1504,14 @@ impl Ab { pub fn store(json: String) { if let Ok(mut file) = std::fs::File::create(Self::path()) { let data = compress(json.as_bytes()); - let max_len = 32 * 1024 * 1024; + let max_len = 64 * 1024 * 1024; if data.len() > max_len { - // not store original + // maxlen of function decompress return; } - let data = encrypt_vec_or_original(&data, PASSWORD_ENC_VERSION, max_len); - file.write_all(&data).ok(); + if let Ok(data) = symmetric_crypt(&data, true) { + file.write_all(&data).ok(); + } }; } @@ -1518,8 +1519,7 @@ impl Ab { if let Ok(mut file) = std::fs::File::open(Self::path()) { let mut data = vec![]; if file.read_to_end(&mut data).is_ok() { - let (data, succ, _) = decrypt_vec_or_original(&data, PASSWORD_ENC_VERSION); - if succ { + if let Ok(data) = symmetric_crypt(&data, false) { let data = decompress(&data); if let Ok(ab) = serde_json::from_str::(&String::from_utf8_lossy(&data)) { return ab; @@ -1527,6 +1527,7 @@ impl Ab { } } }; + Self::remove(); Ab::default() } diff --git a/libs/hbb_common/src/password_security.rs b/libs/hbb_common/src/password_security.rs index a127ccd2b..28b32e68e 100644 --- a/libs/hbb_common/src/password_security.rs +++ b/libs/hbb_common/src/password_security.rs @@ -164,7 +164,7 @@ fn decrypt(v: &[u8]) -> Result, ()> { } } -fn symmetric_crypt(data: &[u8], encrypt: bool) -> Result, ()> { +pub fn symmetric_crypt(data: &[u8], encrypt: bool) -> Result, ()> { use sodiumoxide::crypto::secretbox; use std::convert::TryInto; From 72c198a1e94cc1e0242fce88f92b3f3caedcd0c3 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 4 Aug 2023 23:19:10 +0800 Subject: [PATCH 279/612] add uuid to heartbeat --- src/hbbs_http/sync.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hbbs_http/sync.rs b/src/hbbs_http/sync.rs index f30685aea..84af1f69b 100644 --- a/src/hbbs_http/sync.rs +++ b/src/hbbs_http/sync.rs @@ -90,6 +90,7 @@ async fn start_hbbs_sync_async() { last_sent = Some(Instant::now()); let mut v = Value::default(); v["id"] = json!(Config::get_id()); + v["uuid"] = json!(crate::encode64(hbb_common::get_uuid())); v["ver"] = json!(hbb_common::get_version_number(crate::VERSION)); if !conns.is_empty() { v["conns"] = json!(conns); From f495bf105f5b4c1e8966dd3f028fd555dbaae2e6 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 1 Aug 2023 22:19:38 +0800 Subject: [PATCH 280/612] refact, separate remote window Signed-off-by: dignow --- flutter/lib/common.dart | 8 +- flutter/lib/consts.dart | 4 + .../lib/desktop/pages/desktop_home_page.dart | 8 +- .../desktop/pages/desktop_setting_page.dart | 4 +- flutter/lib/desktop/pages/remote_page.dart | 36 +-- .../lib/desktop/widgets/tabbar_widget.dart | 3 + .../lib/models/desktop_render_texture.dart | 46 +++ flutter/lib/utils/multi_window_manager.dart | 274 ++++++++++-------- src/flutter.rs | 11 +- src/flutter_ffi.rs | 15 +- src/ui.rs | 69 +---- src/ui_interface.rs | 52 +++- 12 files changed, 297 insertions(+), 233 deletions(-) create mode 100644 flutter/lib/models/desktop_render_texture.dart diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index b467f8484..522f93c6f 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -19,7 +19,6 @@ import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:flutter_hbb/utils/platform_channel.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; -import 'package:texture_rgba_renderer/texture_rgba_renderer.dart'; import 'package:uni_links/uni_links.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:uuid/uuid.dart'; @@ -47,11 +46,6 @@ var isMobile = isAndroid || isIOS; var version = ""; int androidVersion = 0; -/// Incriment count for textureId. -int _textureId = 0; -int get newTextureId => _textureId++; -final textureRenderer = TextureRgbaRenderer(); - /// only available for Windows target int windowsBuildNumber = 0; DesktopType? desktopType; @@ -1698,7 +1692,7 @@ bool handleUriLink({List? cmdArgs, Uri? uri, String? uriString}) { Future.delayed(Duration.zero, () { rustDeskWinManager.newRemoteDesktop(id!, password: password, - switch_uuid: switchUuid, + switchUuid: switchUuid, forceRelay: forceRelay); }); break; diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 9dff28c22..7acd0f04b 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -22,6 +22,8 @@ const String kAppTypeDesktopRemote = "remote"; const String kAppTypeDesktopFileTransfer = "file transfer"; const String kAppTypeDesktopPortForward = "port forward"; +const bool kCloseMultiWindowByHide = true; + const String kWindowMainWindowOnTop = "main_window_on_top"; const String kWindowGetWindowInfo = "get_window_info"; const String kWindowDisableGrabKeyboard = "disable_grab_keyboard"; @@ -30,6 +32,8 @@ const String kWindowEventHide = "hide"; const String kWindowEventShow = "show"; const String kWindowConnect = "connect"; +const String kOptionSeparateRemoteWindow = "enable-separate-remote-window"; + const String kUniLinksPrefix = "rustdesk://"; const String kUrlActionClose = "close"; diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index 32ca6c20d..2318a5b81 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -554,7 +554,13 @@ class _DesktopHomePageState extends State } else if (call.method == kWindowEventShow) { await rustDeskWinManager.registerActiveWindow(call.arguments["id"]); } else if (call.method == kWindowEventHide) { - await rustDeskWinManager.unregisterActiveWindow(call.arguments["id"]); + final wId = call.arguments['id']; + final isSeparateWindowEnabled = + mainGetBoolOptionSync(kOptionSeparateRemoteWindow); + if (isSeparateWindowEnabled && !kCloseMultiWindowByHide) { + await rustDeskWinManager.destroyWindow(wId); + } + await rustDeskWinManager.unregisterActiveWindow(wId); } else if (call.method == kWindowConnect) { await connectMainDesktop( call.arguments['id'], diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index db3840918..61b5ad072 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -316,7 +316,9 @@ class _GeneralState extends State<_General> { _OptionCheckBox(context, 'Confirm before closing multiple tabs', 'enable-confirm-closing-tabs', isServer: false), - _OptionCheckBox(context, 'Adaptive Bitrate', 'enable-abr') + _OptionCheckBox(context, 'Adaptive Bitrate', 'enable-abr'), + _OptionCheckBox( + context, 'Separate remote window', kOptionSeparateRemoteWindow, isServer: false), ]; // though this is related to GUI, but opengl problem affects all users, so put in config rather than local children.add(Tooltip( diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 35705a283..d9f4d4ec2 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -18,6 +18,7 @@ import '../../common/widgets/remote_input.dart'; import '../../common.dart'; import '../../common/widgets/dialog.dart'; import '../../models/model.dart'; +import '../../models/desktop_render_texture.dart'; import '../../models/platform_model.dart'; import '../../common/shared_state.dart'; import '../../utils/image.dart'; @@ -66,9 +67,7 @@ class _RemotePageState extends State late RxBool _zoomCursor; late RxBool _remoteCursorMoved; late RxBool _keyboardEnabled; - late RxInt _textureId; - late int _textureKey; - final useTextureRender = bind.mainUseTextureRender(); + late RenderTexture _renderTexture; final _blockableOverlayState = BlockableOverlayState(); @@ -86,8 +85,6 @@ class _RemotePageState extends State _showRemoteCursor = ShowRemoteCursorState.find(id); _keyboardEnabled = KeyboardEnabledState.find(id); _remoteCursorMoved = RemoteCursorMovedState.find(id); - _textureKey = newTextureId; - _textureId = RxInt(-1); } @override @@ -115,17 +112,13 @@ class _RemotePageState extends State Wakelock.enable(); } // Register texture. - _textureId.value = -1; - if (useTextureRender) { - textureRenderer.createTexture(_textureKey).then((id) async { - debugPrint("id: $id, texture_key: $_textureKey"); - if (id != -1) { - final ptr = await textureRenderer.getTexturePtr(_textureKey); - platformFFI.registerTexture(sessionId, ptr); - _textureId.value = id; - } - }); + if (mainGetBoolOptionSync(kOptionSeparateRemoteWindow)) { + _renderTexture = renderTexture; + } else { + _renderTexture = RenderTexture(); } + _renderTexture.create(sessionId); + _ffi.ffiModel.updateEventListener(sessionId, widget.id); bind.pluginSyncUi(syncTo: kAppTypeDesktopRemote); _ffi.qualityMonitorModel.checkShowQualityMonitor(sessionId); @@ -208,13 +201,8 @@ class _RemotePageState extends State Future dispose() async { // https://github.com/flutter/flutter/issues/64935 super.dispose(); - debugPrint("REMOTE PAGE dispose ${widget.id}"); - if (useTextureRender) { - platformFFI.registerTexture(sessionId, 0); - // sleep for a while to avoid the texture is used after it's unregistered. - await Future.delayed(Duration(milliseconds: 100)); - await textureRenderer.closeTexture(_textureKey); - } + debugPrint("REMOTE PAGE dispose session $sessionId ${widget.id}"); + await _renderTexture.destroy(); // ensure we leave this session, this is a double check bind.sessionEnterOrLeave(sessionId: sessionId, enter: false); DesktopMultiWindow.removeListener(this); @@ -392,8 +380,8 @@ class _RemotePageState extends State cursorOverImage: _cursorOverImage, keyboardEnabled: _keyboardEnabled, remoteCursorMoved: _remoteCursorMoved, - textureId: _textureId, - useTextureRender: useTextureRender, + textureId: _renderTexture.textureId, + useTextureRender: _renderTexture.useTextureRender, listenerBuilder: (child) => _buildRawTouchAndPointerRegion(child, enterView, leaveView), ); diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index adafaf0aa..1880e75fe 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -13,6 +13,7 @@ import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/main.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:flutter_hbb/models/state_model.dart'; +import 'package:flutter_hbb/models/desktop_render_texture.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:get/get_rx/src/rx_workers/utils/debouncer.dart'; @@ -574,6 +575,8 @@ class WindowActionPanelState extends State } await windowManager.hide(); } else { + renderTexture.destroy(); + // it's safe to hide the subwindow final controller = WindowController.fromWindowId(kWindowId!); if (Platform.isMacOS && await controller.isFullScreen()) { diff --git a/flutter/lib/models/desktop_render_texture.dart b/flutter/lib/models/desktop_render_texture.dart new file mode 100644 index 000000000..37d387eb2 --- /dev/null +++ b/flutter/lib/models/desktop_render_texture.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:texture_rgba_renderer/texture_rgba_renderer.dart'; + +import '../../common.dart'; +import './platform_model.dart'; + +class RenderTexture { + final RxInt textureId = RxInt(-1); + int _textureKey = -1; + SessionID? _sessionId; + final useTextureRender = bind.mainUseTextureRender(); + + final textureRenderer = TextureRgbaRenderer(); + + RenderTexture(); + + create(SessionID sessionId) { + if (useTextureRender) { + _textureKey = bind.getNextTextureKey(); + _sessionId = sessionId; + + textureRenderer.createTexture(_textureKey).then((id) async { + debugPrint("id: $id, texture_key: $_textureKey"); + if (id != -1) { + final ptr = await textureRenderer.getTexturePtr(_textureKey); + platformFFI.registerTexture(sessionId, ptr); + textureId.value = id; + } + }); + } + } + + destroy() async { + if (useTextureRender && _textureKey != -1 && _sessionId != null) { + platformFFI.registerTexture(_sessionId!, 0); + await textureRenderer.closeTexture(_textureKey); + _textureKey = -1; + } + } + + static final RenderTexture instance = RenderTexture(); +} + +// Global instance for separate texture +final renderTexture = RenderTexture.instance; diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 1b5eaf2a1..dfc169193 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -5,6 +5,7 @@ import 'package:desktop_multi_window/desktop_multi_window.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/common.dart'; /// must keep the order @@ -35,146 +36,159 @@ class RustDeskMultiWindowManager { static final instance = RustDeskMultiWindowManager._(); - final List _activeWindows = List.empty(growable: true); + final Set _inactiveWindows = {}; + final Set _activeWindows = {}; final List _windowActiveCallbacks = List.empty(growable: true); - int? _remoteDesktopWindowId; - int? _fileTransferWindowId; - int? _portForwardWindowId; + final Map> _remoteDesktopWindows = {}; + final Map> _fileTransferWindows = {}; + final Map> _portForwardWindows = {}; - Future newRemoteDesktop( - String remoteId, { + Future newSession( + WindowType type, + String methodName, + String remoteId, + Map> windows, { String? password, - String? switch_uuid, bool? forceRelay, + String? switchUuid, + bool? isRDP, }) async { var params = { - "type": WindowType.RemoteDesktop.index, + "type": type.index, "id": remoteId, "password": password, "forceRelay": forceRelay }; - if (switch_uuid != null) { - params['switch_uuid'] = switch_uuid; + if (switchUuid != null) { + params['switch_uuid'] = switchUuid; + } + if (isRDP != null) { + params['isRDP'] = isRDP; } final msg = jsonEncode(params); - try { - final ids = await DesktopMultiWindow.getAllSubWindowIds(); - if (!ids.contains(_remoteDesktopWindowId)) { - _remoteDesktopWindowId = null; - } - } on Error { - _remoteDesktopWindowId = null; - } - if (_remoteDesktopWindowId == null) { - final remoteDesktopController = - await DesktopMultiWindow.createWindow(msg); - remoteDesktopController + newSessionWindow() async { + final windowController = await DesktopMultiWindow.createWindow(msg); + windowController ..setFrame(const Offset(0, 0) & const Size(1280, 720)) ..center() - ..setTitle(getWindowNameWithId(remoteId, - overrideType: WindowType.RemoteDesktop)); + ..setTitle(getWindowNameWithId( + remoteId, + overrideType: type, + )); if (Platform.isMacOS) { - Future.microtask(() => remoteDesktopController.show()); + Future.microtask(() => windowController.show()); } - registerActiveWindow(remoteDesktopController.windowId); - _remoteDesktopWindowId = remoteDesktopController.windowId; - } else { - return call(WindowType.RemoteDesktop, "new_remote_desktop", msg); + registerActiveWindow(windowController.windowId); + windows[windowController.windowId] = {remoteId}; } + + // separate window for file transfer is not supported + bool separateWindow = type != WindowType.FileTransfer && + mainGetBoolOptionSync(kOptionSeparateRemoteWindow); + + if (separateWindow) { + for (final item in windows.entries) { + if (_activeWindows.contains(item.key) && + item.value.contains(remoteId)) { + // already has a window for this remote + final windowController = WindowController.fromWindowId(item.key); + windowController.show(); + // to-do: macos? + // if (Platform.isMacOS) { + // Future.microtask(() => windowController.show()); + // } + return; + } + } + if (kCloseMultiWindowByHide && _inactiveWindows.isNotEmpty) { + final windowId = _inactiveWindows.first; + final invokeRes = + await DesktopMultiWindow.invokeMethod(windowId, methodName, msg); + final windowController = WindowController.fromWindowId(windowId); + windowController.show(); + registerActiveWindow(windowController.windowId); + windows[windowController.windowId] = {remoteId}; + return invokeRes; + } else { + await newSessionWindow(); + } + } else { + if (windows.isEmpty) { + await newSessionWindow(); + } else { + return call(type, methodName, msg); + } + } + } + + Future newRemoteDesktop( + String remoteId, { + String? password, + String? switchUuid, + bool? forceRelay, + }) async { + return await newSession( + WindowType.RemoteDesktop, + 'new_remote_desktop', + remoteId, + _remoteDesktopWindows, + password: password, + forceRelay: forceRelay, + switchUuid: switchUuid, + ); } Future newFileTransfer(String remoteId, {String? password, bool? forceRelay}) async { - var msg = jsonEncode({ - "type": WindowType.FileTransfer.index, - "id": remoteId, - "password": password, - "forceRelay": forceRelay, - }); - - try { - final ids = await DesktopMultiWindow.getAllSubWindowIds(); - if (!ids.contains(_fileTransferWindowId)) { - _fileTransferWindowId = null; - } - } on Error { - _fileTransferWindowId = null; - } - if (_fileTransferWindowId == null) { - final fileTransferController = await DesktopMultiWindow.createWindow(msg); - fileTransferController - ..setFrame(const Offset(0, 0) & const Size(1280, 720)) - ..center() - ..setTitle(getWindowNameWithId(remoteId, - overrideType: WindowType.FileTransfer)); - if (Platform.isMacOS) { - Future.microtask(() => fileTransferController.show()); - } - registerActiveWindow(fileTransferController.windowId); - _fileTransferWindowId = fileTransferController.windowId; - } else { - return call(WindowType.FileTransfer, "new_file_transfer", msg); - } + return await newSession( + WindowType.FileTransfer, + 'new_file_transfer', + remoteId, + _fileTransferWindows, + password: password, + forceRelay: forceRelay, + ); } Future newPortForward(String remoteId, bool isRDP, {String? password, bool? forceRelay}) async { - final msg = jsonEncode({ - "type": WindowType.PortForward.index, - "id": remoteId, - "isRDP": isRDP, - "password": password, - "forceRelay": forceRelay, - }); - - try { - final ids = await DesktopMultiWindow.getAllSubWindowIds(); - if (!ids.contains(_portForwardWindowId)) { - _portForwardWindowId = null; - } - } on Error { - _portForwardWindowId = null; - } - if (_portForwardWindowId == null) { - final portForwardController = await DesktopMultiWindow.createWindow(msg); - portForwardController - ..setFrame(const Offset(0, 0) & const Size(1280, 720)) - ..center() - ..setTitle(getWindowNameWithId(remoteId, - overrideType: WindowType.PortForward)); - if (Platform.isMacOS) { - Future.microtask(() => portForwardController.show()); - } - registerActiveWindow(portForwardController.windowId); - _portForwardWindowId = portForwardController.windowId; - } else { - return call(WindowType.PortForward, "new_port_forward", msg); - } + return await newSession( + WindowType.PortForward, + 'new_port_forward', + remoteId, + _portForwardWindows, + password: password, + forceRelay: forceRelay, + isRDP: isRDP, + ); } Future call(WindowType type, String methodName, dynamic args) async { - int? windowId = findWindowByType(type); - if (windowId == null) { + final wnds = _findWindowsByType(type); + if (wnds.isEmpty) { return; } - return await DesktopMultiWindow.invokeMethod(windowId, methodName, args); + return await DesktopMultiWindow.invokeMethod( + wnds.keys.toList()[0], methodName, args); } - int? findWindowByType(WindowType type) { + Map> _findWindowsByType(WindowType type) { switch (type) { case WindowType.Main: - return 0; + return { + 0: {''} + }; case WindowType.RemoteDesktop: - return _remoteDesktopWindowId; + return _remoteDesktopWindows; case WindowType.FileTransfer: - return _fileTransferWindowId; + return _fileTransferWindows; case WindowType.PortForward: - return _portForwardWindowId; + return _portForwardWindows; case WindowType.Unknown: break; } - return null; + return {}; } void clearWindowType(WindowType type) { @@ -182,13 +196,13 @@ class RustDeskMultiWindowManager { case WindowType.Main: return; case WindowType.RemoteDesktop: - _remoteDesktopWindowId = null; + _remoteDesktopWindows.clear(); break; case WindowType.FileTransfer: - _fileTransferWindowId = null; + _fileTransferWindows.clear(); break; case WindowType.PortForward: - _portForwardWindowId = null; + _portForwardWindows.clear(); break; case WindowType.Unknown: break; @@ -209,27 +223,37 @@ class RustDeskMultiWindowManager { // skip main window, use window manager instead return; } - int? wId = findWindowByType(type); - if (wId != null) { + + List windows = []; + try { + windows = await DesktopMultiWindow.getAllSubWindowIds(); + } catch (e) { + debugPrint('Failed to getAllSubWindowIds of $type, $e'); + return; + } + + if (windows.isEmpty) { + return; + } + for (final wId in windows) { debugPrint("closing multi window: ${type.toString()}"); await saveWindowPosition(type, windowId: wId); try { - final ids = await DesktopMultiWindow.getAllSubWindowIds(); - if (!ids.contains(wId)) { - // no such window already - return; - } + // final ids = await DesktopMultiWindow.getAllSubWindowIds(); + // if (!ids.contains(wId)) { + // // no such window already + // return; + // } await WindowController.fromWindowId(wId).setPreventClose(false); await WindowController.fromWindowId(wId).close(); - // unregister the sub window in the main window. - unregisterActiveWindow(wId); + _activeWindows.remove(wId); } catch (e) { debugPrint("$e"); return; - } finally { - clearWindowType(type); } } + await _notifyActiveWindow(); + clearWindowType(type); } Future> getAllSubWindowIds() async { @@ -245,7 +269,7 @@ class RustDeskMultiWindowManager { } } - List getActiveWindows() { + Set getActiveWindows() { return _activeWindows; } @@ -256,14 +280,19 @@ class RustDeskMultiWindowManager { } Future registerActiveWindow(int windowId) async { - if (_activeWindows.contains(windowId)) { - // ignore - } else { - _activeWindows.add(windowId); - } + _activeWindows.add(windowId); + _inactiveWindows.remove(windowId); await _notifyActiveWindow(); } + Future destroyWindow(int windowId) async { + await WindowController.fromWindowId(windowId).setPreventClose(false); + await WindowController.fromWindowId(windowId).close(); + _remoteDesktopWindows.remove(windowId); + _fileTransferWindows.remove(windowId); + _portForwardWindows.remove(windowId); + } + /// Remove active window which has [`windowId`] /// /// [Availability] @@ -271,10 +300,9 @@ class RustDeskMultiWindowManager { /// For other windows, please post a unregister(hide) event to main window handler: /// `rustDeskWinManager.call(WindowType.Main, kWindowEventHide, {"id": windowId!});` Future unregisterActiveWindow(int windowId) async { - if (!_activeWindows.contains(windowId)) { - // ignore - } else { - _activeWindows.remove(windowId); + _activeWindows.remove(windowId); + if (windowId != kMainWindowId) { + _inactiveWindows.add(windowId); } await _notifyActiveWindow(); } diff --git a/src/flutter.rs b/src/flutter.rs index de4791f38..c35f7340d 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -186,7 +186,7 @@ pub type FlutterRgbaRendererPluginOnRgba = unsafe extern "C" fn( #[derive(Clone)] struct VideoRenderer { // TextureRgba pointer in flutter native. - ptr: usize, + ptr: Arc>, width: usize, height: usize, on_rgba_func: Option>, @@ -214,7 +214,7 @@ impl Default for VideoRenderer { } }; Self { - ptr: 0, + ptr: Default::default(), width: 0, height: 0, on_rgba_func, @@ -231,7 +231,8 @@ impl VideoRenderer { } pub fn on_rgba(&self, rgba: &mut scrap::ImageRgb) { - if self.ptr == usize::default() { + let ptr = self.ptr.read().unwrap(); + if *ptr == usize::default() { return; } @@ -243,7 +244,7 @@ impl VideoRenderer { if let Some(func) = &self.on_rgba_func { unsafe { func( - self.ptr as _, + *ptr as _, rgba.raw.as_ptr() as _, rgba.raw.len() as _, rgba.w as _, @@ -328,7 +329,7 @@ impl FlutterHandler { #[inline] #[cfg(feature = "flutter_texture_render")] pub fn register_texture(&mut self, ptr: usize) { - self.renderer.write().unwrap().ptr = ptr; + *self.renderer.read().unwrap().ptr.write().unwrap() = ptr; } #[inline] diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 8925b5804..710a3f3db 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -15,7 +15,7 @@ use flutter_rust_bridge::{StreamSink, SyncReturn}; use hbb_common::allow_err; use hbb_common::{ config::{self, LocalConfig, PeerConfig, PeerInfoSerde}, - fs, log, + fs, lazy_static, log, message_proto::KeyboardMode, ResultType, }; @@ -24,11 +24,19 @@ use std::{ ffi::{CStr, CString}, os::raw::c_char, str::FromStr, + sync::{ + atomic::{AtomicI32, Ordering}, + Arc, + }, time::SystemTime, }; pub type SessionID = uuid::Uuid; +lazy_static::lazy_static! { + static ref TEXTURE_RENDER_KEY: Arc = Arc::new(AtomicI32::new(0)); +} + fn initialize(app_dir: &str) { *config::APP_DIR.write().unwrap() = app_dir.to_owned(); #[cfg(target_os = "android")] @@ -197,6 +205,11 @@ pub fn session_set_flutter_config(session_id: SessionID, k: String, v: String) { } } +pub fn get_next_texture_key() -> SyncReturn { + let k = TEXTURE_RENDER_KEY.fetch_add(1, Ordering::SeqCst) + 1; + SyncReturn(k) +} + pub fn get_local_flutter_config(k: String) -> SyncReturn { SyncReturn(ui_interface::get_local_flutter_config(k)) } diff --git a/src/ui.rs b/src/ui.rs index 8f036509b..309d0aa6b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -94,8 +94,7 @@ pub fn start(args: &mut [String]) { args[1] = id; } if args.is_empty() { - let children: Children = Default::default(); - std::thread::spawn(move || check_zombie(children)); + std::thread::spawn(move || check_zombie()); crate::common::check_software_update(); frame.event_handler(UI {}); frame.sciter_handler(UIHostHandler {}); @@ -693,28 +692,6 @@ impl sciter::host::HostHandler for UIHostHandler { } } -pub fn check_zombie(children: Children) { - let mut deads = Vec::new(); - loop { - let mut lock = children.lock().unwrap(); - let mut n = 0; - for (id, c) in lock.1.iter_mut() { - if let Ok(Some(_)) = c.try_wait() { - deads.push(id.clone()); - n += 1; - } - } - for ref id in deads.drain(..) { - lock.1.remove(id); - } - if n > 0 { - lock.0 = true; - } - drop(lock); - std::thread::sleep(std::time::Duration::from_millis(100)); - } -} - #[cfg(not(target_os = "linux"))] fn get_sound_inputs() -> Vec { let mut out = Vec::new(); @@ -748,50 +725,6 @@ pub fn value_crash_workaround(values: &[Value]) -> Arc> { persist } -#[inline] -pub fn new_remote(id: String, remote_type: String, force_relay: bool) { - let mut lock = CHILDREN.lock().unwrap(); - let mut args = vec![format!("--{}", remote_type), id.clone()]; - if force_relay { - args.push("".to_string()); // password - args.push("--relay".to_string()); - } - let key = (id.clone(), remote_type.clone()); - if let Some(c) = lock.1.get_mut(&key) { - if let Ok(Some(_)) = c.try_wait() { - lock.1.remove(&key); - } else { - if remote_type == "rdp" { - allow_err!(c.kill()); - std::thread::sleep(std::time::Duration::from_millis(30)); - c.try_wait().ok(); - lock.1.remove(&key); - } else { - return; - } - } - } - match crate::run_me(args) { - Ok(child) => { - lock.1.insert(key, child); - } - Err(err) => { - log::error!("Failed to spawn remote: {}", err); - } - } -} - -#[inline] -pub fn recent_sessions_updated() -> bool { - let mut children = CHILDREN.lock().unwrap(); - if children.0 { - children.0 = false; - true - } else { - false - } -} - pub fn get_icon() -> String { // 128x128 #[cfg(target_os = "macos")] diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 512589b6e..bcc2ab54f 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -65,6 +65,7 @@ lazy_static::lazy_static! { static ref OPTION_SYNCED: Arc> = Default::default(); static ref OPTIONS : Arc>> = Arc::new(Mutex::new(Config::get_options())); pub static ref SENDER : Mutex> = Mutex::new(check_connect_status(true)); + static ref CHILDREN : Children = Default::default(); } const INIT_ASYNC_JOB_STATUS: &str = " "; @@ -827,11 +828,11 @@ pub fn check_super_user_permission() -> bool { return true; } -#[allow(dead_code)] -pub fn check_zombie(children: Children) { +#[cfg(not(any(target_os = "android", target_os = "ios", feature = "flutter")))] +pub fn check_zombie() { let mut deads = Vec::new(); loop { - let mut lock = children.lock().unwrap(); + let mut lock = CHILDREN.lock().unwrap(); let mut n = 0; for (id, c) in lock.1.iter_mut() { if let Ok(Some(_)) = c.try_wait() { @@ -850,6 +851,51 @@ pub fn check_zombie(children: Children) { } } +#[inline] +#[cfg(not(any(target_os = "android", target_os = "ios", feature = "flutter")))] +pub fn recent_sessions_updated() -> bool { + let mut children = CHILDREN.lock().unwrap(); + if children.0 { + children.0 = false; + true + } else { + false + } +} + +#[cfg(not(any(target_os = "android", target_os = "ios", feature = "flutter")))] +pub fn new_remote(id: String, remote_type: String, force_relay: bool) { + let mut lock = CHILDREN.lock().unwrap(); + let mut args = vec![format!("--{}", remote_type), id.clone()]; + if force_relay { + args.push("".to_string()); // password + args.push("--relay".to_string()); + } + let key = (id.clone(), remote_type.clone()); + if let Some(c) = lock.1.get_mut(&key) { + if let Ok(Some(_)) = c.try_wait() { + lock.1.remove(&key); + } else { + if remote_type == "rdp" { + allow_err!(c.kill()); + std::thread::sleep(std::time::Duration::from_millis(30)); + c.try_wait().ok(); + lock.1.remove(&key); + } else { + return; + } + } + } + match crate::run_me(args) { + Ok(child) => { + lock.1.insert(key, child); + } + Err(err) => { + log::error!("Failed to spawn remote: {}", err); + } + } +} + // Make sure `SENDER` is inited here. #[inline] #[cfg(not(any(target_os = "android", target_os = "ios")))] From 773a74e2a90fbe3048017c7c5ef0d0a186fbaedd Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 2 Aug 2023 20:38:09 +0800 Subject: [PATCH 281/612] refact, separate remote window, try active session Signed-off-by: dignow --- flutter/lib/common.dart | 2 +- flutter/lib/consts.dart | 5 ++ .../lib/desktop/pages/desktop_home_page.dart | 2 +- .../desktop/pages/file_manager_tab_page.dart | 4 +- .../desktop/pages/port_forward_tab_page.dart | 4 +- .../lib/desktop/pages/remote_tab_page.dart | 10 +++- .../lib/desktop/widgets/tabbar_widget.dart | 11 ++++- flutter/lib/main.dart | 2 +- flutter/lib/models/chat_model.dart | 4 +- flutter/lib/models/model.dart | 2 +- flutter/lib/models/server_model.dart | 4 +- flutter/lib/utils/multi_window_manager.dart | 46 ++++++++----------- 12 files changed, 54 insertions(+), 42 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 522f93c6f..ee7806a14 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -543,7 +543,7 @@ closeConnection({String? id}) { } } -void window_on_top(int? id) async { +void windowOnTop(int? id) async { if (!isDesktop) { return; } diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 7acd0f04b..e44da0854 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -32,6 +32,11 @@ const String kWindowEventHide = "hide"; const String kWindowEventShow = "show"; const String kWindowConnect = "connect"; +const String kWindowEventNewRemoteDesktop = "new_remote_desktop"; +const String kWindowEventNewFileTransfer = "new_file_transfer"; +const String kWindowEventNewPortForward = "new_port_forward"; +const String kWindowEventActiveSession = "active_session"; + const String kOptionSeparateRemoteWindow = "enable-separate-remote-window"; const String kUniLinksPrefix = "rustdesk://"; diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index 2318a5b81..6b7fe7140 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -527,7 +527,7 @@ class _DesktopHomePageState extends State debugPrint( "[Main] call ${call.method} with args ${call.arguments} from window $fromWindowId"); if (call.method == kWindowMainWindowOnTop) { - window_on_top(null); + windowOnTop(null); } else if (call.method == kWindowGetWindowInfo) { final screen = (await window_size.getWindowInfo()).screen; if (screen == null) { diff --git a/flutter/lib/desktop/pages/file_manager_tab_page.dart b/flutter/lib/desktop/pages/file_manager_tab_page.dart index c011fe48d..1412ba059 100644 --- a/flutter/lib/desktop/pages/file_manager_tab_page.dart +++ b/flutter/lib/desktop/pages/file_manager_tab_page.dart @@ -60,10 +60,10 @@ class _FileManagerTabPageState extends State { print( "[FileTransfer] call ${call.method} with args ${call.arguments} from window $fromWindowId to ${windowId()}"); // for simplify, just replace connectionId - if (call.method == "new_file_transfer") { + if (call.method == kWindowEventNewFileTransfer) { final args = jsonDecode(call.arguments); final id = args['id']; - window_on_top(windowId()); + windowOnTop(windowId()); tabController.add(TabInfo( key: id, label: id, diff --git a/flutter/lib/desktop/pages/port_forward_tab_page.dart b/flutter/lib/desktop/pages/port_forward_tab_page.dart index df824e431..621f393e0 100644 --- a/flutter/lib/desktop/pages/port_forward_tab_page.dart +++ b/flutter/lib/desktop/pages/port_forward_tab_page.dart @@ -60,11 +60,11 @@ class _PortForwardTabPageState extends State { debugPrint( "[Port Forward] call ${call.method} with args ${call.arguments} from window $fromWindowId"); // for simplify, just replace connectionId - if (call.method == "new_port_forward") { + if (call.method == kWindowEventNewPortForward) { final args = jsonDecode(call.arguments); final id = args['id']; final isRDP = args['isRDP']; - window_on_top(windowId()); + windowOnTop(windowId()); if (tabController.state.value.tabs.indexWhere((e) => e.key == id) >= 0) { debugPrint("port forward $id exists"); diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 2e553e724..296b7ec08 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -95,11 +95,11 @@ class _ConnectionTabPageState extends State { "[Remote Page] call ${call.method} with args ${call.arguments} from window $fromWindowId"); // for simplify, just replace connectionId - if (call.method == "new_remote_desktop") { + if (call.method == kWindowEventNewRemoteDesktop) { final args = jsonDecode(call.arguments); final id = args['id']; final switchUuid = args['switch_uuid']; - window_on_top(windowId()); + windowOnTop(windowId()); ConnectionTypeState.init(id); _toolbarState.setShow( bind.mainGetUserDefaultOption(key: 'collapse_toolbar') != 'Y'); @@ -125,6 +125,12 @@ class _ConnectionTabPageState extends State { tabController.clear(); } else if (call.method == kWindowActionRebuild) { reloadCurrentWindow(); + } else if (call.method == kWindowEventActiveSession) { + final jumpOk = tabController.jumpToByKey(call.arguments); + if (jumpOk) { + windowOnTop(windowId()); + } + return jumpOk; } _update_remote_count(); }); diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 1880e75fe..2a7d1452e 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -147,8 +147,10 @@ class DesktopTabController { /// For addTab, tabPage has not been initialized, set [callOnSelected] to false, /// and call [onSelected] at the end of initState - void jumpTo(int index, {bool callOnSelected = true}) { - if (!isDesktop || index < 0) return; + bool jumpTo(int index, {bool callOnSelected = true}) { + if (!isDesktop || index < 0) { + return false; + } state.update((val) { val!.selected = index; Future.delayed(Duration(milliseconds: 100), (() { @@ -169,8 +171,13 @@ class DesktopTabController { onSelected?.call(key); } } + return true; } + bool jumpToByKey(String key, {bool callOnSelected = true}) => + jumpTo(state.value.tabs.indexWhere((tab) => tab.key == key), + callOnSelected: callOnSelected); + void closeBy(String? key) { if (!isDesktop) return; assert(onRemoved != null); diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index 4578c2f21..8fcbd4ad0 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -250,7 +250,7 @@ showCmWindow({bool isStartup = false}) async { await windowManager.minimize(); //needed await windowManager.setSizeAlignment( kConnectionManagerWindowSizeClosedChat, Alignment.topRight); - window_on_top(null); + windowOnTop(null); } } } diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index fe1de2512..898427351 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -367,7 +367,7 @@ class ChatModel with ChangeNotifier { // not minisized: add count if (await WindowController.fromWindowId(stateGlobal.windowId) .isMinimized()) { - window_on_top(stateGlobal.windowId); + windowOnTop(stateGlobal.windowId); if (notSelected) { tabController.jumpTo(index); } @@ -386,7 +386,7 @@ class ChatModel with ChangeNotifier { return; } if (isDesktop) { - window_on_top(null); + windowOnTop(null); // disable auto jumpTo other tab when hasFocus, and mark unread message final currentSelectedTab = session.serverModel.tabController.state.value.selectedTabInfo; diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 54965680a..9c20a6a95 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -260,7 +260,7 @@ class FfiModel with ChangeNotifier { }); break; default: - window_on_top(null); + windowOnTop(null); break; } } diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 6867aa6fe..6e6dd2b82 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -473,7 +473,7 @@ class ServerModel with ChangeNotifier { onTap: () {}, page: desktop.buildConnectionCard(client))); Future.delayed(Duration.zero, () async { - if (!hideCm) window_on_top(null); + if (!hideCm) windowOnTop(null); }); // Only do the hidden task when on Desktop. if (client.authorized && isDesktop) { @@ -612,7 +612,7 @@ class ServerModel with ChangeNotifier { if (client.incomingVoiceCall) { // Has incoming phone call, let's set the window on top. Future.delayed(Duration.zero, () { - window_on_top(null); + windowOnTop(null); }); } notifyListeners(); diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index dfc169193..8b18eb750 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -39,15 +39,15 @@ class RustDeskMultiWindowManager { final Set _inactiveWindows = {}; final Set _activeWindows = {}; final List _windowActiveCallbacks = List.empty(growable: true); - final Map> _remoteDesktopWindows = {}; - final Map> _fileTransferWindows = {}; - final Map> _portForwardWindows = {}; + final List _remoteDesktopWindows = List.empty(growable: true); + final List _fileTransferWindows = List.empty(growable: true); + final List _portForwardWindows = List.empty(growable: true); Future newSession( WindowType type, String methodName, String remoteId, - Map> windows, { + List windows, { String? password, bool? forceRelay, String? switchUuid, @@ -80,27 +80,23 @@ class RustDeskMultiWindowManager { Future.microtask(() => windowController.show()); } registerActiveWindow(windowController.windowId); - windows[windowController.windowId] = {remoteId}; + windows.add(windowController.windowId); } // separate window for file transfer is not supported bool separateWindow = type != WindowType.FileTransfer && mainGetBoolOptionSync(kOptionSeparateRemoteWindow); - if (separateWindow) { - for (final item in windows.entries) { - if (_activeWindows.contains(item.key) && - item.value.contains(remoteId)) { - // already has a window for this remote - final windowController = WindowController.fromWindowId(item.key); - windowController.show(); - // to-do: macos? - // if (Platform.isMacOS) { - // Future.microtask(() => windowController.show()); - // } + if (windows.length > 1 || separateWindow) { + for (final windowId in windows) { + if (await DesktopMultiWindow.invokeMethod( + windowId, kWindowEventActiveSession, remoteId)) { return; } } + } + + if (separateWindow) { if (kCloseMultiWindowByHide && _inactiveWindows.isNotEmpty) { final windowId = _inactiveWindows.first; final invokeRes = @@ -108,7 +104,7 @@ class RustDeskMultiWindowManager { final windowController = WindowController.fromWindowId(windowId); windowController.show(); registerActiveWindow(windowController.windowId); - windows[windowController.windowId] = {remoteId}; + windows.add(windowController.windowId); return invokeRes; } else { await newSessionWindow(); @@ -130,7 +126,7 @@ class RustDeskMultiWindowManager { }) async { return await newSession( WindowType.RemoteDesktop, - 'new_remote_desktop', + kWindowEventNewRemoteDesktop, remoteId, _remoteDesktopWindows, password: password, @@ -143,7 +139,7 @@ class RustDeskMultiWindowManager { {String? password, bool? forceRelay}) async { return await newSession( WindowType.FileTransfer, - 'new_file_transfer', + kWindowEventNewFileTransfer, remoteId, _fileTransferWindows, password: password, @@ -155,7 +151,7 @@ class RustDeskMultiWindowManager { {String? password, bool? forceRelay}) async { return await newSession( WindowType.PortForward, - 'new_port_forward', + kWindowEventNewPortForward, remoteId, _portForwardWindows, password: password, @@ -170,15 +166,13 @@ class RustDeskMultiWindowManager { return; } return await DesktopMultiWindow.invokeMethod( - wnds.keys.toList()[0], methodName, args); + wnds[0], methodName, args); } - Map> _findWindowsByType(WindowType type) { + List _findWindowsByType(WindowType type) { switch (type) { case WindowType.Main: - return { - 0: {''} - }; + return [0]; case WindowType.RemoteDesktop: return _remoteDesktopWindows; case WindowType.FileTransfer: @@ -188,7 +182,7 @@ class RustDeskMultiWindowManager { case WindowType.Unknown: break; } - return {}; + return []; } void clearWindowType(WindowType type) { From 688ecef4cc082b82db1625be1116c2bce9eb224a Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 2 Aug 2023 22:02:18 +0800 Subject: [PATCH 282/612] refact, separate remote window, save session position Signed-off-by: dignow --- flutter/lib/common.dart | 28 +++++++++++++++++-- flutter/lib/consts.dart | 1 + .../lib/desktop/pages/remote_tab_page.dart | 13 ++++++++- flutter/lib/main.dart | 2 +- flutter/lib/utils/multi_window_manager.dart | 2 +- src/flutter_ffi.rs | 19 +++++++++++++ 6 files changed, 60 insertions(+), 5 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index ee7806a14..ff88c5647 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1408,8 +1408,24 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { sz.width, sz.height, position.dx, position.dy, isMaximized); debugPrint( "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}"); + await bind.setLocalFlutterConfig( k: kWindowPrefix + type.name, v: pos.toString()); + + if (type == WindowType.RemoteDesktop && windowId != null) { + await _saveSessionWindowPosition(windowId, pos); + } +} + +Future _saveSessionWindowPosition(int windowId, LastWindowPosition pos) async { + final remoteList = await DesktopMultiWindow.invokeMethod( + windowId, kWindowEventGetRemoteList, null); + if (remoteList != null) { + for (final peerId in remoteList.split(',')) { + bind.sessionSetFlutterConfigByPeerId( + id: peerId, k: kWindowPrefix, v: pos.toString()); + } + } } Future _adjustRestoreMainWindowSize(double? width, double? height) async { @@ -1499,7 +1515,7 @@ Future _adjustRestoreMainWindowOffset( /// Restore window position and size on start /// Note that windowId must be provided if it's subwindow -Future restoreWindowPosition(WindowType type, {int? windowId}) async { +Future restoreWindowPosition(WindowType type, {int? windowId, String? peerId}) async { if (bind .mainGetEnv(key: "DISABLE_RUSTDESK_RESTORE_WINDOW_POSITION") .isNotEmpty) { @@ -1508,8 +1524,16 @@ Future restoreWindowPosition(WindowType type, {int? windowId}) async { if (type != WindowType.Main && windowId == null) { debugPrint( "Error: windowId cannot be null when saving positions for sub window"); + return false; } - final pos = bind.getLocalFlutterConfig(k: kWindowPrefix + type.name); + + String? pos; + if (type == WindowType.RemoteDesktop && windowId != null && peerId != null) { + pos = await bind.sessionGetFlutterConfigByPeerId(id: peerId, k: kWindowPrefix); + } + pos ??= bind.getLocalFlutterConfig(k: kWindowPrefix + type.name); + + var lpos = LastWindowPosition.loadFromString(pos); if (lpos == null) { debugPrint("no window position saved, ignoring position restoration"); diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index e44da0854..f945a6292 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -36,6 +36,7 @@ const String kWindowEventNewRemoteDesktop = "new_remote_desktop"; const String kWindowEventNewFileTransfer = "new_file_transfer"; const String kWindowEventNewPortForward = "new_port_forward"; const String kWindowEventActiveSession = "active_session"; +const String kWindowEventGetRemoteList = "get_remote_list"; const String kOptionSeparateRemoteWindow = "enable-separate-remote-window"; diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 296b7ec08..4ab731649 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -131,11 +131,22 @@ class _ConnectionTabPageState extends State { windowOnTop(windowId()); } return jumpOk; + } else if (call.method == kWindowEventGetRemoteList) { + return tabController.state.value.tabs + .map((e) => e.key) + .toList() + .join(','); } _update_remote_count(); }); Future.delayed(Duration.zero, () { - restoreWindowPosition(WindowType.RemoteDesktop, windowId: windowId()); + restoreWindowPosition( + WindowType.RemoteDesktop, + windowId: windowId(), + peerId: tabController.state.value.tabs.isEmpty + ? null + : tabController.state.value.tabs[0].key, + ); }); } diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index 8fcbd4ad0..14db061bd 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -197,7 +197,7 @@ void runMultiWindow( switch (appType) { case kAppTypeDesktopRemote: await restoreWindowPosition(WindowType.RemoteDesktop, - windowId: kWindowId!); + windowId: kWindowId!, peerId: argument['id'] as String?); break; case kAppTypeDesktopFileTransfer: await restoreWindowPosition(WindowType.FileTransfer, diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 8b18eb750..3fcb17c2b 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -70,7 +70,7 @@ class RustDeskMultiWindowManager { newSessionWindow() async { final windowController = await DesktopMultiWindow.createWindow(msg); windowController - ..setFrame(const Offset(0, 0) & const Size(1280, 720)) + ..setFrame(const Offset(0, 0) & Size(1280 + windowController.windowId * 20, 720 + windowController.windowId * 20)) ..center() ..setTitle(getWindowNameWithId( remoteId, diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 710a3f3db..5df00c344 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -205,6 +205,25 @@ pub fn session_set_flutter_config(session_id: SessionID, k: String, v: String) { } } +pub fn session_get_flutter_config_by_peer_id(id: String, k: String) -> Option { + if let Some((_, session)) = SESSIONS.read().unwrap().iter().find(|(_, s)| s.id == id) { + Some(session.get_flutter_config(k)) + } else { + None + } +} + +pub fn session_set_flutter_config_by_peer_id(id: String, k: String, v: String) { + if let Some((_, session)) = SESSIONS + .write() + .unwrap() + .iter_mut() + .find(|(_, s)| s.id == id) + { + session.save_flutter_config(k, v); + } +} + pub fn get_next_texture_key() -> SyncReturn { let k = TEXTURE_RENDER_KEY.fetch_add(1, Ordering::SeqCst) + 1; SyncReturn(k) From 1a8463015f22cb3513d20c491c7562b580b00334 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 2 Aug 2023 23:10:31 +0800 Subject: [PATCH 283/612] refact, separate remote window, connect(separate window) Signed-off-by: dignow --- flutter/lib/common.dart | 52 ++++++++++++------- flutter/lib/common/widgets/peer_card.dart | 48 +++++++++++------ .../lib/desktop/pages/desktop_home_page.dart | 3 +- flutter/lib/desktop/pages/remote_page.dart | 2 +- flutter/lib/utils/multi_window_manager.dart | 15 ++++-- src/lang/ca.rs | 2 + src/lang/cn.rs | 2 + src/lang/cs.rs | 2 + src/lang/da.rs | 2 + src/lang/de.rs | 2 + src/lang/el.rs | 2 + src/lang/eo.rs | 2 + src/lang/es.rs | 2 + src/lang/fa.rs | 2 + src/lang/fr.rs | 2 + src/lang/hu.rs | 2 + src/lang/id.rs | 2 + src/lang/it.rs | 2 + src/lang/ja.rs | 2 + src/lang/ko.rs | 2 + src/lang/kz.rs | 2 + src/lang/lt.rs | 2 + src/lang/nl.rs | 2 + src/lang/pl.rs | 2 + src/lang/pt_PT.rs | 2 + src/lang/ptbr.rs | 2 + src/lang/ro.rs | 2 + src/lang/ru.rs | 2 + src/lang/sk.rs | 2 + src/lang/sl.rs | 2 + src/lang/sq.rs | 2 + src/lang/sr.rs | 2 + src/lang/sv.rs | 2 + src/lang/template.rs | 2 + src/lang/th.rs | 2 + src/lang/tr.rs | 2 + src/lang/tw.rs | 2 + src/lang/ua.rs | 2 + src/lang/vn.rs | 2 + 39 files changed, 146 insertions(+), 42 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index ff88c5647..a9117554d 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1515,7 +1515,8 @@ Future _adjustRestoreMainWindowOffset( /// Restore window position and size on start /// Note that windowId must be provided if it's subwindow -Future restoreWindowPosition(WindowType type, {int? windowId, String? peerId}) async { +Future restoreWindowPosition(WindowType type, + {int? windowId, String? peerId}) async { if (bind .mainGetEnv(key: "DISABLE_RUSTDESK_RESTORE_WINDOW_POSITION") .isNotEmpty) { @@ -1529,11 +1530,11 @@ Future restoreWindowPosition(WindowType type, {int? windowId, String? peer String? pos; if (type == WindowType.RemoteDesktop && windowId != null && peerId != null) { - pos = await bind.sessionGetFlutterConfigByPeerId(id: peerId, k: kWindowPrefix); + pos = await bind.sessionGetFlutterConfigByPeerId( + id: peerId, k: kWindowPrefix); } pos ??= bind.getLocalFlutterConfig(k: kWindowPrefix + type.name); - - + var lpos = LastWindowPosition.loadFromString(pos); if (lpos == null) { debugPrint("no window position saved, ignoring position restoration"); @@ -1781,17 +1782,20 @@ List? urlLinkToCmdArgs(Uri uri) { return null; } -connectMainDesktop(String id, - {required bool isFileTransfer, - required bool isTcpTunneling, - required bool isRDP, - bool? forceRelay}) async { +connectMainDesktop( + String id, { + required bool isFileTransfer, + required bool isTcpTunneling, + required bool isRDP, + bool? forceRelay, + bool forceSeparateWindow = false, +}) async { if (isFileTransfer) { await rustDeskWinManager.newFileTransfer(id, forceRelay: forceRelay); } else if (isTcpTunneling || isRDP) { await rustDeskWinManager.newPortForward(id, isRDP, forceRelay: forceRelay); } else { - await rustDeskWinManager.newRemoteDesktop(id, forceRelay: forceRelay); + await rustDeskWinManager.newRemoteDesktop(id, forceRelay: forceRelay, forceSeparateWindow: forceSeparateWindow); } } @@ -1799,10 +1803,14 @@ connectMainDesktop(String id, /// If [isFileTransfer], starts a session only for file transfer. /// If [isTcpTunneling], starts a session only for tcp tunneling. /// If [isRDP], starts a session only for rdp. -connect(BuildContext context, String id, - {bool isFileTransfer = false, - bool isTcpTunneling = false, - bool isRDP = false}) async { +connect( + BuildContext context, + String id, { + bool isFileTransfer = false, + bool isTcpTunneling = false, + bool isRDP = false, + bool forceSeparateWindow = false, +}) async { if (id == '') return; id = id.replaceAll(' ', ''); final oldId = id; @@ -1813,18 +1821,22 @@ connect(BuildContext context, String id, if (isDesktop) { if (desktopType == DesktopType.main) { - await connectMainDesktop(id, - isFileTransfer: isFileTransfer, - isTcpTunneling: isTcpTunneling, - isRDP: isRDP, - forceRelay: forceRelay); + await connectMainDesktop( + id, + isFileTransfer: isFileTransfer, + isTcpTunneling: isTcpTunneling, + isRDP: isRDP, + forceRelay: forceRelay, + forceSeparateWindow: forceSeparateWindow, + ); } else { await rustDeskWinManager.call(WindowType.Main, kWindowConnect, { 'id': id, 'isFileTransfer': isFileTransfer, 'isTcpTunneling': isTcpTunneling, 'isRDP': isRDP, - "forceRelay": forceRelay, + 'forceRelay': forceRelay, + 'forceSeparateWindow': forceSeparateWindow, }); } } else { diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 44178bd5d..4e03edfbd 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -399,10 +399,14 @@ abstract class BasePeerCard extends StatelessWidget { Future>> _buildMenuItems(BuildContext context); MenuEntryBase _connectCommonAction( - BuildContext context, String id, String title, - {bool isFileTransfer = false, - bool isTcpTunneling = false, - bool isRDP = false}) { + BuildContext context, + String id, + String title, { + bool isFileTransfer = false, + bool isTcpTunneling = false, + bool isRDP = false, + bool forceSeparateWindow = false, + }) { return MenuEntryButton( childBuilder: (TextStyle? style) => Text( title, @@ -415,6 +419,7 @@ abstract class BasePeerCard extends StatelessWidget { isFileTransfer: isFileTransfer, isTcpTunneling: isTcpTunneling, isRDP: isRDP, + forceSeparateWindow: forceSeparateWindow, ); }, padding: menuPadding, @@ -423,13 +428,26 @@ abstract class BasePeerCard extends StatelessWidget { } @protected - MenuEntryBase _connectAction(BuildContext context, Peer peer) { + List> _connectActions(BuildContext context, Peer peer) { + final actions = [_connectAction(context, peer, false)]; + if (!mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow)) { + actions.add(_connectAction(context, peer, true)); + } + return actions; + } + + @protected + MenuEntryBase _connectAction( + BuildContext context, Peer peer, bool forceSeparateWindow) { return _connectCommonAction( - context, - peer.id, - peer.alias.isEmpty - ? translate('Connect') - : "${translate('Connect')} ${peer.id}"); + context, + peer.id, + (peer.alias.isEmpty + ? translate('Connect') + : '${translate('Connect')} ${peer.id}') + + (forceSeparateWindow ? ' (${translate('separate window')})' : ''), + forceSeparateWindow: forceSeparateWindow, + ); } @protected @@ -796,7 +814,7 @@ class RecentPeerCard extends BasePeerCard { Future>> _buildMenuItems( BuildContext context) async { final List> menuItems = [ - _connectAction(context, peer), + ..._connectActions(context, peer), _transferFileAction(context, peer.id), ]; @@ -852,7 +870,7 @@ class FavoritePeerCard extends BasePeerCard { Future>> _buildMenuItems( BuildContext context) async { final List> menuItems = [ - _connectAction(context, peer), + ..._connectActions(context, peer), _transferFileAction(context, peer.id), ]; if (isDesktop && peer.platform != 'Android') { @@ -902,7 +920,7 @@ class DiscoveredPeerCard extends BasePeerCard { Future>> _buildMenuItems( BuildContext context) async { final List> menuItems = [ - _connectAction(context, peer), + ..._connectActions(context, peer), _transferFileAction(context, peer.id), ]; @@ -954,7 +972,7 @@ class AddressBookPeerCard extends BasePeerCard { Future>> _buildMenuItems( BuildContext context) async { final List> menuItems = [ - _connectAction(context, peer), + ..._connectActions(context, peer), _transferFileAction(context, peer.id), ]; if (isDesktop && peer.platform != 'Android') { @@ -1016,7 +1034,7 @@ class MyGroupPeerCard extends BasePeerCard { Future>> _buildMenuItems( BuildContext context) async { final List> menuItems = [ - _connectAction(context, peer), + ..._connectActions(context, peer), _transferFileAction(context, peer.id), ]; if (isDesktop && peer.platform != 'Android') { diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index 6b7fe7140..43c73b0b5 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -556,7 +556,7 @@ class _DesktopHomePageState extends State } else if (call.method == kWindowEventHide) { final wId = call.arguments['id']; final isSeparateWindowEnabled = - mainGetBoolOptionSync(kOptionSeparateRemoteWindow); + mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow); if (isSeparateWindowEnabled && !kCloseMultiWindowByHide) { await rustDeskWinManager.destroyWindow(wId); } @@ -568,6 +568,7 @@ class _DesktopHomePageState extends State isTcpTunneling: call.arguments['isTcpTunneling'], isRDP: call.arguments['isRDP'], forceRelay: call.arguments['forceRelay'], + forceSeparateWindow: call.arguments['forceSeparateWindow'], ); } }); diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index d9f4d4ec2..7ffa527fe 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -112,7 +112,7 @@ class _RemotePageState extends State Wakelock.enable(); } // Register texture. - if (mainGetBoolOptionSync(kOptionSeparateRemoteWindow)) { + if (mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow)) { _renderTexture = renderTexture; } else { _renderTexture = RenderTexture(); diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 3fcb17c2b..720b7dc95 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -52,6 +52,7 @@ class RustDeskMultiWindowManager { bool? forceRelay, String? switchUuid, bool? isRDP, + bool forceSeparateWindow = false, }) async { var params = { "type": type.index, @@ -70,7 +71,9 @@ class RustDeskMultiWindowManager { newSessionWindow() async { final windowController = await DesktopMultiWindow.createWindow(msg); windowController - ..setFrame(const Offset(0, 0) & Size(1280 + windowController.windowId * 20, 720 + windowController.windowId * 20)) + ..setFrame(const Offset(0, 0) & + Size(1280 + windowController.windowId * 20, + 720 + windowController.windowId * 20)) ..center() ..setTitle(getWindowNameWithId( remoteId, @@ -84,8 +87,9 @@ class RustDeskMultiWindowManager { } // separate window for file transfer is not supported - bool separateWindow = type != WindowType.FileTransfer && - mainGetBoolOptionSync(kOptionSeparateRemoteWindow); + bool separateWindow = forceSeparateWindow || + (type != WindowType.FileTransfer && + mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow)); if (windows.length > 1 || separateWindow) { for (final windowId in windows) { @@ -123,6 +127,7 @@ class RustDeskMultiWindowManager { String? password, String? switchUuid, bool? forceRelay, + bool forceSeparateWindow = false, }) async { return await newSession( WindowType.RemoteDesktop, @@ -132,6 +137,7 @@ class RustDeskMultiWindowManager { password: password, forceRelay: forceRelay, switchUuid: switchUuid, + forceSeparateWindow: forceSeparateWindow, ); } @@ -165,8 +171,7 @@ class RustDeskMultiWindowManager { if (wnds.isEmpty) { return; } - return await DesktopMultiWindow.invokeMethod( - wnds[0], methodName, args); + return await DesktopMultiWindow.invokeMethod(wnds[0], methodName, args); } List _findWindowsByType(WindowType type) { diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 51a731c35..326ef5dd0 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index b4a76c62e..f52cb9b61 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "管理的设备数已达到最大值"), ("Sync with recent sessions", "同步最近会话"), ("Sort tags", "对标签进行排序"), + ("Separate remote window", "使用独立远程窗口"), + ("separate window", "独立窗口"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 29898eaf7..a61c46001 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 0a4adaf36..c3f43b7f1 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index c42ac5719..e59eb63d6 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."), ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index eb91e9a83..83160cae7 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index a576538ef..47792961a 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index c39bcb7f5..b57474793 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Has alcanzado el máximo número de dispositivos administrados."), ("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sort tags", "Ordenar etiquetas"), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 112edf32a..6f2531b46 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 57c548e08..679620a99 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 638ed3adf..8eacb75d3 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index ac9df01b3..2d12c31e5 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index c89e6cf72..5118adc16 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."), ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 67234039d..ed09d6132 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index c0b71c205..d48347023 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 829c59c73..1bcadec64 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 69936b2b4..accdf9a39 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index c470f2270..b1bcd1d2a 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Het maximum aantal gecontroleerde apparaten is bereikt."), ("Sync with recent sessions", "Recente sessies synchroniseren"), ("Sort tags", "Labels sorteren"), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index af6d11659..1d813ef41 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 52675daf7..6b32a1e48 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 195b79804..c732dd2af 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 378d7c035..4db68ee50 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 6b48ef20b..9dcef1a48 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index f24f55bef..3f8d57169 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index ff5c254e0..e3c17a659 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 797328139..46db68578 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 3bb40f4ce..370865e0a 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index ac898e38f..3ec8535ef 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 5c710624f..7eb168fdf 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 2b2d0f4b2..f125384de 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index d7bd99f25..b4959b158 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index bef733f00..cda76a154 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 3b115a5f3..8d46b61ae 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 59490da1d..c188e2d14 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -524,5 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), + ("Separate remote window", ""), + ("separate window", ""), ].iter().cloned().collect(); } From 902f56c499c54c221f077ac8acc9140617513f7e Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 3 Aug 2023 18:03:56 +0800 Subject: [PATCH 284/612] refact, separate remote window, add offset Signed-off-by: dignow --- flutter/lib/common.dart | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index a9117554d..7324a8c18 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1528,10 +1528,12 @@ Future restoreWindowPosition(WindowType type, return false; } + bool isRemotePeerPos = false; String? pos; if (type == WindowType.RemoteDesktop && windowId != null && peerId != null) { pos = await bind.sessionGetFlutterConfigByPeerId( id: peerId, k: kWindowPrefix); + isRemotePeerPos = pos != null; } pos ??= bind.getLocalFlutterConfig(k: kWindowPrefix + type.name); @@ -1540,6 +1542,14 @@ Future restoreWindowPosition(WindowType type, debugPrint("no window position saved, ignoring position restoration"); return false; } + if (type == WindowType.RemoteDesktop && !isRemotePeerPos && windowId != null) { + if (lpos.offsetWidth != null) { + lpos.offsetWidth = lpos.offsetWidth! + windowId * 20; + } + if (lpos.offsetHeight != null) { + lpos.offsetHeight = lpos.offsetHeight! + windowId * 20; + } + } switch (type) { case WindowType.Main: From 19707950939e5c057c0e97efa31789aef0c5d74e Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 3 Aug 2023 23:14:40 +0800 Subject: [PATCH 285/612] refact, separate remote window, tmp commit Signed-off-by: dignow --- flutter/lib/common.dart | 2 +- flutter/lib/consts.dart | 3 + .../desktop/pages/desktop_setting_page.dart | 19 ++++-- .../lib/desktop/pages/file_manager_page.dart | 2 +- .../lib/desktop/pages/port_forward_page.dart | 2 +- flutter/lib/desktop/pages/remote_page.dart | 16 +++-- .../lib/desktop/pages/remote_tab_page.dart | 13 ++++ flutter/lib/models/model.dart | 36 ++++++----- flutter/lib/utils/multi_window_manager.dart | 62 +++++++++++++------ src/flutter.rs | 12 ++-- 10 files changed, 115 insertions(+), 52 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 7324a8c18..f108fb5fd 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1216,7 +1216,7 @@ FFI get gFFI => _globalFFI; Future initGlobalFFI() async { debugPrint("_globalFFI init"); - _globalFFI = FFI(); + _globalFFI = FFI(null); debugPrint("_globalFFI init end"); // after `put`, can also be globally found by Get.find(); Get.put(_globalFFI, permanent: true); diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index f945a6292..59d0576a1 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -37,6 +37,9 @@ const String kWindowEventNewFileTransfer = "new_file_transfer"; const String kWindowEventNewPortForward = "new_port_forward"; const String kWindowEventActiveSession = "active_session"; const String kWindowEventGetRemoteList = "get_remote_list"; +const String kWindowEventGetSessionIdList = "get_session_id_list"; + +const String kWindowEventCloseForSeparateWindow = "close_for_separate_window"; const String kOptionSeparateRemoteWindow = "enable-separate-remote-window"; diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 61b5ad072..75ea16335 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/consts.dart'; +import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:flutter_hbb/desktop/pages/desktop_home_page.dart'; import 'package:flutter_hbb/desktop/pages/desktop_tab_page.dart'; import 'package:flutter_hbb/models/platform_model.dart'; @@ -248,7 +249,7 @@ class _General extends StatefulWidget { class _GeneralState extends State<_General> { final RxBool serviceStop = Get.find(tag: 'stop-service'); - RxBool serviceBtnEabled = true.obs; + RxBool serviceBtnEnabled = true.obs; @override Widget build(BuildContext context) { @@ -300,14 +301,14 @@ class _GeneralState extends State<_General> { return _Card(title: 'Service', children: [ Obx(() => _Button(serviceStop.value ? 'Start' : 'Stop', () { () async { - serviceBtnEabled.value = false; + serviceBtnEnabled.value = false; await start_service(serviceStop.value); // enable the button after 1 second Future.delayed(const Duration(seconds: 1), () { - serviceBtnEabled.value = true; + serviceBtnEnabled.value = true; }); }(); - }, enabled: serviceBtnEabled.value)) + }, enabled: serviceBtnEnabled.value)) ]); } @@ -318,7 +319,14 @@ class _GeneralState extends State<_General> { isServer: false), _OptionCheckBox(context, 'Adaptive Bitrate', 'enable-abr'), _OptionCheckBox( - context, 'Separate remote window', kOptionSeparateRemoteWindow, isServer: false), + context, + 'Separate remote window', + kOptionSeparateRemoteWindow, + isServer: false, + update: () { + rustDeskWinManager.separateWindows(); + }, + ), ]; // though this is related to GUI, but opengl problem affects all users, so put in config rather than local children.add(Tooltip( @@ -1678,7 +1686,6 @@ Widget _OptionCheckBox(BuildContext context, String label, String key, isServer ? await mainSetBoolOption(key, option) : await mainSetLocalBoolOption(key, option); - ; update?.call(); } } diff --git a/flutter/lib/desktop/pages/file_manager_page.dart b/flutter/lib/desktop/pages/file_manager_page.dart index 73d10a957..d684d1535 100644 --- a/flutter/lib/desktop/pages/file_manager_page.dart +++ b/flutter/lib/desktop/pages/file_manager_page.dart @@ -80,7 +80,7 @@ class _FileManagerPageState extends State @override void initState() { super.initState(); - _ffi = FFI(); + _ffi = FFI(null); _ffi.start(widget.id, isFileTransfer: true, password: widget.password, diff --git a/flutter/lib/desktop/pages/port_forward_page.dart b/flutter/lib/desktop/pages/port_forward_page.dart index f4b4a6c3f..2a173c53b 100644 --- a/flutter/lib/desktop/pages/port_forward_page.dart +++ b/flutter/lib/desktop/pages/port_forward_page.dart @@ -54,7 +54,7 @@ class _PortForwardPageState extends State @override void initState() { super.initState(); - _ffi = FFI(); + _ffi = FFI(null); _ffi.start(widget.id, isPortForward: true, password: widget.password, diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 7ffa527fe..ecaa1b29a 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -28,10 +28,13 @@ import '../widgets/tabbar_widget.dart'; final SimpleWrapper _firstEnterImage = SimpleWrapper(false); +final Map noCloseSessionOnDispose = {}; + class RemotePage extends StatefulWidget { RemotePage({ Key? key, required this.id, + required this.sessionId, required this.password, required this.toolbarState, required this.tabController, @@ -40,6 +43,7 @@ class RemotePage extends StatefulWidget { }) : super(key: key); final String id; + final SessionID? sessionId; final String? password; final ToolbarState toolbarState; final String? switchUuid; @@ -91,7 +95,7 @@ class _RemotePageState extends State void initState() { super.initState(); _initStates(widget.id); - _ffi = FFI(); + _ffi = FFI(widget.sessionId); Get.put(_ffi, tag: widget.id); _ffi.imageModel.addCallbackOnFirstImage((String peerId) { showKBLayoutTypeChooserIfNeeded( @@ -199,6 +203,8 @@ class _RemotePageState extends State @override Future dispose() async { + final closeSession = noCloseSessionOnDispose.remove(widget.id) ?? false; + // https://github.com/flutter/flutter/issues/64935 super.dispose(); debugPrint("REMOTE PAGE dispose session $sessionId ${widget.id}"); @@ -209,11 +215,13 @@ class _RemotePageState extends State _ffi.dialogManager.hideMobileActionsOverlay(); _ffi.recordingModel.onClose(); _rawKeyFocusNode.dispose(); - await _ffi.close(); + await _ffi.close(closeSession: closeSession); _timer?.cancel(); _ffi.dialogManager.dismissAll(); - await SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, - overlays: SystemUiOverlay.values); + if (closeSession) { + await SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, + overlays: SystemUiOverlay.values); + } if (!Platform.isLinux) { await Wakelock.disable(); } diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 4ab731649..3e7f7f464 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -52,6 +52,7 @@ class _ConnectionTabPageState extends State { _toolbarState = ToolbarState(); RemoteCountState.init(); final peerId = params['id']; + final sessionId = params['session_id']; if (peerId != null) { ConnectionTypeState.init(peerId); tabController.onSelected = (id) { @@ -73,6 +74,7 @@ class _ConnectionTabPageState extends State { page: RemotePage( key: ValueKey(peerId), id: peerId, + sessionId: sessionId == null ? null : SessionID(sessionId), password: params['password'], toolbarState: _toolbarState, tabController: tabController, @@ -99,6 +101,7 @@ class _ConnectionTabPageState extends State { final args = jsonDecode(call.arguments); final id = args['id']; final switchUuid = args['switch_uuid']; + final sessionId = args['session_id']; windowOnTop(windowId()); ConnectionTypeState.init(id); _toolbarState.setShow( @@ -112,6 +115,7 @@ class _ConnectionTabPageState extends State { page: RemotePage( key: ValueKey(id), id: id, + sessionId: sessionId == null ? null : SessionID(sessionId), password: args['password'], toolbarState: _toolbarState, tabController: tabController, @@ -136,6 +140,15 @@ class _ConnectionTabPageState extends State { .map((e) => e.key) .toList() .join(','); + } else if (call.method == kWindowEventGetSessionIdList) { + return tabController.state.value.tabs + .map((e) => '${e.key},${(e.page as RemotePage).ffi.sessionId}') + .toList() + .join(';'); + } else if (call.method == kWindowEventCloseForSeparateWindow) { + final peerId = call.arguments; + noCloseSessionOnDispose[peerId] = true; + tabController.closeBy(peerId); } _update_remote_count(); }); diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 9c20a6a95..02c0b8281 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1579,6 +1579,7 @@ class FFI { /// dialogManager use late to ensure init after main page binding [globalKey] late final dialogManager = OverlayDialogManager(); + late final bool isSessionAdded; late final SessionID sessionId; late final ImageModel imageModel; // session late final FfiModel ffiModel; // session @@ -1596,8 +1597,9 @@ class FFI { late final InputModel inputModel; // session late final ElevationModel elevationModel; // session - FFI() { - sessionId = isDesktop ? Uuid().v4obj() : _constSessionId; + FFI(SessionID? sId) { + isSessionAdded = sId != null; + sessionId = sId ?? (isDesktop ? Uuid().v4obj() : _constSessionId); imageModel = ImageModel(WeakReference(this)); ffiModel = FfiModel(WeakReference(this)); cursorModel = CursorModel(WeakReference(this)); @@ -1637,17 +1639,19 @@ class FFI { imageModel.id = id; cursorModel.id = id; } - // ignore: unused_local_variable - final addRes = bind.sessionAddSync( - sessionId: sessionId, - id: id, - isFileTransfer: isFileTransfer, - isPortForward: isPortForward, - isRdp: isRdp, - switchUuid: switchUuid ?? "", - forceRelay: forceRelay ?? false, - password: password ?? "", - ); + if (isSessionAdded) { + // ignore: unused_local_variable + final addRes = bind.sessionAddSync( + sessionId: sessionId, + id: id, + isFileTransfer: isFileTransfer, + isPortForward: isPortForward, + isRdp: isRdp, + switchUuid: switchUuid ?? "", + forceRelay: forceRelay ?? false, + password: password ?? "", + ); + } final stream = bind.sessionStart(sessionId: sessionId, id: id); final cb = ffiModel.startEventListener(sessionId, id); final useTextureRender = bind.mainUseTextureRender(); @@ -1712,7 +1716,7 @@ class FFI { } /// Close the remote session. - Future close() async { + Future close({bool closeSession = true}) async { closed = true; chatModel.close(); if (imageModel.image != null && !isWebDesktop) { @@ -1730,7 +1734,9 @@ class FFI { ffiModel.clear(); canvasModel.clear(); inputModel.resetModifiers(); - await bind.sessionClose(sessionId: sessionId); + if (closeSession) { + await bind.sessionClose(sessionId: sessionId); + } debugPrint('model $id closed'); id = ''; } diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 720b7dc95..d0c89cf3b 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -43,6 +43,46 @@ class RustDeskMultiWindowManager { final List _fileTransferWindows = List.empty(growable: true); final List _portForwardWindows = List.empty(growable: true); + separateWindows() async { + for (final windowId in _remoteDesktopWindows) { + final sessionIdList = await DesktopMultiWindow.invokeMethod( + windowId, kWindowEventGetSessionIdList, null); + if (sessionIdList != null) { + for (final idPair in sessionIdList.split(';')) { + final peerSession = idPair.split(','); + var params = { + 'type': WindowType.RemoteDesktop.index, + 'id': peerSession[0], + 'sessionId': peerSession[1], + }; + await newSessionWindow(WindowType.RemoteDesktop, peerSession[0], + jsonEncode(params), _remoteDesktopWindows); + await DesktopMultiWindow.invokeMethod( + windowId, kWindowEventCloseForSeparateWindow, peerSession[0]); + } + } + } + } + + newSessionWindow( + WindowType type, String remoteId, String msg, List windows) async { + final windowController = await DesktopMultiWindow.createWindow(msg); + windowController + ..setFrame(const Offset(0, 0) & + Size(1280 + windowController.windowId * 20, + 720 + windowController.windowId * 20)) + ..center() + ..setTitle(getWindowNameWithId( + remoteId, + overrideType: type, + )); + if (Platform.isMacOS) { + Future.microtask(() => windowController.show()); + } + registerActiveWindow(windowController.windowId); + windows.add(windowController.windowId); + } + Future newSession( WindowType type, String methodName, @@ -68,24 +108,6 @@ class RustDeskMultiWindowManager { } final msg = jsonEncode(params); - newSessionWindow() async { - final windowController = await DesktopMultiWindow.createWindow(msg); - windowController - ..setFrame(const Offset(0, 0) & - Size(1280 + windowController.windowId * 20, - 720 + windowController.windowId * 20)) - ..center() - ..setTitle(getWindowNameWithId( - remoteId, - overrideType: type, - )); - if (Platform.isMacOS) { - Future.microtask(() => windowController.show()); - } - registerActiveWindow(windowController.windowId); - windows.add(windowController.windowId); - } - // separate window for file transfer is not supported bool separateWindow = forceSeparateWindow || (type != WindowType.FileTransfer && @@ -111,11 +133,11 @@ class RustDeskMultiWindowManager { windows.add(windowController.windowId); return invokeRes; } else { - await newSessionWindow(); + await newSessionWindow(type, remoteId, msg, windows); } } else { if (windows.isEmpty) { - await newSessionWindow(); + await newSessionWindow(type, remoteId, msg, windows); } else { return call(type, methodName, msg); } diff --git a/src/flutter.rs b/src/flutter.rs index c35f7340d..f5711b823 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -782,11 +782,15 @@ pub fn session_start_( ); #[cfg(not(feature = "flutter_texture_render"))] log::info!("Session {} start, render by flutter paint widget", id); + let is_pre_added = session.event_stream.read().unwrap().is_some(); + session.close_event_stream(); *session.event_stream.write().unwrap() = Some(event_stream); - let session = session.clone(); - std::thread::spawn(move || { - io_loop(session); - }); + if !is_pre_added { + let session = session.clone(); + std::thread::spawn(move || { + io_loop(session); + }); + } Ok(()) } else { bail!("No session with peer id {}", id) From e121ed8ecb5508dd2752783cc19722f7578077cf Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 3 Aug 2023 23:40:54 +0800 Subject: [PATCH 286/612] refact, separate remote window, debug Signed-off-by: dignow --- flutter/lib/models/model.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 02c0b8281..50457b195 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1639,7 +1639,7 @@ class FFI { imageModel.id = id; cursorModel.id = id; } - if (isSessionAdded) { + if (!isSessionAdded) { // ignore: unused_local_variable final addRes = bind.sessionAddSync( sessionId: sessionId, @@ -1647,9 +1647,9 @@ class FFI { isFileTransfer: isFileTransfer, isPortForward: isPortForward, isRdp: isRdp, - switchUuid: switchUuid ?? "", + switchUuid: switchUuid ?? '', forceRelay: forceRelay ?? false, - password: password ?? "", + password: password ?? '', ); } final stream = bind.sessionStart(sessionId: sessionId, id: id); From e4ac34da0d87bc9210bf1361b45a73894c6b5bee Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 4 Aug 2023 00:09:22 +0800 Subject: [PATCH 287/612] refact, separate remote window, debug Signed-off-by: dignow --- flutter/lib/desktop/pages/desktop_setting_page.dart | 10 ++++++++-- flutter/lib/utils/multi_window_manager.dart | 8 ++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 75ea16335..9072643ea 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -324,7 +324,11 @@ class _GeneralState extends State<_General> { kOptionSeparateRemoteWindow, isServer: false, update: () { - rustDeskWinManager.separateWindows(); + final useSeparateWindow = + mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow); + if (useSeparateWindow) { + rustDeskWinManager.separateWindows(); + } }, ), ]; @@ -1681,11 +1685,13 @@ Widget _OptionCheckBox(BuildContext context, String label, String key, var ref = value.obs; onChanged(option) async { if (option != null) { - ref.value = option; if (reverse) option = !option; isServer ? await mainSetBoolOption(key, option) : await mainSetLocalBoolOption(key, option); + ref.value = isServer + ? mainGetBoolOptionSync(key) + : mainGetLocalBoolOptionSync(key); update?.call(); } } diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index d0c89cf3b..d759477d2 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -48,7 +48,11 @@ class RustDeskMultiWindowManager { final sessionIdList = await DesktopMultiWindow.invokeMethod( windowId, kWindowEventGetSessionIdList, null); if (sessionIdList != null) { - for (final idPair in sessionIdList.split(';')) { + final idList = sessionIdList.split(';') as List; + if (idList.length <= 1) { + continue; + } + for (final idPair in idList.sublist(1)) { final peerSession = idPair.split(','); var params = { 'type': WindowType.RemoteDesktop.index, @@ -58,7 +62,7 @@ class RustDeskMultiWindowManager { await newSessionWindow(WindowType.RemoteDesktop, peerSession[0], jsonEncode(params), _remoteDesktopWindows); await DesktopMultiWindow.invokeMethod( - windowId, kWindowEventCloseForSeparateWindow, peerSession[0]); + windowId, kWindowEventCloseForSeparateWindow, peerSession[0]); } } } From e12d0ef4aa017d7b12af5d4aa51dbc791c299ec0 Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 4 Aug 2023 00:17:11 +0800 Subject: [PATCH 288/612] tmp commit Signed-off-by: dignow --- flutter/lib/utils/multi_window_manager.dart | 91 ++++++++++++--------- 1 file changed, 53 insertions(+), 38 deletions(-) diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index d759477d2..974dfd9c4 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -45,25 +45,29 @@ class RustDeskMultiWindowManager { separateWindows() async { for (final windowId in _remoteDesktopWindows) { - final sessionIdList = await DesktopMultiWindow.invokeMethod( + final String sessionIdList = await DesktopMultiWindow.invokeMethod( windowId, kWindowEventGetSessionIdList, null); - if (sessionIdList != null) { - final idList = sessionIdList.split(';') as List; - if (idList.length <= 1) { - continue; - } - for (final idPair in idList.sublist(1)) { - final peerSession = idPair.split(','); - var params = { - 'type': WindowType.RemoteDesktop.index, - 'id': peerSession[0], - 'sessionId': peerSession[1], - }; - await newSessionWindow(WindowType.RemoteDesktop, peerSession[0], - jsonEncode(params), _remoteDesktopWindows); - await DesktopMultiWindow.invokeMethod( - windowId, kWindowEventCloseForSeparateWindow, peerSession[0]); - } + final idList = sessionIdList.split(';'); + if (idList.length <= 1) { + continue; + } + for (final idPair in idList.sublist(1)) { + final peerSession = idPair.split(','); + var params = { + 'type': WindowType.RemoteDesktop.index, + 'id': peerSession[0], + 'sessionId': peerSession[1], + }; + await _newSession( + true, + WindowType.RemoteDesktop, + kWindowEventNewRemoteDesktop, + peerSession[0], + _remoteDesktopWindows, + jsonEncode(params), + ); + await DesktopMultiWindow.invokeMethod( + windowId, kWindowEventCloseForSeparateWindow, peerSession[0]); } } } @@ -87,6 +91,36 @@ class RustDeskMultiWindowManager { windows.add(windowController.windowId); } + _newSession( + bool separateWindow, + WindowType type, + String methodName, + String remoteId, + List windows, + String msg, + ) async { + if (separateWindow) { + if (kCloseMultiWindowByHide && _inactiveWindows.isNotEmpty) { + final windowId = _inactiveWindows.first; + final invokeRes = + await DesktopMultiWindow.invokeMethod(windowId, methodName, msg); + final windowController = WindowController.fromWindowId(windowId); + windowController.show(); + registerActiveWindow(windowController.windowId); + windows.add(windowController.windowId); + return invokeRes; + } else { + await newSessionWindow(type, remoteId, msg, windows); + } + } else { + if (windows.isEmpty) { + await newSessionWindow(type, remoteId, msg, windows); + } else { + return call(type, methodName, msg); + } + } + } + Future newSession( WindowType type, String methodName, @@ -126,26 +160,7 @@ class RustDeskMultiWindowManager { } } - if (separateWindow) { - if (kCloseMultiWindowByHide && _inactiveWindows.isNotEmpty) { - final windowId = _inactiveWindows.first; - final invokeRes = - await DesktopMultiWindow.invokeMethod(windowId, methodName, msg); - final windowController = WindowController.fromWindowId(windowId); - windowController.show(); - registerActiveWindow(windowController.windowId); - windows.add(windowController.windowId); - return invokeRes; - } else { - await newSessionWindow(type, remoteId, msg, windows); - } - } else { - if (windows.isEmpty) { - await newSessionWindow(type, remoteId, msg, windows); - } else { - return call(type, methodName, msg); - } - } + await _newSession(separateWindow, type, methodName, remoteId, windows, msg); } Future newRemoteDesktop( From 53e87352daea95fb6c46eecfe40b17a884f08961 Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 4 Aug 2023 01:41:36 +0800 Subject: [PATCH 289/612] tmp commit Signed-off-by: dignow --- flutter/lib/desktop/pages/remote_page.dart | 4 ++-- flutter/lib/desktop/pages/remote_tab_page.dart | 2 +- flutter/lib/models/model.dart | 4 ++++ flutter/lib/utils/multi_window_manager.dart | 4 ++-- src/client/io_loop.rs | 8 ++++++++ src/flutter_ffi.rs | 9 ++++++++- src/ui_session_interface.rs | 6 +++++- 7 files changed, 30 insertions(+), 7 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index ecaa1b29a..32faf08ae 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -28,7 +28,7 @@ import '../widgets/tabbar_widget.dart'; final SimpleWrapper _firstEnterImage = SimpleWrapper(false); -final Map noCloseSessionOnDispose = {}; +final Map closeSessionOnDispose = {}; class RemotePage extends StatefulWidget { RemotePage({ @@ -203,7 +203,7 @@ class _RemotePageState extends State @override Future dispose() async { - final closeSession = noCloseSessionOnDispose.remove(widget.id) ?? false; + final closeSession = closeSessionOnDispose.remove(widget.id) ?? true; // https://github.com/flutter/flutter/issues/64935 super.dispose(); diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 3e7f7f464..080895729 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -147,7 +147,7 @@ class _ConnectionTabPageState extends State { .join(';'); } else if (call.method == kWindowEventCloseForSeparateWindow) { final peerId = call.arguments; - noCloseSessionOnDispose[peerId] = true; + closeSessionOnDispose[peerId] = false; tabController.closeBy(peerId); } _update_remote_count(); diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 50457b195..2bf08c53f 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1702,6 +1702,10 @@ class FFI { }); // every instance will bind a stream this.id = id; + + if (isSessionAdded) { + bind.sessionHandlePeerInfo(sessionId: sessionId); + } } /// Login with [password], choose if the client should [remember] it. diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 974dfd9c4..2a7b89bf0 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -44,7 +44,7 @@ class RustDeskMultiWindowManager { final List _portForwardWindows = List.empty(growable: true); separateWindows() async { - for (final windowId in _remoteDesktopWindows) { + for (final windowId in _remoteDesktopWindows.toList()) { final String sessionIdList = await DesktopMultiWindow.invokeMethod( windowId, kWindowEventGetSessionIdList, null); final idList = sessionIdList.split(';'); @@ -56,7 +56,7 @@ class RustDeskMultiWindowManager { var params = { 'type': WindowType.RemoteDesktop.index, 'id': peerSession[0], - 'sessionId': peerSession[1], + 'session_id': peerSession[1], }; await _newSession( true, diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 82c3794bb..6236aa838 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1008,6 +1008,10 @@ impl Remote { } } Some(login_response::Union::PeerInfo(pi)) => { + #[cfg(feature = "flutter")] + { + self.handler.pi = pi.clone(); + } self.handler.handle_peer_info(pi); #[cfg(not(feature = "flutter"))] self.check_clipboard_file_context(); @@ -1274,6 +1278,10 @@ impl Remote { } } Some(misc::Union::SwitchDisplay(s)) => { + #[cfg(feature = "flutter")] + { + self.handler.switch_display = s.clone(); + } self.handler.handle_peer_switch_display(&s); self.video_sender.send(MediaData::Reset).ok(); if s.width > 0 && s.height > 0 { diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 5df00c344..c3df147b9 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1,7 +1,7 @@ #[cfg(not(any(target_os = "android", target_os = "ios")))] use crate::common::get_default_sound_input; use crate::{ - client::file_trait::FileManager, + client::{file_trait::FileManager, Interface}, common::is_keyboard_mode_supported, common::make_fd_to_json, flutter::{self, SESSIONS}, @@ -601,6 +601,13 @@ pub fn session_change_resolution(session_id: SessionID, display: i32, width: i32 } } +pub fn session_handle_peer_info(session_id: SessionID) { + if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) { + session.handle_peer_info(session.pi.clone()); + session.handle_peer_switch_display(&session.switch_display); + } +} + pub fn session_set_size(_session_id: SessionID, _width: usize, _height: usize) { #[cfg(feature = "flutter_texture_render")] if let Some(session) = SESSIONS.write().unwrap().get_mut(&_session_id) { diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 33cfa2ced..740929c39 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -62,6 +62,10 @@ pub struct Session { pub server_file_transfer_enabled: Arc>, pub server_clipboard_enabled: Arc>, pub last_change_display: Arc>, + #[cfg(feature = "flutter")] + pub pi: PeerInfo, + #[cfg(feature = "flutter")] + pub switch_display: SwitchDisplay, } #[derive(Clone)] @@ -1186,7 +1190,7 @@ impl Session { #[tokio::main(flavor = "current_thread")] pub async fn io_loop(handler: Session) { // It is ok to call this function multiple times. - #[cfg(target_os ="windows")] + #[cfg(target_os = "windows")] if !handler.is_file_transfer() && !handler.is_port_forward() { clipboard::ContextSend::enable(true); } From fd12f69afac6ea34a7117f94b2ec73f6a1ad7826 Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 4 Aug 2023 20:22:54 +0800 Subject: [PATCH 290/612] tmp commit Signed-off-by: dignow --- flutter/lib/desktop/pages/desktop_setting_page.dart | 4 ++-- flutter/lib/models/model.dart | 10 ++++++---- flutter/lib/utils/multi_window_manager.dart | 9 +++++---- src/client/io_loop.rs | 4 ++-- src/flutter_ffi.rs | 5 +++-- src/ui_session_interface.rs | 4 ++-- 6 files changed, 20 insertions(+), 16 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 9072643ea..c84f126bd 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -326,9 +326,9 @@ class _GeneralState extends State<_General> { update: () { final useSeparateWindow = mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow); - if (useSeparateWindow) { + // if (useSeparateWindow) { rustDeskWinManager.separateWindows(); - } + // } }, ), ]; diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 2bf08c53f..1a24067a0 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1655,9 +1655,15 @@ class FFI { final stream = bind.sessionStart(sessionId: sessionId, id: id); final cb = ffiModel.startEventListener(sessionId, id); final useTextureRender = bind.mainUseTextureRender(); + + final SimpleWrapper isPeerInfoSent = SimpleWrapper(false); // Preserved for the rgba data. stream.listen((message) { if (closed) return; + if (isSessionAdded && !isPeerInfoSent.value) { + bind.sessionHandlePeerInfo(sessionId: sessionId); + isPeerInfoSent.value = true; + } () async { if (message is EventToUI_Event) { if (message.field0 == "close") { @@ -1702,10 +1708,6 @@ class FFI { }); // every instance will bind a stream this.id = id; - - if (isSessionAdded) { - bind.sessionHandlePeerInfo(sessionId: sessionId); - } } /// Login with [password], choose if the client should [remember] it. diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 2a7b89bf0..939bc7934 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/common.dart'; +import 'package:flutter_hbb/models/platform_model.dart'; /// must keep the order enum WindowType { Main, RemoteDesktop, FileTransfer, PortForward, Unknown } @@ -48,10 +49,10 @@ class RustDeskMultiWindowManager { final String sessionIdList = await DesktopMultiWindow.invokeMethod( windowId, kWindowEventGetSessionIdList, null); final idList = sessionIdList.split(';'); - if (idList.length <= 1) { - continue; - } - for (final idPair in idList.sublist(1)) { + // if (idList.length <= 1) { + // continue; + // } + for (final idPair in idList) { final peerSession = idPair.split(','); var params = { 'type': WindowType.RemoteDesktop.index, diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 6236aa838..f50dc4737 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1010,7 +1010,7 @@ impl Remote { Some(login_response::Union::PeerInfo(pi)) => { #[cfg(feature = "flutter")] { - self.handler.pi = pi.clone(); + *self.handler.pi.write().unwrap() = pi.clone(); } self.handler.handle_peer_info(pi); #[cfg(not(feature = "flutter"))] @@ -1280,7 +1280,7 @@ impl Remote { Some(misc::Union::SwitchDisplay(s)) => { #[cfg(feature = "flutter")] { - self.handler.switch_display = s.clone(); + *self.handler.switch_display.write().unwrap() = s.clone(); } self.handler.handle_peer_switch_display(&s); self.video_sender.send(MediaData::Reset).ok(); diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index c3df147b9..c0529171a 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -603,8 +603,9 @@ pub fn session_change_resolution(session_id: SessionID, display: i32, width: i32 pub fn session_handle_peer_info(session_id: SessionID) { if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) { - session.handle_peer_info(session.pi.clone()); - session.handle_peer_switch_display(&session.switch_display); + let pi = session.pi.read().unwrap().clone(); + session.handle_peer_info(pi); + session.handle_peer_switch_display(&session.switch_display.read().unwrap()); } } diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 740929c39..32f8fe5bf 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -63,9 +63,9 @@ pub struct Session { pub server_clipboard_enabled: Arc>, pub last_change_display: Arc>, #[cfg(feature = "flutter")] - pub pi: PeerInfo, + pub pi: Arc>, #[cfg(feature = "flutter")] - pub switch_display: SwitchDisplay, + pub switch_display: Arc>, } #[derive(Clone)] From 01ab0cf1963ac842cb5b7ee07867a2ad16d1c7b5 Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 4 Aug 2023 20:58:14 +0800 Subject: [PATCH 291/612] tmp commit Signed-off-by: dignow --- .../desktop/pages/desktop_setting_page.dart | 4 ++-- flutter/lib/models/model.dart | 8 +++---- flutter/lib/utils/multi_window_manager.dart | 8 +++---- src/client/io_loop.rs | 15 ++++++++++-- src/flutter_ffi.rs | 8 +++---- src/ui_session_interface.rs | 24 ++++++++++++++++--- 6 files changed, 47 insertions(+), 20 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index c84f126bd..9072643ea 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -326,9 +326,9 @@ class _GeneralState extends State<_General> { update: () { final useSeparateWindow = mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow); - // if (useSeparateWindow) { + if (useSeparateWindow) { rustDeskWinManager.separateWindows(); - // } + } }, ), ]; diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 1a24067a0..a77b3b238 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1656,13 +1656,13 @@ class FFI { final cb = ffiModel.startEventListener(sessionId, id); final useTextureRender = bind.mainUseTextureRender(); - final SimpleWrapper isPeerInfoSent = SimpleWrapper(false); + final SimpleWrapper isCacheRestored = SimpleWrapper(false); // Preserved for the rgba data. stream.listen((message) { if (closed) return; - if (isSessionAdded && !isPeerInfoSent.value) { - bind.sessionHandlePeerInfo(sessionId: sessionId); - isPeerInfoSent.value = true; + if (isSessionAdded && !isCacheRestored.value) { + bind.sessionRestoreCache(sessionId: sessionId); + isCacheRestored.value = true; } () async { if (message is EventToUI_Event) { diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 939bc7934..8c4a5303c 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -49,10 +49,10 @@ class RustDeskMultiWindowManager { final String sessionIdList = await DesktopMultiWindow.invokeMethod( windowId, kWindowEventGetSessionIdList, null); final idList = sessionIdList.split(';'); - // if (idList.length <= 1) { - // continue; - // } - for (final idPair in idList) { + if (idList.length <= 1) { + continue; + } + for (final idPair in idList.sublist(1)) { final peerSession = idPair.split(','); var params = { 'type': WindowType.RemoteDesktop.index, diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index f50dc4737..7c0b3a193 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1010,7 +1010,7 @@ impl Remote { Some(login_response::Union::PeerInfo(pi)) => { #[cfg(feature = "flutter")] { - *self.handler.pi.write().unwrap() = pi.clone(); + self.handler.cache_flutter.write().unwrap().pi = pi.clone(); } self.handler.handle_peer_info(pi); #[cfg(not(feature = "flutter"))] @@ -1059,9 +1059,20 @@ impl Remote { _ => {} }, Some(message::Union::CursorData(cd)) => { + #[cfg(feature = "flutter")] + { + let mut lock = self.handler.cache_flutter.write().unwrap(); + if !lock.cursor_data.contains_key(&cd.id) { + lock.cursor_data.insert(cd.id, cd.clone()); + } + } self.handler.set_cursor_data(cd); } Some(message::Union::CursorId(id)) => { + #[cfg(feature = "flutter")] + { + self.handler.cache_flutter.write().unwrap().cursor_id = id; + } self.handler.set_cursor_id(id.to_string()); } Some(message::Union::CursorPosition(cp)) => { @@ -1280,7 +1291,7 @@ impl Remote { Some(misc::Union::SwitchDisplay(s)) => { #[cfg(feature = "flutter")] { - *self.handler.switch_display.write().unwrap() = s.clone(); + self.handler.cache_flutter.write().unwrap().sp = s.clone(); } self.handler.handle_peer_switch_display(&s); self.video_sender.send(MediaData::Reset).ok(); diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index c0529171a..c0e96a487 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1,7 +1,7 @@ #[cfg(not(any(target_os = "android", target_os = "ios")))] use crate::common::get_default_sound_input; use crate::{ - client::{file_trait::FileManager, Interface}, + client::file_trait::FileManager, common::is_keyboard_mode_supported, common::make_fd_to_json, flutter::{self, SESSIONS}, @@ -601,11 +601,9 @@ pub fn session_change_resolution(session_id: SessionID, display: i32, width: i32 } } -pub fn session_handle_peer_info(session_id: SessionID) { +pub fn session_restore_cache(session_id: SessionID) { if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) { - let pi = session.pi.read().unwrap().clone(); - session.handle_peer_info(pi); - session.handle_peer_switch_display(&session.switch_display.read().unwrap()); + session.restore_flutter_cache(); } } diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 32f8fe5bf..50bc23339 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -48,6 +48,15 @@ pub static IS_IN: AtomicBool = AtomicBool::new(false); const CHANGE_RESOLUTION_VALID_TIMEOUT_SECS: u64 = 15; +#[cfg(feature = "flutter")] +#[derive(Default)] +pub struct CacheFlutter { + pub pi: PeerInfo, + pub sp: SwitchDisplay, + pub cursor_data: HashMap, + pub cursor_id: u64, +} + #[derive(Clone, Default)] pub struct Session { pub session_id: SessionID, // different from the one in LoginConfigHandler, used for flutter UI message pass @@ -63,9 +72,7 @@ pub struct Session { pub server_clipboard_enabled: Arc>, pub last_change_display: Arc>, #[cfg(feature = "flutter")] - pub pi: Arc>, - #[cfg(feature = "flutter")] - pub switch_display: Arc>, + pub cache_flutter: Arc>, } #[derive(Clone)] @@ -1185,6 +1192,17 @@ impl Session { pub fn ctrl_alt_del(&self) { self.send_key_event(&crate::keyboard::client::event_ctrl_alt_del()); } + + #[cfg(feature = "flutter")] + pub fn restore_flutter_cache(&mut self) { + let pi = self.cache_flutter.read().unwrap().pi.clone(); + self.handle_peer_info(pi); + self.handle_peer_switch_display(&self.cache_flutter.read().unwrap().sp); + for (_, cd) in self.cache_flutter.read().unwrap().cursor_data.iter() { + self.set_cursor_data(cd.clone()); + } + self.set_cursor_id(self.cache_flutter.read().unwrap().cursor_id.to_string()); + } } #[tokio::main(flavor = "current_thread")] From 30c2c92970053ad52a026f328d18710e029a8bdb Mon Sep 17 00:00:00 2001 From: dignow Date: Sat, 5 Aug 2023 15:02:35 +0800 Subject: [PATCH 292/612] refact, separate window, debug Signed-off-by: dignow --- src/client/io_loop.rs | 7 ++++++- src/ui_session_interface.rs | 6 ++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 7c0b3a193..400aff2d1 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1291,7 +1291,12 @@ impl Remote { Some(misc::Union::SwitchDisplay(s)) => { #[cfg(feature = "flutter")] { - self.handler.cache_flutter.write().unwrap().sp = s.clone(); + self.handler + .cache_flutter + .write() + .unwrap() + .sp + .replace(s.clone()); } self.handler.handle_peer_switch_display(&s); self.video_sender.send(MediaData::Reset).ok(); diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 50bc23339..1e0f6b1b9 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -52,7 +52,7 @@ const CHANGE_RESOLUTION_VALID_TIMEOUT_SECS: u64 = 15; #[derive(Default)] pub struct CacheFlutter { pub pi: PeerInfo, - pub sp: SwitchDisplay, + pub sp: Option, pub cursor_data: HashMap, pub cursor_id: u64, } @@ -1197,7 +1197,9 @@ impl Session { pub fn restore_flutter_cache(&mut self) { let pi = self.cache_flutter.read().unwrap().pi.clone(); self.handle_peer_info(pi); - self.handle_peer_switch_display(&self.cache_flutter.read().unwrap().sp); + if let Some(sp) = self.cache_flutter.read().unwrap().sp.as_ref() { + self.handle_peer_switch_display(sp); + } for (_, cd) in self.cache_flutter.read().unwrap().cursor_data.iter() { self.set_cursor_data(cd.clone()); } From bf42d66171eaa0e7c0e7a9ca44b774f6a5aa9e9c Mon Sep 17 00:00:00 2001 From: dignow Date: Sat, 5 Aug 2023 17:57:12 +0800 Subject: [PATCH 293/612] refact, separate remote window Signed-off-by: dignow --- flutter/lib/utils/multi_window_manager.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 8c4a5303c..b0959246b 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -7,7 +7,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/common.dart'; -import 'package:flutter_hbb/models/platform_model.dart'; /// must keep the order enum WindowType { Main, RemoteDesktop, FileTransfer, PortForward, Unknown } @@ -213,6 +212,11 @@ class RustDeskMultiWindowManager { if (wnds.isEmpty) { return; } + for (final windowId in wnds) { + if (_activeWindows.contains(windowId)) { + return await DesktopMultiWindow.invokeMethod(windowId, methodName, args); + } + } return await DesktopMultiWindow.invokeMethod(wnds[0], methodName, args); } From 5817e48e1785967c6e646a516b1e08e50ab7dc39 Mon Sep 17 00:00:00 2001 From: dignow Date: Sat, 5 Aug 2023 19:20:20 +0800 Subject: [PATCH 294/612] fix build Signed-off-by: dignow --- src/client/io_loop.rs | 4 ++++ src/flutter_ffi.rs | 1 + src/ui_session_interface.rs | 3 +++ 3 files changed, 8 insertions(+) diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 400aff2d1..eee857f60 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1009,6 +1009,7 @@ impl Remote { } Some(login_response::Union::PeerInfo(pi)) => { #[cfg(feature = "flutter")] + #[cfg(not(any(target_os = "android", target_os = "ios")))] { self.handler.cache_flutter.write().unwrap().pi = pi.clone(); } @@ -1060,6 +1061,7 @@ impl Remote { }, Some(message::Union::CursorData(cd)) => { #[cfg(feature = "flutter")] + #[cfg(not(any(target_os = "android", target_os = "ios")))] { let mut lock = self.handler.cache_flutter.write().unwrap(); if !lock.cursor_data.contains_key(&cd.id) { @@ -1070,6 +1072,7 @@ impl Remote { } Some(message::Union::CursorId(id)) => { #[cfg(feature = "flutter")] + #[cfg(not(any(target_os = "android", target_os = "ios")))] { self.handler.cache_flutter.write().unwrap().cursor_id = id; } @@ -1290,6 +1293,7 @@ impl Remote { } Some(misc::Union::SwitchDisplay(s)) => { #[cfg(feature = "flutter")] + #[cfg(not(any(target_os = "android", target_os = "ios")))] { self.handler .cache_flutter diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index c0e96a487..05819dfd8 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -602,6 +602,7 @@ pub fn session_change_resolution(session_id: SessionID, display: i32, width: i32 } pub fn session_restore_cache(session_id: SessionID) { + #[cfg(not(any(target_os = "android", target_os = "ios")))] if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) { session.restore_flutter_cache(); } diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 1e0f6b1b9..21b9c9d9e 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -49,6 +49,7 @@ pub static IS_IN: AtomicBool = AtomicBool::new(false); const CHANGE_RESOLUTION_VALID_TIMEOUT_SECS: u64 = 15; #[cfg(feature = "flutter")] +#[cfg(not(any(target_os = "android", target_os = "ios")))] #[derive(Default)] pub struct CacheFlutter { pub pi: PeerInfo, @@ -72,6 +73,7 @@ pub struct Session { pub server_clipboard_enabled: Arc>, pub last_change_display: Arc>, #[cfg(feature = "flutter")] + #[cfg(not(any(target_os = "android", target_os = "ios")))] pub cache_flutter: Arc>, } @@ -1194,6 +1196,7 @@ impl Session { } #[cfg(feature = "flutter")] + #[cfg(not(any(target_os = "android", target_os = "ios")))] pub fn restore_flutter_cache(&mut self) { let pi = self.cache_flutter.read().unwrap().pi.clone(); self.handle_peer_info(pi); From 2db8f1f9d1c52166f9fd859f9ca0250a3711324a Mon Sep 17 00:00:00 2001 From: dignow Date: Sat, 5 Aug 2023 19:48:32 +0800 Subject: [PATCH 295/612] refact, separate remote window Signed-off-by: dignow --- flutter/lib/models/model.dart | 8 ++++---- src/flutter_ffi.rs | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index a77b3b238..ba6c50ac0 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1656,13 +1656,13 @@ class FFI { final cb = ffiModel.startEventListener(sessionId, id); final useTextureRender = bind.mainUseTextureRender(); - final SimpleWrapper isCacheRestored = SimpleWrapper(false); + final SimpleWrapper isToNewWindowNotified = SimpleWrapper(false); // Preserved for the rgba data. stream.listen((message) { if (closed) return; - if (isSessionAdded && !isCacheRestored.value) { - bind.sessionRestoreCache(sessionId: sessionId); - isCacheRestored.value = true; + if (isSessionAdded && !isToNewWindowNotified.value) { + bind.sessionReadyToNewWindow(sessionId: sessionId); + isToNewWindowNotified.value = true; } () async { if (message is EventToUI_Event) { diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 05819dfd8..0a93ac58c 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -601,10 +601,11 @@ pub fn session_change_resolution(session_id: SessionID, display: i32, width: i32 } } -pub fn session_restore_cache(session_id: SessionID) { +pub fn session_ready_to_new_window(session_id: SessionID) { #[cfg(not(any(target_os = "android", target_os = "ios")))] if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) { session.restore_flutter_cache(); + session.refresh_video(); } } From bc039a31c5408bf4d75b8e4a19b68a63b6728bfa Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 5 Aug 2023 21:40:15 +0800 Subject: [PATCH 296/612] try fix waiting for image when already shown Signed-off-by: 21pages --- flutter/lib/common.dart | 9 ++++++--- flutter/lib/models/model.dart | 16 +++++++++++++++- src/flutter.rs | 8 ++++++++ src/flutter_ffi.rs | 6 ++++++ 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index b467f8484..cf7506535 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -689,9 +689,12 @@ class OverlayDialogManager { String showLoading(String text, {bool clickMaskDismiss = false, bool showCancel = true, - VoidCallback? onCancel}) { - final tag = _tagCount.toString(); - _tagCount++; + VoidCallback? onCancel, + String? tag}) { + if (tag == null) { + tag = _tagCount.toString(); + _tagCount++; + } show((setState, close, context) { cancel() { dismissAll(); diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 54965680a..4a672f200 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -480,9 +480,11 @@ class FfiModel with ChangeNotifier { if (displays.isNotEmpty) { parent.target?.dialogManager.showLoading( translate('Connected, waiting for image...'), - onCancel: closeConnection); + onCancel: closeConnection, + tag: '$peerId-waiting-for-image'); _waitForImage[sessionId] = true; _reconnects = 1; + bind.sessionOnWaitingForImageDialogShow(sessionId: sessionId); } Map features = json.decode(evt['features']); _pi.features.privacyMode = features['privacy_mode'] == 1; @@ -636,6 +638,8 @@ class ImageModel with ChangeNotifier { if (waitforImage == true) { _waitForImage[sessionId] = false; parent.target?.dialogManager.dismissAll(); + clearWaitingForImage(parent.target?.dialogManager, id); + if (isDesktop) { for (final cb in callbacksOnFirstImage) { cb(id); @@ -1681,6 +1685,7 @@ class FFI { } await canvasModel.updateViewStyle(); await canvasModel.updateScrollStyle(); + clearWaitingForImage(dialogManager, id); } } else { // Fetch the image buffer from rust codes. @@ -1873,3 +1878,12 @@ Future initializeCursorAndCanvas(FFI ffi) async { ffi.ffiModel.display.x, ffi.ffiModel.display.y, xCursor, yCursor); ffi.canvasModel.update(xCanvas, yCanvas, scale); } + +clearWaitingForImage(OverlayDialogManager? dialogManager, String id) { + final durations = [100, 500, 1000, 2000]; + for (var duration in durations) { + Future.delayed(Duration(milliseconds: duration), () { + dialogManager?.dismissByTag('$id-waiting-for-image'); + }); + } +} diff --git a/src/flutter.rs b/src/flutter.rs index de4791f38..a754f913b 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -337,6 +337,14 @@ impl FlutterHandler { *self.notify_rendered.write().unwrap() = false; self.renderer.write().unwrap().set_size(width, height); } + + pub fn on_waiting_for_image_dialog_show(&self) { + #[cfg(any(feature = "flutter_texture_render"))] + { + *self.notify_rendered.write().unwrap() = false; + } + // rgba array render will notify every frame + } } impl InvokeUiSession for FlutterHandler { diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 8925b5804..20ebd55a9 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1216,6 +1216,12 @@ pub fn session_change_prefer_codec(session_id: SessionID) { } } +pub fn session_on_waiting_for_image_dialog_show(session_id: SessionID) { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + session.ui_handler.on_waiting_for_image_dialog_show(); + } +} + pub fn main_set_home_dir(_home: String) { #[cfg(any(target_os = "android", target_os = "ios"))] { From e2228cc448a7164f5c3da60fe6ac1d7cba97ea8c Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 6 Aug 2023 10:19:30 +0800 Subject: [PATCH 297/612] refact, split tab to separate window Signed-off-by: dignow --- flutter/lib/consts.dart | 1 + .../lib/desktop/pages/desktop_home_page.dart | 11 +++++ .../desktop/pages/desktop_setting_page.dart | 8 ---- .../lib/desktop/pages/remote_tab_page.dart | 16 +++++++ flutter/lib/utils/multi_window_manager.dart | 48 ++++++++----------- src/lang/ca.rs | 1 + src/lang/cn.rs | 1 + src/lang/cs.rs | 1 + src/lang/da.rs | 1 + src/lang/de.rs | 1 + src/lang/el.rs | 1 + src/lang/eo.rs | 1 + src/lang/es.rs | 1 + src/lang/fa.rs | 1 + src/lang/fr.rs | 1 + src/lang/hu.rs | 1 + src/lang/id.rs | 1 + src/lang/it.rs | 1 + src/lang/ja.rs | 1 + src/lang/ko.rs | 1 + src/lang/kz.rs | 1 + src/lang/lt.rs | 1 + src/lang/nl.rs | 1 + src/lang/pl.rs | 1 + src/lang/pt_PT.rs | 1 + src/lang/ptbr.rs | 1 + src/lang/ro.rs | 1 + src/lang/ru.rs | 1 + src/lang/sk.rs | 1 + src/lang/sl.rs | 1 + src/lang/sq.rs | 1 + src/lang/sr.rs | 1 + src/lang/sv.rs | 1 + src/lang/template.rs | 1 + src/lang/th.rs | 1 + src/lang/tr.rs | 1 + src/lang/tw.rs | 1 + src/lang/ua.rs | 1 + src/lang/vn.rs | 1 + 39 files changed, 81 insertions(+), 37 deletions(-) diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 59d0576a1..65e8611c3 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -39,6 +39,7 @@ const String kWindowEventActiveSession = "active_session"; const String kWindowEventGetRemoteList = "get_remote_list"; const String kWindowEventGetSessionIdList = "get_session_id_list"; +const String kWindowEventSplit = "split"; const String kWindowEventCloseForSeparateWindow = "close_for_separate_window"; const String kOptionSeparateRemoteWindow = "enable-separate-remote-window"; diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index 43c73b0b5..34916481c 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -570,6 +570,17 @@ class _DesktopHomePageState extends State forceRelay: call.arguments['forceRelay'], forceSeparateWindow: call.arguments['forceSeparateWindow'], ); + } else if (call.method == kWindowEventSplit) { + final args = call.arguments.split(','); + int? windowId; + try { + windowId = int.parse(args[0]); + } catch (e) { + debugPrint("Failed to parse window id '${call.arguments}': $e"); + } + if (windowId != null) { + await rustDeskWinManager.splitWindow(windowId, args[1], args[2]); + } } }); _uniLinksSubscription = listenUniLinks(); diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 9072643ea..06555bc8d 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -6,7 +6,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/consts.dart'; -import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:flutter_hbb/desktop/pages/desktop_home_page.dart'; import 'package:flutter_hbb/desktop/pages/desktop_tab_page.dart'; import 'package:flutter_hbb/models/platform_model.dart'; @@ -323,13 +322,6 @@ class _GeneralState extends State<_General> { 'Separate remote window', kOptionSeparateRemoteWindow, isServer: false, - update: () { - final useSeparateWindow = - mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow); - if (useSeparateWindow) { - rustDeskWinManager.separateWindows(); - } - }, ), ]; // though this is related to GUI, but opengl problem affects all users, so put in config rather than local diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 080895729..e4bbeba92 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -329,6 +329,22 @@ class _ConnectionTabPageState extends State { )); } + if (tabController.state.value.tabs.length > 1) { + final splitAction = MenuEntryButton( + childBuilder: (TextStyle? style) => Text( + translate('Split'), + style: style, + ), + proc: () async { + await DesktopMultiWindow.invokeMethod( + kMainWindowId, kWindowEventSplit, '${windowId()},$key,$sessionId'); + cancelFunc(); + }, + padding: padding, + ); + menu.insert(1, splitAction); + } + if (perms['keyboard'] != false && !ffi.ffiModel.viewOnly) { if (perms['clipboard'] != false) { menu.add(RemoteMenuEntry.disableClipboard(sessionId, padding, diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index b0959246b..fb576e426 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -43,33 +43,22 @@ class RustDeskMultiWindowManager { final List _fileTransferWindows = List.empty(growable: true); final List _portForwardWindows = List.empty(growable: true); - separateWindows() async { - for (final windowId in _remoteDesktopWindows.toList()) { - final String sessionIdList = await DesktopMultiWindow.invokeMethod( - windowId, kWindowEventGetSessionIdList, null); - final idList = sessionIdList.split(';'); - if (idList.length <= 1) { - continue; - } - for (final idPair in idList.sublist(1)) { - final peerSession = idPair.split(','); - var params = { - 'type': WindowType.RemoteDesktop.index, - 'id': peerSession[0], - 'session_id': peerSession[1], - }; - await _newSession( - true, - WindowType.RemoteDesktop, - kWindowEventNewRemoteDesktop, - peerSession[0], - _remoteDesktopWindows, - jsonEncode(params), - ); - await DesktopMultiWindow.invokeMethod( - windowId, kWindowEventCloseForSeparateWindow, peerSession[0]); - } - } + splitWindow(int windowId, String peerId, String sessionId) async { + var params = { + 'type': WindowType.RemoteDesktop.index, + 'id': peerId, + 'session_id': sessionId, + }; + await _newSession( + true, + WindowType.RemoteDesktop, + kWindowEventNewRemoteDesktop, + peerId, + _remoteDesktopWindows, + jsonEncode(params), + ); + await DesktopMultiWindow.invokeMethod( + windowId, kWindowEventCloseForSeparateWindow, peerId); } newSessionWindow( @@ -214,7 +203,8 @@ class RustDeskMultiWindowManager { } for (final windowId in wnds) { if (_activeWindows.contains(windowId)) { - return await DesktopMultiWindow.invokeMethod(windowId, methodName, args); + return await DesktopMultiWindow.invokeMethod( + windowId, methodName, args); } } return await DesktopMultiWindow.invokeMethod(wnds[0], methodName, args); @@ -223,7 +213,7 @@ class RustDeskMultiWindowManager { List _findWindowsByType(WindowType type) { switch (type) { case WindowType.Main: - return [0]; + return [kMainWindowId]; case WindowType.RemoteDesktop: return _remoteDesktopWindows; case WindowType.FileTransfer: diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 326ef5dd0..d285805f5 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index f52cb9b61..3e93a7869 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "对标签进行排序"), ("Separate remote window", "使用独立远程窗口"), ("separate window", "独立窗口"), + ("Split", "拆分"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index a61c46001..8bc165f40 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index c3f43b7f1..c44973bbf 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index e59eb63d6..24a59d4fc 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Tags sortieren"), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 83160cae7..ccfd1c8ec 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 47792961a..9cc79a98a 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index b57474793..2d33c5756 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Ordenar etiquetas"), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 6f2531b46..f57687e53 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 679620a99..bab0ef06b 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 8eacb75d3..02b0ed900 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 2d12c31e5..608b00cd1 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 5118adc16..d1c71c385 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Ordina etichette"), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index ed09d6132..e5328f332 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index d48347023..05f003f63 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 1bcadec64..634654dc6 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index accdf9a39..bdc8c9e24 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index b1bcd1d2a..d4868b401 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Labels sorteren"), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 1d813ef41..8aa9525ab 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 6b32a1e48..196f1e5c3 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index c732dd2af..53c91b3c6 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 4db68ee50..f3cc62202 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 9dcef1a48..c44335f69 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Сортировка меток"), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 3f8d57169..0c7e5f2d8 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index e3c17a659..ff0c0114d 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 46db68578..261d5fa5a 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 370865e0a..9ce8e4c3f 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 3ec8535ef..72b3f3243 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 7eb168fdf..82fcec792 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index f125384de..b17f432d0 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index b4959b158..c2467ce5d 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index cda76a154..c705665ae 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 8d46b61ae..879dd9d94 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index c188e2d14..52fef05d4 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -526,5 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), + ("Split", ""), ].iter().cloned().collect(); } From 2692c295199967af0750af5957059947f113dcad Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 6 Aug 2023 10:56:57 +0800 Subject: [PATCH 298/612] refact, split window, debug Signed-off-by: dignow --- src/client/io_loop.rs | 13 ++++++++++++- src/ui_session_interface.rs | 4 ++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index eee857f60..c24d0f54c 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -125,7 +125,18 @@ impl Remote { .await { Ok((mut peer, direct, pk)) => { - self.handler.set_connection_type(peer.is_secured(), direct); // flutter -> connection_ready + let is_secured = peer.is_secured(); + #[cfg(feature = "flutter")] + #[cfg(not(any(target_os = "android", target_os = "ios")))] + { + self.handler + .cache_flutter + .write() + .unwrap() + .is_secured_direct + .replace((is_secured, direct)); + } + self.handler.set_connection_type(is_secured, direct); // flutter -> connection_ready self.handler.update_direct(Some(direct)); if conn_type == ConnType::DEFAULT_CONN { self.handler diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 21b9c9d9e..704b91cf0 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -56,6 +56,7 @@ pub struct CacheFlutter { pub sp: Option, pub cursor_data: HashMap, pub cursor_id: u64, + pub is_secured_direct: Option<(bool, bool)>, } #[derive(Clone, Default)] @@ -1198,6 +1199,9 @@ impl Session { #[cfg(feature = "flutter")] #[cfg(not(any(target_os = "android", target_os = "ios")))] pub fn restore_flutter_cache(&mut self) { + if let Some((is_secured, direct)) = self.cache_flutter.read().unwrap().is_secured_direct { + self.set_connection_type(is_secured, direct); + } let pi = self.cache_flutter.read().unwrap().pi.clone(); self.handle_peer_info(pi); if let Some(sp) = self.cache_flutter.read().unwrap().sp.as_ref() { From 7ddc706f2d39d5cd0fea17d9b84682e00c021550 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 6 Aug 2023 11:21:07 +0800 Subject: [PATCH 299/612] refact, change 'Split' to 'Move tab to new window' Signed-off-by: dignow --- flutter/lib/common/widgets/peer_card.dart | 1 - flutter/lib/consts.dart | 2 +- flutter/lib/desktop/pages/desktop_home_page.dart | 4 ++-- flutter/lib/desktop/pages/remote_tab_page.dart | 4 ++-- flutter/lib/utils/multi_window_manager.dart | 2 +- src/lang/ca.rs | 2 +- src/lang/cn.rs | 2 +- src/lang/cs.rs | 2 +- src/lang/da.rs | 2 +- src/lang/de.rs | 2 +- src/lang/el.rs | 2 +- src/lang/eo.rs | 2 +- src/lang/es.rs | 2 +- src/lang/fa.rs | 2 +- src/lang/fr.rs | 2 +- src/lang/hu.rs | 2 +- src/lang/id.rs | 2 +- src/lang/it.rs | 2 +- src/lang/ja.rs | 2 +- src/lang/ko.rs | 2 +- src/lang/kz.rs | 2 +- src/lang/lt.rs | 2 +- src/lang/nl.rs | 2 +- src/lang/pl.rs | 2 +- src/lang/pt_PT.rs | 2 +- src/lang/ptbr.rs | 2 +- src/lang/ro.rs | 2 +- src/lang/ru.rs | 2 +- src/lang/sk.rs | 2 +- src/lang/sl.rs | 2 +- src/lang/sq.rs | 2 +- src/lang/sr.rs | 2 +- src/lang/sv.rs | 2 +- src/lang/template.rs | 2 +- src/lang/th.rs | 2 +- src/lang/tr.rs | 2 +- src/lang/tw.rs | 2 +- src/lang/ua.rs | 2 +- src/lang/vn.rs | 2 +- 39 files changed, 40 insertions(+), 41 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 4e03edfbd..61c5cb69e 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -2,7 +2,6 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_hbb/common/widgets/address_book.dart'; import 'package:flutter_hbb/common/widgets/dialog.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/models/peer_tab_model.dart'; diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 65e8611c3..92ad7451a 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -39,7 +39,7 @@ const String kWindowEventActiveSession = "active_session"; const String kWindowEventGetRemoteList = "get_remote_list"; const String kWindowEventGetSessionIdList = "get_session_id_list"; -const String kWindowEventSplit = "split"; +const String kWindowEventMoveTabToNewWindow = "move_tab_to_new_window"; const String kWindowEventCloseForSeparateWindow = "close_for_separate_window"; const String kOptionSeparateRemoteWindow = "enable-separate-remote-window"; diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index 34916481c..b87820b97 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -570,7 +570,7 @@ class _DesktopHomePageState extends State forceRelay: call.arguments['forceRelay'], forceSeparateWindow: call.arguments['forceSeparateWindow'], ); - } else if (call.method == kWindowEventSplit) { + } else if (call.method == kWindowEventMoveTabToNewWindow) { final args = call.arguments.split(','); int? windowId; try { @@ -579,7 +579,7 @@ class _DesktopHomePageState extends State debugPrint("Failed to parse window id '${call.arguments}': $e"); } if (windowId != null) { - await rustDeskWinManager.splitWindow(windowId, args[1], args[2]); + await rustDeskWinManager.moveTabToNewWindow(windowId, args[1], args[2]); } } }); diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index e4bbeba92..712ded223 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -332,12 +332,12 @@ class _ConnectionTabPageState extends State { if (tabController.state.value.tabs.length > 1) { final splitAction = MenuEntryButton( childBuilder: (TextStyle? style) => Text( - translate('Split'), + translate('Move tab to new window'), style: style, ), proc: () async { await DesktopMultiWindow.invokeMethod( - kMainWindowId, kWindowEventSplit, '${windowId()},$key,$sessionId'); + kMainWindowId, kWindowEventMoveTabToNewWindow, '${windowId()},$key,$sessionId'); cancelFunc(); }, padding: padding, diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index fb576e426..3287c52ed 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -43,7 +43,7 @@ class RustDeskMultiWindowManager { final List _fileTransferWindows = List.empty(growable: true); final List _portForwardWindows = List.empty(growable: true); - splitWindow(int windowId, String peerId, String sessionId) async { + moveTabToNewWindow(int windowId, String peerId, String sessionId) async { var params = { 'type': WindowType.RemoteDesktop.index, 'id': peerId, diff --git a/src/lang/ca.rs b/src/lang/ca.rs index d285805f5..4fa999491 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 3e93a7869..8569088ba 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "对标签进行排序"), ("Separate remote window", "使用独立远程窗口"), ("separate window", "独立窗口"), - ("Split", "拆分"), + ("Move tab to new window", "将标签页移至新窗口"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 8bc165f40..28c105aad 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index c44973bbf..1935d8a6f 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 24a59d4fc..6b4798e95 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Tags sortieren"), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index ccfd1c8ec..4e0994268 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 9cc79a98a..d81bce08c 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 2d33c5756..aa7310e41 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Ordenar etiquetas"), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index f57687e53..d7af98c07 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index bab0ef06b..63539061a 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 02b0ed900..893537880 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 608b00cd1..e0967a287 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index d1c71c385..3a5dab832 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Ordina etichette"), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index e5328f332..767e4faa6 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 05f003f63..32d57f4fc 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 634654dc6..33ca22920 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index bdc8c9e24..2f3233bb7 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index d4868b401..fab4af88a 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Labels sorteren"), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 8aa9525ab..2f61ebb16 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 196f1e5c3..8dbbe9bee 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 53c91b3c6..326b64c5c 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index f3cc62202..9051e8c42 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index c44335f69..e18abb4c4 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Сортировка меток"), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 0c7e5f2d8..6ac2ed4ab 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index ff0c0114d..631b8a6ea 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 261d5fa5a..102800cca 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 9ce8e4c3f..22c2f7da3 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 72b3f3243..dcf3620d8 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 82fcec792..e19c4a022 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index b17f432d0..7325c0f90 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index c2467ce5d..086a713c9 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index c705665ae..ad66ee6bd 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 879dd9d94..852a276a0 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 52fef05d4..f8b08ca79 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -526,6 +526,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Separate remote window", ""), ("separate window", ""), - ("Split", ""), + ("Move tab to new window", ""), ].iter().cloned().collect(); } From d02dc1797cc286ef009e5ed57b5e437bc342217f Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 6 Aug 2023 11:24:03 +0800 Subject: [PATCH 300/612] refact, change default separate window option Signed-off-by: dignow --- flutter/lib/consts.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 92ad7451a..99a87362e 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -42,7 +42,7 @@ const String kWindowEventGetSessionIdList = "get_session_id_list"; const String kWindowEventMoveTabToNewWindow = "move_tab_to_new_window"; const String kWindowEventCloseForSeparateWindow = "close_for_separate_window"; -const String kOptionSeparateRemoteWindow = "enable-separate-remote-window"; +const String kOptionSeparateRemoteWindow = "allow-separate-remote-window"; const String kUniLinksPrefix = "rustdesk://"; const String kUrlActionClose = "close"; From 5124cc49b30b11cdc1f303446aa309250dbfd127 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 6 Aug 2023 14:05:48 +0800 Subject: [PATCH 301/612] fix some words --- flutter/lib/desktop/pages/desktop_setting_page.dart | 4 ++-- src/lang/ca.rs | 4 ++-- src/lang/cn.rs | 4 ++-- src/lang/cs.rs | 4 ++-- src/lang/da.rs | 4 ++-- src/lang/de.rs | 4 ++-- src/lang/el.rs | 4 ++-- src/lang/eo.rs | 4 ++-- src/lang/es.rs | 4 ++-- src/lang/fa.rs | 4 ++-- src/lang/fr.rs | 4 ++-- src/lang/hu.rs | 4 ++-- src/lang/id.rs | 4 ++-- src/lang/it.rs | 4 ++-- src/lang/ja.rs | 4 ++-- src/lang/ko.rs | 4 ++-- src/lang/kz.rs | 4 ++-- src/lang/lt.rs | 4 ++-- src/lang/nl.rs | 4 ++-- src/lang/pl.rs | 4 ++-- src/lang/pt_PT.rs | 4 ++-- src/lang/ptbr.rs | 4 ++-- src/lang/ro.rs | 4 ++-- src/lang/ru.rs | 4 ++-- src/lang/sk.rs | 4 ++-- src/lang/sl.rs | 4 ++-- src/lang/sq.rs | 4 ++-- src/lang/sr.rs | 4 ++-- src/lang/sv.rs | 4 ++-- src/lang/template.rs | 4 ++-- src/lang/th.rs | 4 ++-- src/lang/tr.rs | 4 ++-- src/lang/tw.rs | 4 ++-- src/lang/ua.rs | 4 ++-- src/lang/vn.rs | 4 ++-- 35 files changed, 70 insertions(+), 70 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 06555bc8d..4a4992c58 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -316,10 +316,10 @@ class _GeneralState extends State<_General> { _OptionCheckBox(context, 'Confirm before closing multiple tabs', 'enable-confirm-closing-tabs', isServer: false), - _OptionCheckBox(context, 'Adaptive Bitrate', 'enable-abr'), + _OptionCheckBox(context, 'Adaptive bitrate', 'enable-abr'), _OptionCheckBox( context, - 'Separate remote window', + 'Separate remote windows', kOptionSeparateRemoteWindow, isServer: false, ), diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 4fa999491..45cee7d83 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Entrada d'àudio"), ("Enhancements", "Millores"), ("Hardware Codec", "Còdec de hardware"), - ("Adaptive Bitrate", "Tasa de bits adaptativa"), + ("Adaptive bitrate", "Tasa de bits adaptativa"), ("ID Server", "Servidor de IDs"), ("Relay Server", "Servidor Relay"), ("API Server", "Servidor API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 8569088ba..d2e3ef28a 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "音频输入"), ("Enhancements", "增强功能"), ("Hardware Codec", "硬件编解码"), - ("Adaptive Bitrate", "自适应码率"), + ("Adaptive bitrate", "自适应码率"), ("ID Server", "ID 服务器"), ("Relay Server", "中继服务器"), ("API Server", "API 服务器"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "管理的设备数已达到最大值"), ("Sync with recent sessions", "同步最近会话"), ("Sort tags", "对标签进行排序"), - ("Separate remote window", "使用独立远程窗口"), + ("Separate remote windows", "使用独立远程窗口"), ("separate window", "独立窗口"), ("Move tab to new window", "将标签页移至新窗口"), ].iter().cloned().collect(); diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 28c105aad..563f27f89 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Vstup zvuku"), ("Enhancements", ""), ("Hardware Codec", ""), - ("Adaptive Bitrate", ""), + ("Adaptive bitrate", ""), ("ID Server", "Server pro identif."), ("Relay Server", "Předávací (relay) server"), ("API Server", "Server s API rozhraním"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/da.rs b/src/lang/da.rs index 1935d8a6f..c695b164c 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Lydinput"), ("Enhancements", "Forbedringer"), ("Hardware Codec", "Hardware-codec"), - ("Adaptive Bitrate", "Adaptiv Bitrate"), + ("Adaptive bitrate", "Adaptiv bitrate"), ("ID Server", "ID Server"), ("Relay Server", "Relay Server"), ("API Server", "API Server"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/de.rs b/src/lang/de.rs index 6b4798e95..fc4ceacb8 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Audioeingang"), ("Enhancements", "Verbesserungen"), ("Hardware Codec", "Hardware-Codec"), - ("Adaptive Bitrate", "Bitrate automatisch anpassen"), + ("Adaptive bitrate", "Bitrate automatisch anpassen"), ("ID Server", "ID-Server"), ("Relay Server", "Relay-Server"), ("API Server", "API-Server"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."), ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/el.rs b/src/lang/el.rs index 4e0994268..ac0539d35 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Είσοδος ήχου"), ("Enhancements", "Βελτιώσεις"), ("Hardware Codec", "Κωδικοποιητής υλικού"), - ("Adaptive Bitrate", "Adaptive Bitrate"), + ("Adaptive bitrate", "Adaptive bitrate"), ("ID Server", "Διακομιστής ID"), ("Relay Server", "Διακομιστής αναμετάδοσης"), ("API Server", "Διακομιστής API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/eo.rs b/src/lang/eo.rs index d81bce08c..26a04bc55 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Aŭdia enigo"), ("Enhancements", ""), ("Hardware Codec", ""), - ("Adaptive Bitrate", ""), + ("Adaptive bitrate", ""), ("ID Server", "Servilo de identigiloj"), ("Relay Server", "Relajsa servilo"), ("API Server", "Servilo de API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/es.rs b/src/lang/es.rs index aa7310e41..894e8e266 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Entrada de audio"), ("Enhancements", "Mejoras"), ("Hardware Codec", "Códec de hardware"), - ("Adaptive Bitrate", "Tasa de bits adaptativa"), + ("Adaptive bitrate", "Tasa de bits adaptativa"), ("ID Server", "Servidor de IDs"), ("Relay Server", "Servidor Relay"), ("API Server", "Servidor API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Has alcanzado el máximo número de dispositivos administrados."), ("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sort tags", "Ordenar etiquetas"), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/fa.rs b/src/lang/fa.rs index d7af98c07..448fa5bfd 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "ورودی صدا"), ("Enhancements", "بهبودها"), ("Hardware Codec", "کدک سخت افزاری"), - ("Adaptive Bitrate", "سازگار Bitrate"), + ("Adaptive bitrate", "سازگار Bitrate"), ("ID Server", "شناسه سرور"), ("Relay Server", "Relay سرور"), ("API Server", "API سرور"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 63539061a..8ec1ba8de 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Entrée audio"), ("Enhancements", "Améliorations"), ("Hardware Codec", "Transcodage matériel"), - ("Adaptive Bitrate", "Débit adaptatif"), + ("Adaptive bitrate", "Débit adaptatif"), ("ID Server", "Serveur ID"), ("Relay Server", "Serveur relais"), ("API Server", "Serveur API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 893537880..2ef3d2b1f 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Hangátvitel"), ("Enhancements", "Fejlesztések"), ("Hardware Codec", "Hardware kodek"), - ("Adaptive Bitrate", "Adaptív bitráta"), + ("Adaptive bitrate", "Adaptív bitráta"), ("ID Server", "Szerver azonosító/domain"), ("Relay Server", "Kiszolgáló szerver"), ("API Server", "API szerver"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/id.rs b/src/lang/id.rs index e0967a287..ddeadc116 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Masukkan Audio"), ("Enhancements", "Peningkatan"), ("Hardware Codec", "Codec Perangkat Keras"), - ("Adaptive Bitrate", "Kecepatan Bitrate Adaptif"), + ("Adaptive bitrate", "Kecepatan Bitrate Adaptif"), ("ID Server", "Server ID"), ("Relay Server", "Server Relay"), ("API Server", "API Server"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/it.rs b/src/lang/it.rs index 3a5dab832..22b349151 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Ingresso audio"), ("Enhancements", "Miglioramenti"), ("Hardware Codec", "Codec hardware"), - ("Adaptive Bitrate", "Bitrate adattivo"), + ("Adaptive bitrate", "Bitrate adattivo"), ("ID Server", "ID server"), ("Relay Server", "Server relay"), ("API Server", "Server API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."), ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 767e4faa6..3092c9305 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "音声入力デバイス"), ("Enhancements", "追加機能"), ("Hardware Codec", "ハードウェア コーデック"), - ("Adaptive Bitrate", "アダプティブビットレート"), + ("Adaptive bitrate", "アダプティブビットレート"), ("ID Server", "認証サーバー"), ("Relay Server", "中継サーバー"), ("API Server", "APIサーバー"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 32d57f4fc..52604aa2e 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "오디오 입력"), ("Enhancements", ""), ("Hardware Codec", "하드웨어 코덱"), - ("Adaptive Bitrate", "가변 비트레이트"), + ("Adaptive bitrate", "가변 비트레이트"), ("ID Server", "ID 서버"), ("Relay Server", "Relay 서버"), ("API Server", "API 서버"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 33ca22920..c253ecdcd 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Аудио Еңгізу"), ("Enhancements", "Жақсартулар"), ("Hardware Codec", "Hardware Codec"), - ("Adaptive Bitrate", "Adaptive Bitrate"), + ("Adaptive bitrate", "Adaptive bitrate"), ("ID Server", "ID Сербері"), ("Relay Server", "Relay Сербері"), ("API Server", "API Сербері"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 2f3233bb7..618e554d0 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Garso įvestis"), ("Enhancements", "Patobulinimai"), ("Hardware Codec", "Aparatinės įrangos paspartinimas"), - ("Adaptive Bitrate", "Adaptyvusis pralaidumas"), + ("Adaptive bitrate", "Adaptyvusis pralaidumas"), ("ID Server", "ID serveris"), ("Relay Server", "Perdavimo serveris"), ("API Server", "API serveris"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/nl.rs b/src/lang/nl.rs index fab4af88a..4e47e2c11 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Audio Ingang"), ("Enhancements", "Verbeteringen"), ("Hardware Codec", "Hardware Codec"), - ("Adaptive Bitrate", "Aangepaste Bitsnelheid"), + ("Adaptive bitrate", "Aangepaste Bitsnelheid"), ("ID Server", "Server ID"), ("Relay Server", "Relay Server"), ("API Server", "API Server"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Het maximum aantal gecontroleerde apparaten is bereikt."), ("Sync with recent sessions", "Recente sessies synchroniseren"), ("Sort tags", "Labels sorteren"), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 2f61ebb16..bfe9ecb3e 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Wejście audio"), ("Enhancements", "Ulepszenia"), ("Hardware Codec", "Kodek sprzętowy"), - ("Adaptive Bitrate", "Adaptacyjny bitrate"), + ("Adaptive bitrate", "Adaptacyjny bitrate"), ("ID Server", "Serwer ID"), ("Relay Server", "Serwer pośredniczący"), ("API Server", "Serwer API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 8dbbe9bee..0d7d78eb9 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Entrada de Áudio"), ("Enhancements", "Melhorias"), ("Hardware Codec", ""), - ("Adaptive Bitrate", ""), + ("Adaptive bitrate", ""), ("ID Server", "Servidor de ID"), ("Relay Server", "Servidor de Relay"), ("API Server", "Servidor da API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 326b64c5c..abf3aac93 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Entrada de Áudio"), ("Enhancements", "Melhorias"), ("Hardware Codec", "Codec de hardware"), - ("Adaptive Bitrate", "Taxa de bits adaptável"), + ("Adaptive bitrate", "Taxa de bits adaptável"), ("ID Server", "Servidor de ID"), ("Relay Server", "Servidor de Relay"), ("API Server", "Servidor da API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 9051e8c42..b4b372275 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Intrări audio"), ("Enhancements", "Îmbunătățiri"), ("Hardware Codec", "Codec hardware"), - ("Adaptive Bitrate", "Rată de biți adaptabilă"), + ("Adaptive bitrate", "Rată de biți adaptabilă"), ("ID Server", "Server de ID"), ("Relay Server", "Server de retransmisie"), ("API Server", "Server API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ru.rs b/src/lang/ru.rs index e18abb4c4..7ed29792f 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Аудиовход"), ("Enhancements", "Улучшения"), ("Hardware Codec", "Аппаратный кодек"), - ("Adaptive Bitrate", "Адаптивная скорость потока"), + ("Adaptive bitrate", "Адаптивная скорость потока"), ("ID Server", "ID-сервер"), ("Relay Server", "Сервер ретрансляции"), ("API Server", "API-сервер"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 6ac2ed4ab..549d5acc4 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Zvukový vstup"), ("Enhancements", ""), ("Hardware Codec", ""), - ("Adaptive Bitrate", ""), + ("Adaptive bitrate", ""), ("ID Server", "ID server"), ("Relay Server", "Prepojovací server"), ("API Server", "API server"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 631b8a6ea..c92336fc6 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Avdio vhod"), ("Enhancements", "Izboljšave"), ("Hardware Codec", "Strojni kodek"), - ("Adaptive Bitrate", "Prilagodljiva bitna hitrost"), + ("Adaptive bitrate", "Prilagodljiva bitna hitrost"), ("ID Server", "ID strežnik"), ("Relay Server", "Posredniški strežnik"), ("API Server", "API strežnik"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 102800cca..fc311bd37 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Inputi zërit"), ("Enhancements", "Përmirësimet"), ("Hardware Codec", "Kodeku Harduerik"), - ("Adaptive Bitrate", "Shpejtësia adaptive e biteve"), + ("Adaptive bitrate", "Shpejtësia adaptive e biteve"), ("ID Server", "ID e serverit"), ("Relay Server", "Serveri rele"), ("API Server", "Serveri API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 22c2f7da3..5b4d6a122 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Audio ulaz"), ("Enhancements", "Proširenja"), ("Hardware Codec", "Hardverski kodek"), - ("Adaptive Bitrate", "Prilagodljiva gustina podataka"), + ("Adaptive bitrate", "Prilagodljiva gustina podataka"), ("ID Server", "ID server"), ("Relay Server", "Posredni server"), ("API Server", "API server"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sv.rs b/src/lang/sv.rs index dcf3620d8..8b7ad3387 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Ljud input"), ("Enhancements", "Förbättringar"), ("Hardware Codec", "Hårdvarucodec"), - ("Adaptive Bitrate", "Adaptiv Bitrate"), + ("Adaptive bitrate", "Adaptiv Bitrate"), ("ID Server", "ID server"), ("Relay Server", "Relay Server"), ("API Server", "API Server"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/template.rs b/src/lang/template.rs index e19c4a022..733d45268 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", ""), ("Enhancements", ""), ("Hardware Codec", ""), - ("Adaptive Bitrate", ""), + ("Adaptive bitrate", ""), ("ID Server", ""), ("Relay Server", ""), ("API Server", ""), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/th.rs b/src/lang/th.rs index 7325c0f90..c817d4fe9 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "ออดิโออินพุท"), ("Enhancements", "การปรับปรุง"), ("Hardware Codec", "ฮาร์ดแวร์ codec"), - ("Adaptive Bitrate", "บิทเรทผันแปร"), + ("Adaptive bitrate", "บิทเรทผันแปร"), ("ID Server", "เซิร์ฟเวอร์ ID"), ("Relay Server", "เซิร์ฟเวอร์ Relay"), ("API Server", "เซิร์ฟเวอร์ API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 086a713c9..bab7adf31 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Ses Girişi"), ("Enhancements", "Geliştirmeler"), ("Hardware Codec", "Donanımsal Codec"), - ("Adaptive Bitrate", "Uyarlanabilir Bit Hızı"), + ("Adaptive bitrate", "Uyarlanabilir Bit Hızı"), ("ID Server", "ID Sunucu"), ("Relay Server", "Relay Sunucu"), ("API Server", "API Sunucu"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/tw.rs b/src/lang/tw.rs index ad66ee6bd..52f10c9ba 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "音訊輸入"), ("Enhancements", "增強功能"), ("Hardware Codec", "硬體編解碼器"), - ("Adaptive Bitrate", "自適應位元速率"), + ("Adaptive bitrate", "自適應位元速率"), ("ID Server", "ID 伺服器"), ("Relay Server", "轉送伺服器"), ("API Server", "API 伺服器"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 852a276a0..307d222e3 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Аудіовхід"), ("Enhancements", "Покращення"), ("Hardware Codec", "Апаратний кодек"), - ("Adaptive Bitrate", "Адаптивна швидкість потоку"), + ("Adaptive bitrate", "Адаптивна швидкість потоку"), ("ID Server", "ID-сервер"), ("Relay Server", "Сервер ретрансляції"), ("API Server", "API-сервер"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/vn.rs b/src/lang/vn.rs index f8b08ca79..0c68d1c62 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -53,7 +53,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Audio Input", "Đầu vào âm thanh"), ("Enhancements", "Các tiện ích"), ("Hardware Codec", "Codec phần cứng"), - ("Adaptive Bitrate", "Bitrate thích ứng"), + ("Adaptive bitrate", "Bitrate thích ứng"), ("ID Server", "Máy chủ ID"), ("Relay Server", "Máy chủ Chuyển tiếp"), ("API Server", "Máy chủ API"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote window", ""), + ("Separate remote windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); From fdfdbb3ffc41bd5cac53d7ed074cbfbd9db0f6a8 Mon Sep 17 00:00:00 2001 From: solokot Date: Sun, 6 Aug 2023 09:41:07 +0300 Subject: [PATCH 302/612] Update ru.rs --- src/lang/ru.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 7ed29792f..4f0e693eb 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -524,8 +524,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), - ("Separate remote windows", ""), - ("separate window", ""), - ("Move tab to new window", ""), + ("Separate remote windows", "Отдельные удалённые окна"), + ("separate window", "отдельное окно"), + ("Move tab to new window", "Переместить вкладку в отдельное окно"), ].iter().cloned().collect(); } From 7eec6e2cc0104d52dbd75c229ed7b41a637f5232 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Sun, 6 Aug 2023 09:56:26 +0200 Subject: [PATCH 303/612] Update italian language --- src/lang/it.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 22b349151..e0d79edf8 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -524,8 +524,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."), ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), - ("Separate remote windows", ""), - ("separate window", ""), - ("Move tab to new window", ""), + ("Separate remote windows", "Separa finestre remote"), + ("separate window", "Separa finestra"), + ("Move tab to new window", "Sposta scheda nella finestra successiva"), ].iter().cloned().collect(); } From 26ba25d2ae8858b9add9f2e37ae716ee0428abaf Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 6 Aug 2023 16:42:13 +0800 Subject: [PATCH 304/612] Move restart to tab right menu, and remove some items --- .../desktop/pages/file_manager_tab_page.dart | 2 +- .../lib/desktop/pages/remote_tab_page.dart | 114 +++++++++--------- flutter/lib/desktop/pages/server_page.dart | 2 +- 3 files changed, 56 insertions(+), 62 deletions(-) diff --git a/flutter/lib/desktop/pages/file_manager_tab_page.dart b/flutter/lib/desktop/pages/file_manager_tab_page.dart index 1412ba059..1e349c6f0 100644 --- a/flutter/lib/desktop/pages/file_manager_tab_page.dart +++ b/flutter/lib/desktop/pages/file_manager_tab_page.dart @@ -129,7 +129,7 @@ class _FileManagerTabPageState extends State { } else { final opt = "enable-confirm-closing-tabs"; final bool res; - if (!option2bool(opt, await bind.mainGetLocalOption(key: opt))) { + if (!option2bool(opt, bind.mainGetLocalOption(key: opt))) { res = true; } else { res = await closeConfirmDialog(); diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 712ded223..f2ceb9d8f 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -19,6 +19,8 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:bot_toast/bot_toast.dart'; +import '../../common/widgets/dialog.dart'; +import '../../common/widgets/toolbar.dart'; import '../../models/platform_model.dart'; class _MenuTheme { @@ -45,16 +47,17 @@ class _ConnectionTabPageState extends State { static const IconData unselectedIcon = Icons.desktop_windows_outlined; late ToolbarState _toolbarState; + String? peerId; var connectionMap = RxList.empty(growable: true); _ConnectionTabPageState(Map params) { _toolbarState = ToolbarState(); RemoteCountState.init(); - final peerId = params['id']; + peerId = params['id']; final sessionId = params['session_id']; if (peerId != null) { - ConnectionTypeState.init(peerId); + ConnectionTypeState.init(peerId!); tabController.onSelected = (id) { final remotePage = tabController.widget(id); if (remotePage is RemotePage) { @@ -66,14 +69,14 @@ class _ConnectionTabPageState extends State { UnreadChatCountState.find(id).value = 0; }; tabController.add(TabInfo( - key: peerId, - label: peerId, + key: peerId!, + label: peerId!, selectedIcon: selectedIcon, unselectedIcon: unselectedIcon, onTabCloseButton: () => tabController.closeBy(peerId), page: RemotePage( key: ValueKey(peerId), - id: peerId, + id: peerId!, sessionId: sessionId == null ? null : SessionID(sessionId), password: params['password'], toolbarState: _toolbarState, @@ -213,6 +216,9 @@ class _ConnectionTabPageState extends State { } var msgFingerprint = '${translate('Fingerprint')}:\n'; var fingerprint = FingerprintState.find(key).value; + if (fingerprint.isEmpty) { + fingerprint = 'N/A'; + } if (fingerprint.length > 5 * 8) { var first = fingerprint.substring(0, 39); var second = fingerprint.substring(40); @@ -285,17 +291,6 @@ class _ConnectionTabPageState extends State { final perms = ffi.ffiModel.permissions; final sessionId = ffi.sessionId; menu.addAll([ - MenuEntryButton( - childBuilder: (TextStyle? style) => Text( - translate('Close'), - style: style, - ), - proc: () { - tabController.closeBy(key); - cancelFunc(); - }, - padding: padding, - ), MenuEntryButton( childBuilder: (TextStyle? style) => Obx(() => Text( translate( @@ -308,27 +303,8 @@ class _ConnectionTabPageState extends State { }, padding: padding, ), - MenuEntryDivider(), - RemoteMenuEntry.viewStyle( - key, - ffi, - padding, - dismissFunc: cancelFunc, - ), ]); - if (!ffi.canvasModel.cursorEmbedded && - !ffi.ffiModel.viewOnly && - !pi.is_wayland) { - menu.add(MenuEntryDivider()); - menu.add(RemoteMenuEntry.showRemoteCursor( - key, - sessionId, - padding, - dismissFunc: cancelFunc, - )); - } - if (tabController.state.value.tabs.length > 1) { final splitAction = MenuEntryButton( childBuilder: (TextStyle? style) => Text( @@ -336,8 +312,8 @@ class _ConnectionTabPageState extends State { style: style, ), proc: () async { - await DesktopMultiWindow.invokeMethod( - kMainWindowId, kWindowEventMoveTabToNewWindow, '${windowId()},$key,$sessionId'); + await DesktopMultiWindow.invokeMethod(kMainWindowId, + kWindowEventMoveTabToNewWindow, '${windowId()},$key,$sessionId'); cancelFunc(); }, padding: padding, @@ -345,31 +321,49 @@ class _ConnectionTabPageState extends State { menu.insert(1, splitAction); } - if (perms['keyboard'] != false && !ffi.ffiModel.viewOnly) { - if (perms['clipboard'] != false) { - menu.add(RemoteMenuEntry.disableClipboard(sessionId, padding, - dismissFunc: cancelFunc)); - } - - menu.add(RemoteMenuEntry.insertLock(sessionId, padding, - dismissFunc: cancelFunc)); - - if (pi.platform == kPeerPlatformLinux || pi.sasEnabled) { - menu.add(RemoteMenuEntry.insertCtrlAltDel(sessionId, padding, - dismissFunc: cancelFunc)); - } + if (perms['restart'] != false && + (pi.platform == kPeerPlatformLinux || + pi.platform == kPeerPlatformWindows || + pi.platform == kPeerPlatformMacOS)) { + menu.add(MenuEntryButton( + childBuilder: (TextStyle? style) => Text( + translate('Restart Remote Device'), + style: style, + ), + proc: () => showRestartRemoteDevice( + pi, peerId ?? '', sessionId, ffi.dialogManager), + padding: padding, + dismissOnClicked: true, + dismissCallback: cancelFunc, + )); } - menu.add(MenuEntryButton( - childBuilder: (TextStyle? style) => Text( - translate('Copy Fingerprint'), - style: style, + if (perms['keyboard'] != false && !ffi.ffiModel.viewOnly) {} + + menu.addAll([ + MenuEntryDivider(), + MenuEntryButton( + childBuilder: (TextStyle? style) => Text( + translate('Copy Fingerprint'), + style: style, + ), + proc: () => onCopyFingerprint(FingerprintState.find(key).value), + padding: padding, + dismissOnClicked: true, + dismissCallback: cancelFunc, ), - proc: () => onCopyFingerprint(FingerprintState.find(key).value), - padding: padding, - dismissOnClicked: true, - dismissCallback: cancelFunc, - )); + MenuEntryButton( + childBuilder: (TextStyle? style) => Text( + translate('Close'), + style: style, + ), + proc: () { + tabController.closeBy(key); + cancelFunc(); + }, + padding: padding, + ) + ]); return mod_menu.PopupMenu( items: menu @@ -405,7 +399,7 @@ class _ConnectionTabPageState extends State { } else { final opt = "enable-confirm-closing-tabs"; final bool res; - if (!option2bool(opt, await bind.mainGetLocalOption(key: opt))) { + if (!option2bool(opt, bind.mainGetLocalOption(key: opt))) { res = true; } else { res = await closeConfirmDialog(); diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index c22935f09..ce7b26b58 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -254,7 +254,7 @@ class ConnectionManagerState extends State { } else { final opt = "enable-confirm-closing-tabs"; final bool res; - if (!option2bool(opt, await bind.mainGetLocalOption(key: opt))) { + if (!option2bool(opt, bind.mainGetLocalOption(key: opt))) { res = true; } else { res = await closeConfirmDialog(); From 3edba4e2db5cb4214a66de6eeffd062fe07da328 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 6 Aug 2023 16:47:41 +0800 Subject: [PATCH 305/612] fix, reuse window type Signed-off-by: dignow --- flutter/lib/utils/multi_window_manager.dart | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 3287c52ed..194a0d13d 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -90,22 +90,21 @@ class RustDeskMultiWindowManager { ) async { if (separateWindow) { if (kCloseMultiWindowByHide && _inactiveWindows.isNotEmpty) { - final windowId = _inactiveWindows.first; - final invokeRes = - await DesktopMultiWindow.invokeMethod(windowId, methodName, msg); - final windowController = WindowController.fromWindowId(windowId); - windowController.show(); - registerActiveWindow(windowController.windowId); - windows.add(windowController.windowId); - return invokeRes; - } else { - await newSessionWindow(type, remoteId, msg, windows); + for (final windowId in windows) { + if (_inactiveWindows.contains(windowId)) { + await DesktopMultiWindow.invokeMethod( + windowId, methodName, msg); + WindowController.fromWindowId(windowId).show(); + registerActiveWindow(windowId); + } + } } + await newSessionWindow(type, remoteId, msg, windows); } else { if (windows.isEmpty) { await newSessionWindow(type, remoteId, msg, windows); } else { - return call(type, methodName, msg); + call(type, methodName, msg); } } } From baf8d2511d9fd1857aaeb253cdb03b98f7983aa8 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 6 Aug 2023 17:12:53 +0800 Subject: [PATCH 306/612] fix, separate window, keyboard input Signed-off-by: dignow --- src/flutter_ffi.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index e4ce7da46..74806915f 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -389,6 +389,7 @@ pub fn session_enter_or_leave(_session_id: SessionID, _enter: bool) -> SyncRetur #[cfg(not(any(target_os = "android", target_os = "ios")))] if let Some(session) = SESSIONS.read().unwrap().get(&_session_id) { if _enter { + set_cur_session_id(_session_id); session.enter(); } else { session.leave(); From 0533f7c3d6f61b5f55f361f1cf8b58bcd57a567b Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 6 Aug 2023 18:31:02 +0800 Subject: [PATCH 307/612] fix, reuse inactive window Signed-off-by: dignow --- flutter/lib/utils/multi_window_manager.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 194a0d13d..0a1858c2c 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -96,6 +96,7 @@ class RustDeskMultiWindowManager { windowId, methodName, msg); WindowController.fromWindowId(windowId).show(); registerActiveWindow(windowId); + return; } } } From 70d16ab0970f25d0e15927ae17533bb8c27abac7 Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sat, 5 Aug 2023 15:50:10 +0800 Subject: [PATCH 308/612] Optimize git clone process in Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f8b0c0f77..9d724d289 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM debian WORKDIR / RUN apt update -y && 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 unzip zip sudo libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev cmake ninja-build -RUN git clone https://github.com/microsoft/vcpkg && cd vcpkg && git checkout 2023.04.15 +RUN git clone --branch 2023.04.15 --depth=1 https://github.com/microsoft/vcpkg RUN /vcpkg/bootstrap-vcpkg.sh -disableMetrics RUN /vcpkg/vcpkg --disable-metrics install libvpx libyuv opus aom From d665d9192095345cecb113050d949ae0a6b153b2 Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sat, 5 Aug 2023 22:30:22 +0800 Subject: [PATCH 309/612] Clean up apt cache in Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9d724d289..a05c07b63 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM debian WORKDIR / -RUN apt update -y && 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 unzip zip sudo libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev cmake ninja-build +RUN apt update -y && 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 unzip zip sudo libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev cmake ninja-build && rm -rf /var/lib/apt/lists/* RUN git clone --branch 2023.04.15 --depth=1 https://github.com/microsoft/vcpkg RUN /vcpkg/bootstrap-vcpkg.sh -disableMetrics From 99bcbaa601ecc7fef1f7522a8914e075db7053c6 Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sun, 6 Aug 2023 23:56:36 +0800 Subject: [PATCH 310/612] Drop `wget` dependency in Dockerfile --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index a05c07b63..8e44adb74 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM debian WORKDIR / -RUN apt update -y && 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 unzip zip sudo libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev cmake ninja-build && rm -rf /var/lib/apt/lists/* +RUN apt update -y && apt install -y g++ gcc git curl nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake unzip zip sudo libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev cmake ninja-build && rm -rf /var/lib/apt/lists/* RUN git clone --branch 2023.04.15 --depth=1 https://github.com/microsoft/vcpkg RUN /vcpkg/bootstrap-vcpkg.sh -disableMetrics @@ -9,7 +9,7 @@ RUN /vcpkg/vcpkg --disable-metrics install libvpx libyuv opus aom RUN groupadd -r user && useradd -r -g user user --home /home/user && mkdir -p /home/user && chown user /home/user && echo "user ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/user WORKDIR /home/user -RUN wget https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so +RUN curl -LO https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so USER user RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh RUN chmod +x rustup.sh From f4b52890e08d54518d668f1be01f765b90e5fd81 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Sun, 6 Aug 2023 23:01:46 +0200 Subject: [PATCH 311/612] Update de.rs --- src/lang/de.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index fc4ceacb8..3401d1517 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -410,7 +410,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Hide connection management window", "Fenster zur Verwaltung der Verbindung verstecken"), ("hide_cm_tip", "Dies ist nur möglich, wenn der Zugriff über ein permanentes Passwort erfolgt."), ("wayland_experiment_tip", "Die Unterstützung von Wayland ist nur experimentell. Bitte nutzen Sie X11, wenn Sie einen unbeaufsichtigten Zugriff benötigen."), - ("Right click to select tabs", "Register mit rechtem Mausklick auswählen"), + ("Right click to select tabs", "Tabs mit rechtem Mausklick auswählen"), ("Skipped", "Übersprungen"), ("Add to Address Book", "Zum Adressbuch hinzufügen"), ("Group", "Gruppe"), @@ -524,8 +524,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."), ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), - ("Separate remote windows", ""), - ("separate window", ""), - ("Move tab to new window", ""), + ("Separate remote windows", "Separate entfernte Fenster"), + ("separate window", "Separates Fenster"), + ("Move tab to new window", "Tab in neues Fenster verschieben"), ].iter().cloned().collect(); } From 7dcb28ce3342852ce5de337d13666c70eb7157a0 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 7 Aug 2023 09:01:31 +0800 Subject: [PATCH 312/612] fix, separate window, event stream leak Signed-off-by: dignow --- .../lib/desktop/pages/remote_tab_page.dart | 1 - flutter/lib/models/native_model.dart | 4 ++- src/flutter.rs | 30 +++++++++++++------ src/flutter_ffi.rs | 13 ++++---- src/keyboard.rs | 8 +++++ src/plugin/callback_msg.rs | 1 + src/plugin/native_handlers/session.rs | 2 ++ src/plugin/plugins.rs | 8 +---- 8 files changed, 41 insertions(+), 26 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index f2ceb9d8f..3762a2b52 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -20,7 +20,6 @@ import 'package:get/get.dart'; import 'package:bot_toast/bot_toast.dart'; import '../../common/widgets/dialog.dart'; -import '../../common/widgets/toolbar.dart'; import '../../models/platform_model.dart'; class _MenuTheme { diff --git a/flutter/lib/models/native_model.dart b/flutter/lib/models/native_model.dart index 51940bb18..d2e11e2c1 100644 --- a/flutter/lib/models/native_model.dart +++ b/flutter/lib/models/native_model.dart @@ -8,6 +8,7 @@ import 'package:ffi/ffi.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/consts.dart'; +import 'package:flutter_hbb/main.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:path_provider/path_provider.dart'; @@ -263,7 +264,8 @@ class PlatformFFI { /// Start listening to the Rust core's events and frames. void _startListenEvent(RustdeskImpl rustdeskImpl) { - var sink = rustdeskImpl.startGlobalEventStream(appType: _appType); + final appType = _appType == kAppTypeDesktopRemote ? '$_appType,$kWindowId' : _appType; + var sink = rustdeskImpl.startGlobalEventStream(appType: appType); sink.listen((message) { () async { try { diff --git a/src/flutter.rs b/src/flutter.rs index c0766c008..318c6c131 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -1093,16 +1093,28 @@ pub fn push_global_event(channel: &str, event: String) -> Option { Some(GLOBAL_EVENT_STREAM.read().unwrap().get(channel)?.add(event)) } -pub fn start_global_event_stream(s: StreamSink, app_type: String) -> ResultType<()> { - if let Some(_) = GLOBAL_EVENT_STREAM - .write() +#[inline] +pub fn get_global_event_channels() -> Vec { + GLOBAL_EVENT_STREAM + .read() .unwrap() - .insert(app_type.clone(), s) - { - log::warn!( - "Global event stream of type {} is started before, but now removed", - app_type - ); + .keys() + .cloned() + .collect() +} + +pub fn start_global_event_stream(s: StreamSink, app_type: String) -> ResultType<()> { + let app_type_values = app_type.split(",").collect::>(); + let mut lock = GLOBAL_EVENT_STREAM.write().unwrap(); + if !lock.contains_key(app_type_values[0]) { + lock.insert(app_type.clone(), s); + } else { + if let Some(_) = lock.insert(app_type.clone(), s) { + log::warn!( + "Global event stream of type {} is started before, but now removed", + app_type + ); + } } Ok(()) } diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 74806915f..3c483dbce 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -955,15 +955,12 @@ pub fn main_remove_discovered(id: String) { } fn main_broadcast_message(data: &HashMap<&str, &str>) { - let apps = vec![ - flutter::APP_TYPE_DESKTOP_REMOTE, - flutter::APP_TYPE_DESKTOP_FILE_TRANSFER, - flutter::APP_TYPE_DESKTOP_PORT_FORWARD, - ]; - let event = serde_json::ser::to_string(&data).unwrap_or("".to_owned()); - for app in apps { - let _res = flutter::push_global_event(app, event.clone()); + for app in flutter::get_global_event_channels() { + if app == flutter::APP_TYPE_MAIN || app == flutter::APP_TYPE_CM { + continue; + } + let _res = flutter::push_global_event(&app, event.clone()); } } diff --git a/src/keyboard.rs b/src/keyboard.rs index a217d6a89..ca12cf4a1 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -52,6 +52,9 @@ lazy_static::lazy_static! { pub mod client { use super::*; + lazy_static::lazy_static! { + static ref IS_GRAB_STARTED: Arc> = Arc::new(Mutex::new(false)); + } pub fn get_keyboard_mode() -> String { #[cfg(not(any(feature = "flutter", feature = "cli")))] @@ -70,7 +73,12 @@ pub mod client { } pub fn start_grab_loop() { + let mut lock = IS_GRAB_STARTED.lock().unwrap(); + if *lock { + return; + } super::start_grab_loop(); + *lock = true; } #[cfg(not(any(target_os = "android", target_os = "ios")))] diff --git a/src/plugin/callback_msg.rs b/src/plugin/callback_msg.rs index 7ea0f7ae5..e634595e8 100644 --- a/src/plugin/callback_msg.rs +++ b/src/plugin/callback_msg.rs @@ -368,6 +368,7 @@ fn push_event_to_ui(channel: u16, peer: &str, content: &str) { m.insert("peer", &peer); m.insert("content", &content); let event = serde_json::to_string(&m).unwrap_or("".to_string()); + // Send to main and cm for (k, v) in MSG_TO_UI_FLUTTER_CHANNELS.iter() { if channel & k != 0 { let _res = flutter::push_global_event(v as _, event.to_string()); diff --git a/src/plugin/native_handlers/session.rs b/src/plugin/native_handlers/session.rs index f8c507a5b..fda07cd17 100644 --- a/src/plugin/native_handlers/session.rs +++ b/src/plugin/native_handlers/session.rs @@ -131,6 +131,8 @@ impl PluginNativeSessionHandler { let mut m = HashMap::new(); m.insert("name", MSG_TO_UI_TYPE_SESSION_CREATED); m.insert("session_id", &session_id); + // todo: APP_TYPE_DESKTOP_REMOTE is not used anymore. + // crate::flutter::APP_TYPE_DESKTOP_REMOTE + window id, is used for multi-window support. crate::flutter::push_global_event( crate::flutter::APP_TYPE_DESKTOP_REMOTE, serde_json::to_string(&m).unwrap_or("".to_string()), diff --git a/src/plugin/plugins.rs b/src/plugin/plugins.rs index d4ffc4539..b40ee4116 100644 --- a/src/plugin/plugins.rs +++ b/src/plugin/plugins.rs @@ -628,13 +628,7 @@ fn reload_ui(desc: &Desc, sync_to: Option<&str>) { // The first element is the "client" or "host". // The second element is the "main", "remote", "cm", "file transfer", "port forward". if v.len() >= 2 { - let available_channels = vec![ - flutter::APP_TYPE_MAIN, - flutter::APP_TYPE_DESKTOP_REMOTE, - flutter::APP_TYPE_CM, - flutter::APP_TYPE_DESKTOP_FILE_TRANSFER, - flutter::APP_TYPE_DESKTOP_PORT_FORWARD, - ]; + let available_channels = flutter::get_global_event_channels(); if available_channels.contains(&v[1]) { let _res = flutter::push_global_event(v[1], make_event(&ui)); } From 46233a0f4c71b1e82d469873aa2b9a8d1eb35a29 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 7 Aug 2023 09:12:43 +0800 Subject: [PATCH 313/612] fix, event stream key Signed-off-by: dignow --- src/flutter.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/flutter.rs b/src/flutter.rs index 318c6c131..ae20b26a9 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -1107,7 +1107,7 @@ pub fn start_global_event_stream(s: StreamSink, app_type: String) -> Res let app_type_values = app_type.split(",").collect::>(); let mut lock = GLOBAL_EVENT_STREAM.write().unwrap(); if !lock.contains_key(app_type_values[0]) { - lock.insert(app_type.clone(), s); + lock.insert(app_type_values[0].to_string(), s); } else { if let Some(_) = lock.insert(app_type.clone(), s) { log::warn!( From 186f5ed39c17c365e9f278205f0d85d340fd28a9 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 6 Aug 2023 22:11:31 +0800 Subject: [PATCH 314/612] remove flutter extra "waiting for image" Signed-off-by: 21pages --- flutter/lib/models/model.dart | 37 ++++++++++++++++++++++++----------- src/flutter.rs | 15 +++++++------- src/flutter_ffi.rs | 6 ------ src/ui_interface.rs | 5 ++--- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 5cce43cff..c5870243b 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -351,6 +351,8 @@ class FfiModel with ChangeNotifier { showElevationError(sessionId, type, title, text, dialogManager); } else if (type == 'relay-hint') { showRelayHintDialog(sessionId, type, title, text, dialogManager, peerId); + } else if (text == 'Connected, waiting for image...') { + showConnectedWaitingForImage(dialogManager, sessionId, type, title, text); } else { var hasRetry = evt['hasRetry'] == 'true'; showMsgBox(sessionId, type, title, text, link, hasRetry, dialogManager); @@ -416,6 +418,25 @@ class FfiModel with ChangeNotifier { }); } + void showConnectedWaitingForImage(OverlayDialogManager dialogManager, + SessionID sessionId, String type, String title, String text) { + onClose() { + closeConnection(); + } + + dialogManager.show( + (setState, close, context) => CustomAlertDialog( + title: null, + content: SelectionArea(child: msgboxContent(type, title, text)), + actions: [ + dialogButton("Cancel", onPressed: onClose, isOutline: true) + ], + onCancel: onClose), + tag: '$sessionId-waiting-for-image', + ); + _waitForImage[sessionId] = true; + } + _updateSessionWidthHeight(SessionID sessionId) { parent.target?.canvasModel.updateViewStyle(); if (display.width <= 0 || display.height <= 0) { @@ -478,13 +499,7 @@ class FfiModel with ChangeNotifier { _updateSessionWidthHeight(sessionId); } if (displays.isNotEmpty) { - parent.target?.dialogManager.showLoading( - translate('Connected, waiting for image...'), - onCancel: closeConnection, - tag: '$peerId-waiting-for-image'); - _waitForImage[sessionId] = true; _reconnects = 1; - bind.sessionOnWaitingForImageDialogShow(sessionId: sessionId); } Map features = json.decode(evt['features']); _pi.features.privacyMode = features['privacy_mode'] == 1; @@ -638,7 +653,7 @@ class ImageModel with ChangeNotifier { if (waitforImage == true) { _waitForImage[sessionId] = false; parent.target?.dialogManager.dismissAll(); - clearWaitingForImage(parent.target?.dialogManager, id); + clearWaitingForImage(parent.target?.dialogManager, sessionId); if (isDesktop) { for (final cb in callbacksOnFirstImage) { @@ -1687,7 +1702,7 @@ class FFI { } } else if (message is EventToUI_Rgba) { if (useTextureRender) { - if (_waitForImage[sessionId]!) { + if (_waitForImage[sessionId] != false) { _waitForImage[sessionId] = false; dialogManager.dismissAll(); for (final cb in imageModel.callbacksOnFirstImage) { @@ -1695,7 +1710,7 @@ class FFI { } await canvasModel.updateViewStyle(); await canvasModel.updateScrollStyle(); - clearWaitingForImage(dialogManager, id); + clearWaitingForImage(dialogManager, sessionId); } } else { // Fetch the image buffer from rust codes. @@ -1891,11 +1906,11 @@ Future initializeCursorAndCanvas(FFI ffi) async { ffi.canvasModel.update(xCanvas, yCanvas, scale); } -clearWaitingForImage(OverlayDialogManager? dialogManager, String id) { +clearWaitingForImage(OverlayDialogManager? dialogManager, SessionID sessionId) { final durations = [100, 500, 1000, 2000]; for (var duration in durations) { Future.delayed(Duration(milliseconds: duration), () { - dialogManager?.dismissByTag('$id-waiting-for-image'); + dialogManager?.dismissByTag('$sessionId-waiting-for-image'); }); } } diff --git a/src/flutter.rs b/src/flutter.rs index c0766c008..ef455e8fb 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -238,6 +238,13 @@ impl VideoRenderer { // It is also Ok to skip this check. if self.width != rgba.w || self.height != rgba.h { + log::error!( + "width/height mismatch: ({},{}) != ({},{})", + self.width, + self.height, + rgba.w, + rgba.h + ); return; } @@ -338,14 +345,6 @@ impl FlutterHandler { *self.notify_rendered.write().unwrap() = false; self.renderer.write().unwrap().set_size(width, height); } - - pub fn on_waiting_for_image_dialog_show(&self) { - #[cfg(any(feature = "flutter_texture_render"))] - { - *self.notify_rendered.write().unwrap() = false; - } - // rgba array render will notify every frame - } } impl InvokeUiSession for FlutterHandler { diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 74806915f..4b0ffc262 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1257,12 +1257,6 @@ pub fn session_change_prefer_codec(session_id: SessionID) { } } -pub fn session_on_waiting_for_image_dialog_show(session_id: SessionID) { - if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { - session.ui_handler.on_waiting_for_image_dialog_show(); - } -} - pub fn main_set_home_dir(_home: String) { #[cfg(any(target_os = "android", target_os = "ios"))] { diff --git a/src/ui_interface.rs b/src/ui_interface.rs index bcc2ab54f..2979f4ceb 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -3,9 +3,7 @@ use hbb_common::password_security; use hbb_common::{ allow_err, config::{self, Config, LocalConfig, PeerConfig}, - directories_next, log, - sodiumoxide::base64, - tokio, + directories_next, log, tokio, }; use hbb_common::{ bytes::Bytes, @@ -615,6 +613,7 @@ pub fn peer_to_map(id: String, p: PeerConfig) -> HashMap<&'static str, String> { #[cfg(feature = "flutter")] pub fn peer_to_map_ab(id: String, p: PeerConfig) -> HashMap<&'static str, String> { + use hbb_common::sodiumoxide::base64; let mut m = peer_to_map(id, p.clone()); m.insert( "hash", From a8cddb5b19aeb24013a6562d445f78c0dd81a6cd Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 7 Aug 2023 09:51:05 +0800 Subject: [PATCH 315/612] split waiting for image Signed-off-by: 21pages --- flutter/lib/models/model.dart | 74 ++++++++++++++++------------------- 1 file changed, 34 insertions(+), 40 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index c5870243b..c9bcc0477 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -37,7 +37,8 @@ import 'platform_model.dart'; typedef HandleMsgBox = Function(Map evt, String id); typedef ReconnectHandle = Function(OverlayDialogManager, SessionID, bool); -final _waitForImage = {}; +final _waitForImageDialogShow = {}; +final _waitForFirstImage = {}; final _constSessionId = Uuid().v4obj(); class FfiModel with ChangeNotifier { @@ -424,17 +425,19 @@ class FfiModel with ChangeNotifier { closeConnection(); } - dialogManager.show( - (setState, close, context) => CustomAlertDialog( - title: null, - content: SelectionArea(child: msgboxContent(type, title, text)), - actions: [ - dialogButton("Cancel", onPressed: onClose, isOutline: true) - ], - onCancel: onClose), - tag: '$sessionId-waiting-for-image', - ); - _waitForImage[sessionId] = true; + Future.delayed(Duration.zero, () async { + await dialogManager.show( + (setState, close, context) => CustomAlertDialog( + title: null, + content: SelectionArea(child: msgboxContent(type, title, text)), + actions: [ + dialogButton("Cancel", onPressed: onClose, isOutline: true) + ], + onCancel: onClose), + tag: '$sessionId-waiting-for-image', + ); + _waitForImageDialogShow[sessionId] = true; + }); } _updateSessionWidthHeight(SessionID sessionId) { @@ -500,6 +503,7 @@ class FfiModel with ChangeNotifier { } if (displays.isNotEmpty) { _reconnects = 1; + _waitForFirstImage[sessionId] = true; } Map features = json.decode(evt['features']); _pi.features.privacyMode = features['privacy_mode'] == 1; @@ -644,24 +648,6 @@ class ImageModel with ChangeNotifier { addCallbackOnFirstImage(Function(String) cb) => callbacksOnFirstImage.add(cb); onRgba(Uint8List rgba) { - final waitforImage = _waitForImage[sessionId]; - if (waitforImage == null) { - debugPrint('Exception, peer $id not found for waiting image'); - return; - } - - if (waitforImage == true) { - _waitForImage[sessionId] = false; - parent.target?.dialogManager.dismissAll(); - clearWaitingForImage(parent.target?.dialogManager, sessionId); - - if (isDesktop) { - for (final cb in callbacksOnFirstImage) { - cb(id); - } - } - } - final pid = parent.target?.id; img.decodeImageFromPixels( rgba, @@ -1702,16 +1688,7 @@ class FFI { } } else if (message is EventToUI_Rgba) { if (useTextureRender) { - if (_waitForImage[sessionId] != false) { - _waitForImage[sessionId] = false; - dialogManager.dismissAll(); - for (final cb in imageModel.callbacksOnFirstImage) { - cb(id); - } - await canvasModel.updateViewStyle(); - await canvasModel.updateScrollStyle(); - clearWaitingForImage(dialogManager, sessionId); - } + onEvent2UIRgba(); } else { // Fetch the image buffer from rust codes. final sz = platformFFI.getRgbaSize(sessionId); @@ -1720,6 +1697,7 @@ class FFI { } final rgba = platformFFI.getRgba(sessionId, sz); if (rgba != null) { + onEvent2UIRgba(); imageModel.onRgba(rgba); } } @@ -1730,6 +1708,22 @@ class FFI { this.id = id; } + void onEvent2UIRgba() async { + if (_waitForImageDialogShow[sessionId] == true) { + _waitForImageDialogShow[sessionId] = false; + clearWaitingForImage(dialogManager, sessionId); + } + if (_waitForFirstImage[sessionId] == true) { + _waitForFirstImage[sessionId] = false; + dialogManager.dismissAll(); + await canvasModel.updateViewStyle(); + await canvasModel.updateScrollStyle(); + for (final cb in imageModel.callbacksOnFirstImage) { + cb(id); + } + } + } + /// Login with [password], choose if the client should [remember] it. void login(String osUsername, String osPassword, SessionID sessionId, String password, bool remember) { From dd97dc580b93ace915c12919845fd4f1ce58189c Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Mon, 7 Aug 2023 12:12:30 +0530 Subject: [PATCH 316/612] remove get seat0 tries Signed-off-by: Sahil Yeole --- libs/hbb_common/src/platform/linux.rs | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/libs/hbb_common/src/platform/linux.rs b/libs/hbb_common/src/platform/linux.rs index 1d33c36be..89c96799d 100644 --- a/libs/hbb_common/src/platform/linux.rs +++ b/libs/hbb_common/src/platform/linux.rs @@ -124,24 +124,12 @@ fn line_values(indices: &[usize], line: &str) -> Vec { #[inline] pub fn get_values_of_seat0(indices: &[usize]) -> Vec { - _get_values_of_seat0_tries(indices, true, 20) + _get_values_of_seat0(indices, true) } #[inline] pub fn get_values_of_seat0_with_gdm_wayland(indices: &[usize]) -> Vec { - _get_values_of_seat0_tries(indices, false, 20) -} - -fn _get_values_of_seat0_tries(indices: &[usize], ignore_gdm_wayland: bool, attempts: usize) -> Vec { - for _ in 0..attempts{ - let value = _get_values_of_seat0(indices, ignore_gdm_wayland); - if value != line_values(indices, "") { - return value; - } - // Wait for 300ms and try again - std::thread::sleep(std::time::Duration::from_millis(300)); - } - line_values(indices, "") + _get_values_of_seat0(indices, false) } fn _get_values_of_seat0(indices: &[usize], ignore_gdm_wayland: bool) -> Vec { From 897dc1c2ba7ca2c03b6d6d11cbc92de624a76bf4 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Mon, 7 Aug 2023 12:14:35 +0530 Subject: [PATCH 317/612] add delay in refresh Signed-off-by: Sahil Yeole --- src/platform/linux.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index cda26ea10..8ef120f09 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -1077,6 +1077,8 @@ mod desktop { return; } + // wait 2 seconds before getting seat0 values; was required for lightdm to get correct values + std::thread::sleep(Duration::from_secs(2)); let seat0_values = get_values_of_seat0(&[0, 1, 2]); if seat0_values[0].is_empty() { *self = Self::default(); From d28d3baf056f09509fcc0813295ac6024e762806 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Mon, 7 Aug 2023 12:42:11 +0530 Subject: [PATCH 318/612] skip env tries for lightdm login screen Signed-off-by: Sahil Yeole --- src/platform/linux.rs | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index 8ef120f09..4162b8a26 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -919,13 +919,19 @@ mod desktop { } fn get_display(&mut self) { - let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; - for diplay_env in display_envs { - self.display = get_env_tries("DISPLAY", &self.uid, diplay_env, 20); - if !self.display.is_empty() { - break; + // skip env tries for lightdm login screen + if self.username != "lightdm"{ + let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; + for display_env in display_envs { + self.display = get_env_tries("DISPLAY", &self.uid, display_env, 10); + if !self.display.is_empty() { + break; + } } } + else { + self.display = String::new(); + } if self.display.is_empty() { self.display = Self::get_display_by_user(&self.username); @@ -982,13 +988,19 @@ mod desktop { fn get_xauth(&mut self) { // try by direct access to window manager process by name - let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; - for diplay_env in display_envs { - self.xauth = get_env_tries("XAUTHORITY", &self.uid, diplay_env, 20); - if !self.xauth.is_empty() { - break; + // skip env tries for lightdm login screen + if self.username != "lightdm"{ + let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; + for display_env in display_envs { + self.xauth = get_env_tries("XAUTHORITY", &self.uid, display_env, 20); + if !self.xauth.is_empty() { + break; + } } } + else { + self.xauth = String::new(); + } // get from Xorg process, parameter and environment if self.xauth.is_empty() { From dab956fe851f6c2aa20f87e079dbe1662135b85e Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 20 Jul 2023 08:05:38 +0800 Subject: [PATCH 319/612] common oidc Signed-off-by: dignow --- flutter/assets/auth-apple.svg | 1 + flutter/assets/auth-azure.svg | 1 + flutter/assets/auth-default.svg | 14 +++++ flutter/assets/auth-facebook.svg | 1 + .../assets/{GitHub.svg => auth-github.svg} | 0 .../assets/{Google.svg => auth-google.svg} | 0 flutter/assets/{Okta.svg => auth-okta.svg} | 0 flutter/lib/common.dart | 7 +++ flutter/lib/common/widgets/login.dart | 51 +++++++++---------- flutter/lib/models/user_model.dart | 6 +-- 10 files changed, 51 insertions(+), 30 deletions(-) create mode 100644 flutter/assets/auth-apple.svg create mode 100644 flutter/assets/auth-azure.svg create mode 100644 flutter/assets/auth-default.svg create mode 100644 flutter/assets/auth-facebook.svg rename flutter/assets/{GitHub.svg => auth-github.svg} (100%) rename flutter/assets/{Google.svg => auth-google.svg} (100%) rename flutter/assets/{Okta.svg => auth-okta.svg} (100%) diff --git a/flutter/assets/auth-apple.svg b/flutter/assets/auth-apple.svg new file mode 100644 index 000000000..a3c2e871d --- /dev/null +++ b/flutter/assets/auth-apple.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/flutter/assets/auth-azure.svg b/flutter/assets/auth-azure.svg new file mode 100644 index 000000000..0482b22e6 --- /dev/null +++ b/flutter/assets/auth-azure.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/flutter/assets/auth-default.svg b/flutter/assets/auth-default.svg new file mode 100644 index 000000000..905c9ca9b --- /dev/null +++ b/flutter/assets/auth-default.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/flutter/assets/auth-facebook.svg b/flutter/assets/auth-facebook.svg new file mode 100644 index 000000000..d921a6716 --- /dev/null +++ b/flutter/assets/auth-facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/flutter/assets/GitHub.svg b/flutter/assets/auth-github.svg similarity index 100% rename from flutter/assets/GitHub.svg rename to flutter/assets/auth-github.svg diff --git a/flutter/assets/Google.svg b/flutter/assets/auth-google.svg similarity index 100% rename from flutter/assets/Google.svg rename to flutter/assets/auth-google.svg diff --git a/flutter/assets/Okta.svg b/flutter/assets/auth-okta.svg similarity index 100% rename from flutter/assets/Okta.svg rename to flutter/assets/auth-okta.svg diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index e96f02772..71fbfcdd9 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -2314,3 +2314,10 @@ Widget unreadTopRightBuilder(RxInt? count, {Widget? icon}) { ], ); } + +String toCapitalized(String s) { + if (s.isEmpty) { + return s; + } + return s.substring(0, 1).toUpperCase() + s.substring(1); +} diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 17cc7090c..1eecdc2d5 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -13,13 +13,13 @@ import '../../common.dart'; import './dialog.dart'; class _IconOP extends StatelessWidget { - final String icon; - final double iconWidth; + final String op; + final String? icon; final EdgeInsets margin; const _IconOP( {Key? key, + required this.op, required this.icon, - required this.iconWidth, this.margin = const EdgeInsets.symmetric(horizontal: 4.0)}) : super(key: key); @@ -27,10 +27,15 @@ class _IconOP extends StatelessWidget { Widget build(BuildContext context) { return Container( margin: margin, - child: SvgPicture.asset( - 'assets/$icon.svg', - width: iconWidth, - ), + child: icon == null + ? SvgPicture.asset( + 'assets/auth-${op.toLowerCase()}.svg', + width: 20, + ) + : SvgPicture.string( + icon!, + width: 20, + ), ); } } @@ -38,7 +43,7 @@ class _IconOP extends StatelessWidget { class ButtonOP extends StatelessWidget { final String op; final RxString curOP; - final double iconWidth; + final String? icon; final Color primaryColor; final double height; final Function() onTap; @@ -47,7 +52,7 @@ class ButtonOP extends StatelessWidget { Key? key, required this.op, required this.curOP, - required this.iconWidth, + required this.icon, required this.primaryColor, required this.height, required this.onTap, @@ -71,15 +76,15 @@ class ButtonOP extends StatelessWidget { SizedBox( width: 30, child: _IconOP( - icon: op, - iconWidth: iconWidth, + op: op, + icon: icon, margin: EdgeInsets.only(right: 5), )), Expanded( child: FittedBox( fit: BoxFit.scaleDown, child: Center( - child: Text('${translate("Continue with")} $op')))), + child: Text('${translate("Continue with")} ${toCapitalized(op)}')))), ], ))), ), @@ -89,8 +94,8 @@ class ButtonOP extends StatelessWidget { class ConfigOP { final String op; - final double iconWidth; - ConfigOP({required this.op, required this.iconWidth}); + final String? icon; + ConfigOP({required this.op, required this.icon}); } class WidgetOP extends StatefulWidget { @@ -182,7 +187,7 @@ class _WidgetOPState extends State { ButtonOP( op: widget.config.op, curOP: widget.curOP, - iconWidth: widget.config.iconWidth, + icon: widget.config.icon, primaryColor: str2color(widget.config.op, 0x7f), height: 36, onTap: () async { @@ -380,7 +385,7 @@ Future loginDialog() async { final loginOptions = [].obs; Future.delayed(Duration.zero, () async { - loginOptions.value = await UserModel.queryLoginOptions(); + loginOptions.value = await UserModel.queryOidcLoginOptions(); }); final res = await gFFI.dialogManager.show((setState, close, context) { @@ -460,12 +465,8 @@ Future loginDialog() async { } thirdAuthWidget() => Obx(() { - final oidcOptions = loginOptions - .where((opt) => opt.startsWith(kAuthReqTypeOidc)) - .map((opt) => opt.substring(kAuthReqTypeOidc.length)) - .toList(); return Offstage( - offstage: oidcOptions.isEmpty, + offstage: loginOptions.isEmpty, child: Column( children: [ const SizedBox( @@ -480,12 +481,8 @@ Future loginDialog() async { height: 8.0, ), LoginWidgetOP( - ops: [ - ConfigOP(op: 'GitHub', iconWidth: 20), - ConfigOP(op: 'Google', iconWidth: 20), - ConfigOP(op: 'Okta', iconWidth: 38), - ] - .where((op) => oidcOptions.contains(op.op.toLowerCase())) + ops: loginOptions + .map((e) => ConfigOP(op: e['name'], icon: e['icon'])) .toList(), curOP: curOP, cbLogin: (Map authBody) { diff --git a/flutter/lib/models/user_model.dart b/flutter/lib/models/user_model.dart index 83df2e632..18f409608 100644 --- a/flutter/lib/models/user_model.dart +++ b/flutter/lib/models/user_model.dart @@ -163,15 +163,15 @@ class UserModel { return loginResponse; } - static Future> queryLoginOptions() async { + static Future> queryOidcLoginOptions() async { try { final url = await bind.mainGetApiServer(); if (url.trim().isEmpty) return []; - final resp = await http.get(Uri.parse('$url/api/login-options')); + final resp = await http.get(Uri.parse('$url/api/oidc/login-options')); return jsonDecode(resp.body); } catch (e) { debugPrint( - "queryLoginOptions: jsonDecode resp body failed: ${e.toString()}"); + "queryOidcLoginOptions: jsonDecode resp body failed: ${e.toString()}"); return []; } } From 3f3c45b6633631aef6d6f3231ffdbe79736e1bc8 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 20 Jul 2023 08:27:30 +0800 Subject: [PATCH 320/612] common oidc, tmp commit Signed-off-by: dignow --- flutter/lib/common/widgets/login.dart | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 1eecdc2d5..12171be34 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -66,7 +66,7 @@ class ButtonOP extends StatelessWidget { width: 200, child: Obx(() => ElevatedButton( style: ElevatedButton.styleFrom( - primary: curOP.value.isEmpty || curOP.value == op + backgroundColor: curOP.value.isEmpty || curOP.value == op ? primaryColor : Colors.grey, ).copyWith(elevation: ButtonStyleButton.allOrNull(0.0)), @@ -74,17 +74,21 @@ class ButtonOP extends StatelessWidget { child: Row( children: [ SizedBox( - width: 30, - child: _IconOP( - op: op, - icon: icon, - margin: EdgeInsets.only(right: 5), - )), + width: 30, + child: _IconOP( + op: op, + icon: icon, + margin: EdgeInsets.only(right: 5), + ), + ), Expanded( - child: FittedBox( - fit: BoxFit.scaleDown, - child: Center( - child: Text('${translate("Continue with")} ${toCapitalized(op)}')))), + child: FittedBox( + fit: BoxFit.scaleDown, + child: Center( + child: Text( + '${translate("Continue with")} ${op.toLowerCase() == "github" ? "GitHub" : toCapitalized(op)}')), + ), + ), ], ))), ), From 0bf007e63c6a137a918c152ec4a4f14b9a6d4e73 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 20 Jul 2023 11:09:08 +0800 Subject: [PATCH 321/612] common oidc, debug Signed-off-by: dignow --- flutter/lib/common/widgets/login.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 12171be34..11cb067ac 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -12,6 +12,8 @@ import 'package:url_launcher/url_launcher.dart'; import '../../common.dart'; import './dialog.dart'; +const kOpSvgList = ['github', 'google', 'apple', 'okta', 'facebook', 'azure']; + class _IconOP extends StatelessWidget { final String op; final String? icon; @@ -25,11 +27,12 @@ class _IconOP extends StatelessWidget { @override Widget build(BuildContext context) { + final svgFile = kOpSvgList.contains(op.toLowerCase()) ? op.toLowerCase() : 'default'; return Container( margin: margin, child: icon == null ? SvgPicture.asset( - 'assets/auth-${op.toLowerCase()}.svg', + 'assets/auth-$svgFile.svg', width: 20, ) : SvgPicture.string( From 35c1cee18bbaba30ada3bd2c2663f49e9d0b1510 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 20 Jul 2023 22:58:57 +0800 Subject: [PATCH 322/612] common oidc, add auth0 Signed-off-by: dignow --- flutter/assets/auth-auth0.svg | 1 + flutter/lib/common/widgets/login.dart | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 flutter/assets/auth-auth0.svg diff --git a/flutter/assets/auth-auth0.svg b/flutter/assets/auth-auth0.svg new file mode 100644 index 000000000..e8c7557e7 --- /dev/null +++ b/flutter/assets/auth-auth0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 11cb067ac..d7037e58f 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -12,7 +12,7 @@ import 'package:url_launcher/url_launcher.dart'; import '../../common.dart'; import './dialog.dart'; -const kOpSvgList = ['github', 'google', 'apple', 'okta', 'facebook', 'azure']; +const kOpSvgList = ['github', 'google', 'apple', 'okta', 'facebook', 'azure', 'auth0']; class _IconOP extends StatelessWidget { final String op; From 4e1d7ca3de8f9ff22d79712d5a3543416deb6923 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 20 Jul 2023 23:23:59 +0800 Subject: [PATCH 323/612] update svg Signed-off-by: dignow --- flutter/assets/auth-github.svg | 2 +- flutter/assets/auth-google.svg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flutter/assets/auth-github.svg b/flutter/assets/auth-github.svg index ef0bb12a7..1ba71c98b 100644 --- a/flutter/assets/auth-github.svg +++ b/flutter/assets/auth-github.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/flutter/assets/auth-google.svg b/flutter/assets/auth-google.svg index df394a84f..f9ab170e6 100644 --- a/flutter/assets/auth-google.svg +++ b/flutter/assets/auth-google.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 2c86fac20824e6cca1f98bfd71a1d22ac2b13e93 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 7 Aug 2023 19:08:29 +0800 Subject: [PATCH 324/612] refact, common oidc Signed-off-by: dignow --- flutter/lib/models/user_model.dart | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/flutter/lib/models/user_model.dart b/flutter/lib/models/user_model.dart index 18f409608..ebed47587 100644 --- a/flutter/lib/models/user_model.dart +++ b/flutter/lib/models/user_model.dart @@ -167,8 +167,20 @@ class UserModel { try { final url = await bind.mainGetApiServer(); if (url.trim().isEmpty) return []; - final resp = await http.get(Uri.parse('$url/api/oidc/login-options')); - return jsonDecode(resp.body); + final resp = await http.get(Uri.parse('$url/api/login-options')); + final List ops = []; + for (final item in jsonDecode(resp.body)) { + ops.add(item as String); + } + for (final item in ops) { + if (item.startsWith('common-oidc/')) { + return jsonDecode(item.substring('common-oidc/'.length)); + } + } + return ops + .where((item) => item.startsWith('oidc/')) + .map((item) => {'name': item.substring('oidc/'.length)}) + .toList(); } catch (e) { debugPrint( "queryOidcLoginOptions: jsonDecode resp body failed: ${e.toString()}"); From 0c50feeb1b465b71f4eb1808b4be03f8b6c9e2db Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Mon, 7 Aug 2023 14:17:14 +0200 Subject: [PATCH 325/612] Supplement for "fix some words" from yesterday --- src/ui/index.tis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/index.tis b/src/ui/index.tis index f0bfc13d2..c6286e903 100644 --- a/src/ui/index.tis +++ b/src/ui/index.tis @@ -215,7 +215,7 @@ class Enhancements: Reactor.Component { return
  • {translate('Enhancements')} {has_hwcodec ?
  • {svg_checkmark}{translate("Hardware Codec")} (beta)
  • : ""} -
  • {svg_checkmark}{translate("Adaptive Bitrate")} (beta)
  • +
  • {svg_checkmark}{translate("Adaptive bitrate")} (beta)
  • {translate("Recording")}
  • ; From b34f745837f0f491d135eb7565c71a52b053dc2b Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Mon, 7 Aug 2023 14:20:20 +0200 Subject: [PATCH 326/612] Supplement for "fix some words" from yesterday --- flutter/lib/mobile/pages/settings_page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/mobile/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart index eea1498db..e7e6daade 100644 --- a/flutter/lib/mobile/pages/settings_page.dart +++ b/flutter/lib/mobile/pages/settings_page.dart @@ -242,7 +242,7 @@ class _SettingsState extends State with WidgetsBindingObserver { }, ), SettingsTile.switchTile( - title: Text('${translate('Adaptive Bitrate')} (beta)'), + title: Text('${translate('Adaptive bitrate')} (beta)'), initialValue: _enableAbr, onToggle: (v) async { await bind.mainSetOption(key: "enable-abr", value: v ? "" : "N"); From 9905695699e105109bfefc41f7cf5538b05aee90 Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 7 Aug 2023 21:32:36 +0800 Subject: [PATCH 327/612] enable keyframe interval when recording Signed-off-by: 21pages --- flutter/lib/models/model.dart | 3 +- libs/hbb_common/protos/message.proto | 1 + libs/scrap/examples/benchmark.rs | 3 +- libs/scrap/examples/record-screen.rs | 2 +- libs/scrap/src/common/aom.rs | 8 ++- libs/scrap/src/common/codec.rs | 1 + libs/scrap/src/common/hwcodec.rs | 3 +- libs/scrap/src/common/vpxcodec.rs | 18 ++++--- src/flutter_ffi.rs | 6 +++ src/server/connection.rs | 4 ++ src/server/video_qos.rs | 11 ++++ src/server/video_service.rs | 80 ++++++++++++++++------------ src/ui/header.tis | 1 + src/ui/remote.rs | 1 + src/ui_session_interface.rs | 8 +++ 15 files changed, 105 insertions(+), 45 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index c9bcc0477..9fa73e1b7 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1532,12 +1532,13 @@ class RecordingModel with ChangeNotifier { sessionId: sessionId, start: true, width: width, height: height); } - toggle() { + toggle() async { if (isIOS) return; final sessionId = parent.target?.sessionId; if (sessionId == null) return; _start = !_start; notifyListeners(); + await bind.sessionRecordStatus(sessionId: sessionId, status: _start); if (_start) { bind.sessionRefresh(sessionId: sessionId); } else { diff --git a/libs/hbb_common/protos/message.proto b/libs/hbb_common/protos/message.proto index dac137e1c..e6862bc80 100644 --- a/libs/hbb_common/protos/message.proto +++ b/libs/hbb_common/protos/message.proto @@ -664,6 +664,7 @@ message Misc { PluginFailure plugin_failure = 26; uint32 full_speed_fps = 27; uint32 auto_adjust_fps = 28; + bool client_record_status = 29; } } diff --git a/libs/scrap/examples/benchmark.rs b/libs/scrap/examples/benchmark.rs index f8f2e9436..83fba99d7 100644 --- a/libs/scrap/examples/benchmark.rs +++ b/libs/scrap/examples/benchmark.rs @@ -114,9 +114,9 @@ fn test_vpx( let config = EncoderCfg::VPX(VpxEncoderConfig { width: width as _, height: height as _, - timebase: [1, 1000], quality, codec: codec_id, + keyframe_interval: None, }); let mut encoder = VpxEncoder::new(config).unwrap(); let mut vpxs = vec![]; @@ -161,6 +161,7 @@ fn test_av1(yuvs: &Vec>, width: usize, height: usize, quality: Q, yuv_co width: width as _, height: height as _, quality, + keyframe_interval: None, }); let mut encoder = AomEncoder::new(config).unwrap(); let start = Instant::now(); diff --git a/libs/scrap/examples/record-screen.rs b/libs/scrap/examples/record-screen.rs index 2430e2872..6640d5698 100644 --- a/libs/scrap/examples/record-screen.rs +++ b/libs/scrap/examples/record-screen.rs @@ -113,9 +113,9 @@ fn main() -> io::Result<()> { let mut vpx = vpx_encode::VpxEncoder::new(EncoderCfg::VPX(vpx_encode::VpxEncoderConfig { width, height, - timebase: [1, 1000], quality, codec: vpx_codec, + keyframe_interval: None, })) .unwrap(); diff --git a/libs/scrap/src/common/aom.rs b/libs/scrap/src/common/aom.rs index f677858a7..dcb4968e6 100644 --- a/libs/scrap/src/common/aom.rs +++ b/libs/scrap/src/common/aom.rs @@ -45,6 +45,7 @@ pub struct AomEncoderConfig { pub width: u32, pub height: u32, pub quality: Quality, + pub keyframe_interval: Option, } pub struct AomEncoder { @@ -105,7 +106,12 @@ mod webrtc { c.g_timebase.num = 1; c.g_timebase.den = kRtpTicksPerSecond; c.g_input_bit_depth = kBitDepth; - c.kf_mode = aom_kf_mode::AOM_KF_DISABLED; + if let Some(keyframe_interval) = cfg.keyframe_interval { + c.kf_min_dist = 0; + c.kf_max_dist = keyframe_interval as _; + } else { + c.kf_mode = aom_kf_mode::AOM_KF_DISABLED; + } let (q_min, q_max, b) = AomEncoder::convert_quality(cfg.quality); if q_min > 0 && q_min < q_max && q_max < 64 { c.rc_min_quantizer = q_min; diff --git a/libs/scrap/src/common/codec.rs b/libs/scrap/src/common/codec.rs index fac5f82d7..2c3cbff6c 100644 --- a/libs/scrap/src/common/codec.rs +++ b/libs/scrap/src/common/codec.rs @@ -45,6 +45,7 @@ pub struct HwEncoderConfig { pub width: usize, pub height: usize, pub quality: Quality, + pub keyframe_interval: Option, } #[derive(Debug, Clone)] diff --git a/libs/scrap/src/common/hwcodec.rs b/libs/scrap/src/common/hwcodec.rs index ba834e048..c1fbdfa6e 100644 --- a/libs/scrap/src/common/hwcodec.rs +++ b/libs/scrap/src/common/hwcodec.rs @@ -52,6 +52,7 @@ impl EncoderApi for HwEncoder { if base_bitrate <= 0 { bitrate = base_bitrate; } + let gop = config.keyframe_interval.unwrap_or(DEFAULT_GOP as _) as i32; let ctx = EncodeContext { name: config.name.clone(), width: config.width as _, @@ -60,7 +61,7 @@ impl EncoderApi for HwEncoder { align: HW_STRIDE_ALIGN as _, bitrate: bitrate as i32 * 1000, timebase: DEFAULT_TIME_BASE, - gop: DEFAULT_GOP, + gop, quality: DEFAULT_HW_QUALITY, rc: DEFAULT_RC, thread_count: codec_thread_num() as _, // ffmpeg's thread_count is used for cpu diff --git a/libs/scrap/src/common/vpxcodec.rs b/libs/scrap/src/common/vpxcodec.rs index d17aad676..1bdde0ca6 100644 --- a/libs/scrap/src/common/vpxcodec.rs +++ b/libs/scrap/src/common/vpxcodec.rs @@ -65,8 +65,8 @@ impl EncoderApi for VpxEncoder { c.g_w = config.width; c.g_h = config.height; - c.g_timebase.num = config.timebase[0]; - c.g_timebase.den = config.timebase[1]; + c.g_timebase.num = 1; + c.g_timebase.den = 1000; // Output timestamp precision c.rc_undershoot_pct = 95; // When the data buffer falls below this percentage of fullness, a dropped frame is indicated. Set the threshold to zero (0) to disable this feature. // In dynamic scenes, low bitrate gets low fps while high bitrate gets high fps. @@ -76,9 +76,13 @@ impl EncoderApi for VpxEncoder { // https://developers.google.com/media/vp9/bitrate-modes/ // Constant Bitrate mode (CBR) is recommended for live streaming with VP9. c.rc_end_usage = vpx_rc_mode::VPX_CBR; - // c.kf_min_dist = 0; - // c.kf_max_dist = 999999; - c.kf_mode = vpx_kf_mode::VPX_KF_DISABLED; // reduce bandwidth a lot + if let Some(keyframe_interval) = config.keyframe_interval { + c.kf_min_dist = 0; + c.kf_max_dist = keyframe_interval as _; + } else { + c.kf_mode = vpx_kf_mode::VPX_KF_DISABLED; // reduce bandwidth a lot + } + let (q_min, q_max, b) = Self::convert_quality(config.quality); if q_min > 0 && q_min < q_max && q_max < 64 { c.rc_min_quantizer = q_min; @@ -343,12 +347,12 @@ pub struct VpxEncoderConfig { pub width: c_uint, /// The height (in pixels). pub height: c_uint, - /// The timebase numerator and denominator (in seconds). - pub timebase: [c_int; 2], /// The image quality pub quality: Quality, /// The codec pub codec: VpxVideoCodecId, + /// keyframe interval + pub keyframe_interval: Option, } #[derive(Clone, Copy, Debug)] diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index c4e9c2eb3..1287abf34 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -174,6 +174,12 @@ pub fn session_record_screen(session_id: SessionID, start: bool, width: usize, h } } +pub fn session_record_status(session_id: SessionID, status: bool) { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + session.record_status(status); + } +} + pub fn session_reconnect(session_id: SessionID, force_relay: bool) { if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { session.reconnect(force_relay); diff --git a/src/server/connection.rs b/src/server/connection.rs index f3e059696..e32a4c1c3 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1907,6 +1907,10 @@ impl Connection { .lock() .unwrap() .user_auto_adjust_fps(self.inner.id(), fps), + Some(misc::Union::ClientRecordStatus(status)) => video_service::VIDEO_QOS + .lock() + .unwrap() + .user_record(self.inner.id(), status), _ => {} }, Some(message::Union::AudioFrame(frame)) => { diff --git a/src/server/video_qos.rs b/src/server/video_qos.rs index 2ebcdaa84..e9eb9dc79 100644 --- a/src/server/video_qos.rs +++ b/src/server/video_qos.rs @@ -36,6 +36,7 @@ struct UserData { quality: Option<(i64, Quality)>, // (time, quality) delay: Option, response_delayed: bool, + record: bool, } pub struct VideoQoS { @@ -114,6 +115,10 @@ impl VideoQoS { self.quality } + pub fn record(&self) -> bool { + self.users.iter().any(|u| u.1.record) + } + pub fn abr_enabled() -> bool { "N" != Config::get_option("enable-abr") } @@ -388,6 +393,12 @@ impl VideoQoS { } } + pub fn user_record(&mut self, id: i32, v: bool) { + if let Some(user) = self.users.get_mut(&id) { + user.record = v; + } + } + pub fn on_connection_close(&mut self, id: i32) { self.users.remove(&id); self.refresh(None); diff --git a/src/server/video_service.rs b/src/server/video_service.rs index bb0697409..a74211fcd 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -36,7 +36,7 @@ use hbb_common::{ use scrap::Capturer; use scrap::{ aom::AomEncoderConfig, - codec::{Encoder, EncoderCfg, HwEncoderConfig}, + codec::{Encoder, EncoderCfg, HwEncoderConfig, Quality}, record::{Recorder, RecorderContext}, vpxcodec::{VpxEncoderConfig, VpxVideoCodecId}, CodecName, Display, TraitCapturer, @@ -518,37 +518,13 @@ fn run(sp: GenericService) -> ResultType<()> { let mut spf; let mut quality = video_qos.quality(); let abr = VideoQoS::abr_enabled(); - drop(video_qos); log::info!("init quality={:?}, abr enabled:{}", quality, abr); - - let encoder_cfg = match Encoder::negotiated_codec() { - scrap::CodecName::H264(name) | scrap::CodecName::H265(name) => { - EncoderCfg::HW(HwEncoderConfig { - name, - width: c.width, - height: c.height, - quality, - }) - } - name @ (scrap::CodecName::VP8 | scrap::CodecName::VP9) => { - EncoderCfg::VPX(VpxEncoderConfig { - width: c.width as _, - height: c.height as _, - timebase: [1, 1000], // Output timestamp precision - quality, - codec: if name == scrap::CodecName::VP8 { - VpxVideoCodecId::VP8 - } else { - VpxVideoCodecId::VP9 - }, - }) - } - scrap::CodecName::AV1 => EncoderCfg::AOM(AomEncoderConfig { - width: c.width as _, - height: c.height as _, - quality, - }), - }; + let codec_name = Encoder::negotiated_codec(); + let recorder = get_recorder(c.width, c.height, &codec_name); + let last_recording = + (recorder.lock().unwrap().is_some() || video_qos.record()) && codec_name != CodecName::AV1; + drop(video_qos); + let encoder_cfg = get_encoder_config(&c, quality, last_recording); let mut encoder; match Encoder::new(encoder_cfg) { @@ -597,8 +573,6 @@ fn run(sp: GenericService) -> ResultType<()> { let mut try_gdi = 1; #[cfg(windows)] log::info!("gdi: {}", c.is_gdi()); - let codec_name = Encoder::negotiated_codec(); - let recorder = get_recorder(c.width, c.height, &codec_name); #[cfg(windows)] start_uac_elevation_check(); @@ -617,6 +591,11 @@ fn run(sp: GenericService) -> ResultType<()> { allow_err!(encoder.set_quality(quality)); video_qos.store_bitrate(encoder.bitrate()); } + let recording = (recorder.lock().unwrap().is_some() || video_qos.record()) + && codec_name != CodecName::AV1; + if recording != last_recording { + bail!("SWITCH"); + } drop(video_qos); if *SWITCH.lock().unwrap() { @@ -789,6 +768,41 @@ fn run(sp: GenericService) -> ResultType<()> { Ok(()) } +fn get_encoder_config(c: &CapturerInfo, quality: Quality, recording: bool) -> EncoderCfg { + // https://www.wowza.com/community/t/the-correct-keyframe-interval-in-obs-studio/95162 + let keyframe_interval = if recording { Some(240) } else { None }; + match Encoder::negotiated_codec() { + scrap::CodecName::H264(name) | scrap::CodecName::H265(name) => { + EncoderCfg::HW(HwEncoderConfig { + name, + width: c.width, + height: c.height, + quality, + keyframe_interval, + }) + } + name @ (scrap::CodecName::VP8 | scrap::CodecName::VP9) => { + EncoderCfg::VPX(VpxEncoderConfig { + width: c.width as _, + height: c.height as _, + quality, + codec: if name == scrap::CodecName::VP8 { + VpxVideoCodecId::VP8 + } else { + VpxVideoCodecId::VP9 + }, + keyframe_interval, + }) + } + scrap::CodecName::AV1 => EncoderCfg::AOM(AomEncoderConfig { + width: c.width as _, + height: c.height as _, + quality, + keyframe_interval, + }), + } +} + fn get_recorder( width: usize, height: usize, diff --git a/src/ui/header.tis b/src/ui/header.tis index 666150fb3..2adc37027 100644 --- a/src/ui/header.tis +++ b/src/ui/header.tis @@ -297,6 +297,7 @@ class Header: Reactor.Component { event click $(span#recording) (_, me) { recording = !recording; header.update(); + handler.record_status(recording); if (recording) handler.refresh_video(); else diff --git a/src/ui/remote.rs b/src/ui/remote.rs index 6826c7e54..4ec0d5a5c 100644 --- a/src/ui/remote.rs +++ b/src/ui/remote.rs @@ -451,6 +451,7 @@ impl sciter::EventHandler for SciterSession { fn save_custom_image_quality(i32); fn refresh_video(); fn record_screen(bool, i32, i32); + fn record_status(bool); fn get_toggle_option(String); fn is_privacy_mode_supported(); fn toggle_option(String); diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 704b91cf0..10e8978c9 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -240,6 +240,14 @@ impl Session { self.send(Data::RecordScreen(start, w, h, self.id.clone())); } + pub fn record_status(&self, status: bool) { + let mut misc = Misc::new(); + misc.set_client_record_status(status); + let mut msg = Message::new(); + msg.set_misc(misc); + self.send(Data::Message(msg)); + } + pub fn save_custom_image_quality(&mut self, custom_image_quality: i32) { let msg = self .lc From 6a818763fdbbe514554a99e4f50e553c0f0c6f37 Mon Sep 17 00:00:00 2001 From: Andrzej Rudnik Date: Mon, 7 Aug 2023 20:00:33 +0200 Subject: [PATCH 328/612] Update pl.rs --- src/lang/pl.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lang/pl.rs b/src/lang/pl.rs index bfe9ecb3e..79dd74071 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -518,14 +518,14 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Exit", "Wyjście"), ("Open", "Otwórz"), ("logout_tip", "Na pewno chcesz się wylogować?"), - ("Service", ""), - ("Start", ""), - ("Stop", ""), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), - ("Separate remote windows", ""), - ("separate window", ""), - ("Move tab to new window", ""), + ("Service", "Usługa"), + ("Start", "Uruchom"), + ("Stop", "Zatrzymaj"), + ("exceed_max_devices", "Przekroczona maks. liczba urządzeń"), + ("Sync with recent sessions", "Synchronizacja z ostatnimi sesjami"), + ("Sort tags", "Znaczniki sortowania"), + ("Separate remote windows", "Oddzielne zdalne okna"), + ("separate window", "oddzielne okno"), + ("Move tab to new window", "Przenieś zakładkę do nowego okna"), ].iter().cloned().collect(); } From b6abcaee7adfeb7f36f2218e54fbf72c0be5d94b Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Mon, 7 Aug 2023 21:38:54 +0200 Subject: [PATCH 329/612] Update install_page.dart --- flutter/lib/desktop/pages/install_page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/desktop/pages/install_page.dart b/flutter/lib/desktop/pages/install_page.dart index 69cf2ac93..871030e15 100644 --- a/flutter/lib/desktop/pages/install_page.dart +++ b/flutter/lib/desktop/pages/install_page.dart @@ -282,7 +282,7 @@ class _InstallPageBodyState extends State<_InstallPageBody> title: null, content: SelectionArea( child: - msgboxContent('info', 'Warning', 'comfirm_install_cert_tip')), + msgboxContent('info', 'Warning', 'confirm_install_cert_tip')), actions: btns, onCancel: close, ), From d43af7d8ad3d400c6c89b0257cfc89653b8f6285 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Mon, 7 Aug 2023 21:42:42 +0200 Subject: [PATCH 330/612] Add files via upload --- src/lang/ca.rs | 2 +- src/lang/cn.rs | 2 +- src/lang/cs.rs | 2 +- src/lang/da.rs | 2 +- src/lang/de.rs | 2 +- src/lang/el.rs | 2 +- src/lang/en.rs | 2 +- src/lang/eo.rs | 2 +- src/lang/es.rs | 2 +- src/lang/fa.rs | 2 +- src/lang/fr.rs | 2 +- src/lang/hu.rs | 2 +- src/lang/id.rs | 2 +- src/lang/it.rs | 2 +- src/lang/ja.rs | 2 +- src/lang/ko.rs | 2 +- src/lang/kz.rs | 2 +- src/lang/lt.rs | 2 +- src/lang/nl.rs | 2 +- src/lang/pl.rs | 2 +- src/lang/pt_PT.rs | 2 +- src/lang/ptbr.rs | 2 +- src/lang/ro.rs | 2 +- src/lang/ru.rs | 2 +- src/lang/sk.rs | 2 +- src/lang/sl.rs | 2 +- src/lang/sq.rs | 2 +- src/lang/sr.rs | 2 +- src/lang/sv.rs | 2 +- src/lang/template.rs | 2 +- src/lang/th.rs | 2 +- src/lang/tr.rs | 2 +- src/lang/tw.rs | 2 +- src/lang/ua.rs | 2 +- src/lang/vn.rs | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 45cee7d83..a7d4c9793 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/cn.rs b/src/lang/cn.rs index d2e3ef28a..ae3723692 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "无进行中的传输"), ("Set one-time password length", "设置一次性密码长度"), ("install_cert_tip", "安装 RustDesk 证书"), - ("comfirm_install_cert_tip", "此证书为 RustDesk 测试证书,您可以信任此证书。证书将被用于信任和安装 RustDesk 驱动。"), + ("confirm_install_cert_tip", "此证书为 RustDesk 测试证书,您可以信任此证书。证书将被用于信任和安装 RustDesk 驱动。"), ("RDP Settings", "RDP 设置"), ("Sort by", "排序方式"), ("New Connection", "新连接"), diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 563f27f89..eb958733f 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/da.rs b/src/lang/da.rs index c695b164c..36dbb2229 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Ingen overførsler i gang"), ("Set one-time password length", "Sæt engangsadgangskode længde"), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", "RDP indstillinger"), ("Sort by", "Sortér efter"), ("New Connection", "Ny forbindelse"), diff --git a/src/lang/de.rs b/src/lang/de.rs index 3401d1517..dfe5e39d6 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Keine Übertragungen im Gange"), ("Set one-time password length", "Länge des Einmalpassworts festlegen"), ("install_cert_tip", "RustDesk-Zertifikat installieren"), - ("comfirm_install_cert_tip", "Dies ist ein RustDesk-Testzertifikat, dem vertraut werden kann. Das Zertifikat wird verwendet, um RustDesk-Treibern bei Bedarf zu vertrauen und diese zu installieren."), + ("confirm_install_cert_tip", "Dies ist ein RustDesk-Testzertifikat, dem vertraut werden kann. Das Zertifikat wird verwendet, um RustDesk-Treibern bei Bedarf zu vertrauen und diese zu installieren."), ("RDP Settings", "RDP-Einstellungen"), ("Sort by", "Sortieren nach"), ("New Connection", "Neue Verbindung"), diff --git a/src/lang/el.rs b/src/lang/el.rs index ac0539d35..e9a547dd7 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Δεν υπάρχει μεταφορά σε εξέλιξη"), ("Set one-time password length", "Μέγεθος κωδικού μιας χρήσης"), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", "Ρυθμίσεις RDP"), ("Sort by", "Ταξινόμηση κατά"), ("New Connection", "Νέα σύνδεση"), diff --git a/src/lang/en.rs b/src/lang/en.rs index 001d9133d..24c7192c2 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -47,7 +47,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("relay_hint_tip", "It may not be possible to connect directly; you can try connecting via relay. Additionally, if you want to use a relay on your first attempt, you can add the \"/r\" suffix to the ID or select the option \"Always connect via relay\" in the card of recent sessions if it exists."), ("No transfers in progress", ""), ("install_cert_tip", "Install RustDesk certificate"), - ("comfirm_install_cert_tip", "This is a RustDesk testing certificate, which can be trusted. The certificate will be used to trust and install RustDesk drivers when required."), + ("confirm_install_cert_tip", "This is a RustDesk testing certificate, which can be trusted. The certificate will be used to trust and install RustDesk drivers when required."), ("empty_recent_tip", "Oops, no recent sessions!\nTime to plan a new one."), ("empty_favorite_tip", "No favorite peers yet?\nLet's find someone to connect with and add it to your favorites!"), ("empty_lan_tip", "Oh no, it looks like we haven't discovered any peers yet."), diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 26a04bc55..5ad8e19a9 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/es.rs b/src/lang/es.rs index 894e8e266..97d3f61ed 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "No hay transferencias en curso"), ("Set one-time password length", "Establecer contraseña de un solo uso"), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", "Ajustes RDP"), ("Sort by", "Ordenar por"), ("New Connection", "Nueva conexión"), diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 448fa5bfd..ea4656257 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "هیچ انتقالی در حال انجام نیست"), ("Set one-time password length", "طول رمز یکبار مصرف را تعیین کنید"), ("install_cert_tip", "RustDesk نصب گواهی"), - ("comfirm_install_cert_tip", "استفاده خواهد شد RustDesk است و شما می توانید به این گواهی اعتماد کنید. این گواهی برای اعتماد و نصب درایورهای RustDesk این گواهینامه یک گواهی تست"), + ("confirm_install_cert_tip", "استفاده خواهد شد RustDesk است و شما می توانید به این گواهی اعتماد کنید. این گواهی برای اعتماد و نصب درایورهای RustDesk این گواهینامه یک گواهی تست"), ("RDP Settings", "RDP تنظیمات"), ("Sort by", "مرتب سازی بر اساس"), ("New Connection", "اتصال جدید"), diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 8ec1ba8de..d2a470e35 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Pas de transfert en cours"), ("Set one-time password length", "Définir la longueur du mot de passe à usage unique"), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", "Configuration RDP"), ("Sort by", "Trier par"), ("New Connection", "Nouvelle connexion"), diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 2ef3d2b1f..a179c3ab1 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/id.rs b/src/lang/id.rs index ddeadc116..0c4e7e35b 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/it.rs b/src/lang/it.rs index e0d79edf8..202a455d6 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Nessun trasferimento in corso"), ("Set one-time password length", "Imposta lunghezza password monouso"), ("install_cert_tip", "Installa certificato RustDesk"), - ("comfirm_install_cert_tip", "Questo è un certificato di test RustDesk, che può essere considerato attendibile.\nIl certificato verrà usato per certificarsi ed installare i driver RustDesk quando richiesto."), + ("confirm_install_cert_tip", "Questo è un certificato di test RustDesk, che può essere considerato attendibile.\nIl certificato verrà usato per certificarsi ed installare i driver RustDesk quando richiesto."), ("RDP Settings", "Impostazioni RDP"), ("Sort by", "Ordina per"), ("New Connection", "Nuova connessione"), diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 3092c9305..747d8835b 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 52604aa2e..bdb86e52b 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/kz.rs b/src/lang/kz.rs index c253ecdcd..438227aaf 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 618e554d0..7c9884dd3 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Nevyksta jokių perdavimų"), ("Set one-time password length", "Nustatyti vienkartinio slaptažodžio ilgį"), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", "RDP nustatymai"), ("Sort by", "Rūšiuoti pagal"), ("New Connection", "Naujas ryšys"), diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 4e47e2c11..90b6e9624 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Geen overdrachten in uitvoering"), ("Set one-time password length", "Stel de lengte van het eenmalige wachtwoord in"), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", "RDP Instellingen"), ("Sort by", "Sorteren op"), ("New Connection", "Nieuwe Verbinding"), diff --git a/src/lang/pl.rs b/src/lang/pl.rs index bfe9ecb3e..1d153e364 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Brak transferów w toku"), ("Set one-time password length", "Ustaw długość jednorazowego hasła"), ("install_cert_tip", "Instalacja certyfikatu RustDesk"), - ("comfirm_install_cert_tip", "To jest certyfikat testowy RustDesk, któremu można zaufać. Certyfikat jest używany do zaufania i instalowania sterowników RustDesk w razie potrzeby."), + ("confirm_install_cert_tip", "To jest certyfikat testowy RustDesk, któremu można zaufać. Certyfikat jest używany do zaufania i instalowania sterowników RustDesk w razie potrzeby."), ("RDP Settings", "Ustawienia RDP"), ("Sort by", "Sortuj wg"), ("New Connection", "Nowe połączenie"), diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 0d7d78eb9..ddf182355 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index abf3aac93..69a154503 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Nenhuma transferência em andamento"), ("Set one-time password length", "Definir comprimento de senha descartável"), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", "Configurações RDP"), ("Sort by", "Ordenar por"), ("New Connection", "Nova Conexão"), diff --git a/src/lang/ro.rs b/src/lang/ro.rs index b4b372275..dee9ce028 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Niciun transfer nu este în desfășurare"), ("Set one-time password length", "Definește lungimea parolei unice"), ("install_cert_tip", "Instalează certificatul RustDesk"), - ("comfirm_install_cert_tip", "Acesta este un certificat de testare RustDesk și este de încredere. Certificatul va fi utilizat pentru a acorda încredere și instala drivere RustDesk atunci când este necesar."), + ("confirm_install_cert_tip", "Acesta este un certificat de testare RustDesk și este de încredere. Certificatul va fi utilizat pentru a acorda încredere și instala drivere RustDesk atunci când este necesar."), ("RDP Settings", "Setări RDP"), ("Sort by", "Sortează după"), ("New Connection", "Conexiune nouă"), diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 4f0e693eb..a359585de 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Передача не осуществляется"), ("Set one-time password length", "Установить длину одноразового пароля"), ("install_cert_tip", "Установить сертификат RustDesk"), - ("comfirm_install_cert_tip", "Это тестовый сертификат RustDesk, которому можно доверять. Он будет использоваться только по необходимости для установки драйверов RustDesk."), + ("confirm_install_cert_tip", "Это тестовый сертификат RustDesk, которому можно доверять. Он будет использоваться только по необходимости для установки драйверов RustDesk."), ("RDP Settings", "Настройки RDP"), ("Sort by", "Сортировка"), ("New Connection", "Новое подключение"), diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 549d5acc4..04d063bc4 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/sl.rs b/src/lang/sl.rs index c92336fc6..5df824031 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/sq.rs b/src/lang/sq.rs index fc311bd37..c4305d74a 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 5b4d6a122..031750c5c 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 8b7ad3387..5d779dbf8 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/template.rs b/src/lang/template.rs index 733d45268..9bfa58414 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/th.rs b/src/lang/th.rs index c817d4fe9..7dde8febd 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/tr.rs b/src/lang/tr.rs index bab7adf31..e16679ece 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", ""), ("Sort by", ""), ("New Connection", ""), diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 52f10c9ba..fb4c390e1 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "沒有正在進行的傳輸"), ("Set one-time password length", "設定一次性密碼長度"), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", "RDP 設定"), ("Sort by", "排序方式"), ("New Connection", "新連線"), diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 307d222e3..d218dc9d3 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Наразі нічого не пересилається"), ("Set one-time password length", "Вказати довжину одноразового пароля"), ("install_cert_tip", "Додати сертифікат Rustdesk"), - ("comfirm_install_cert_tip", "Це сертифікат тестування Rustdesk, якому можна довіряти. За потреби сертифікат буде використано для погодження та встановлення драйверів Rustdesk."), + ("confirm_install_cert_tip", "Це сертифікат тестування Rustdesk, якому можна довіряти. За потреби сертифікат буде використано для погодження та встановлення драйверів Rustdesk."), ("RDP Settings", "Налаштування RDP"), ("Sort by", "Сортувати за"), ("New Connection", "Нове підключення"), diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 0c68d1c62..2b71f9592 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -461,7 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Không có tệp tin nào đang được truyền"), ("Set one-time password length", "Thiết lập độ dài mật khẩu một lần"), ("install_cert_tip", ""), - ("comfirm_install_cert_tip", ""), + ("confirm_install_cert_tip", ""), ("RDP Settings", "Cài đặt RDP"), ("Sort by", "Sắp xếp theo"), ("New Connection", "Kết nối mới"), From ac88f55f250df6020f44bbc2cf4ef18482b6c245 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 12:12:35 +0800 Subject: [PATCH 331/612] refact, peer card menu, open in tabs or windows Signed-off-by: dignow --- flutter/lib/common.dart | 22 +++--- flutter/lib/common/widgets/peer_card.dart | 68 ++++++++++++------- flutter/lib/consts.dart | 7 +- .../lib/desktop/pages/desktop_home_page.dart | 9 +-- .../desktop/pages/desktop_setting_page.dart | 4 +- flutter/lib/desktop/pages/remote_page.dart | 2 +- flutter/lib/utils/multi_window_manager.dart | 39 +++++------ src/lang/ca.rs | 4 +- src/lang/cn.rs | 4 +- src/lang/cs.rs | 4 +- src/lang/da.rs | 4 +- src/lang/de.rs | 4 +- src/lang/el.rs | 4 +- src/lang/eo.rs | 4 +- src/lang/es.rs | 4 +- src/lang/fa.rs | 4 +- src/lang/fr.rs | 4 +- src/lang/hu.rs | 4 +- src/lang/id.rs | 4 +- src/lang/it.rs | 4 +- src/lang/ja.rs | 4 +- src/lang/ko.rs | 4 +- src/lang/kz.rs | 4 +- src/lang/lt.rs | 4 +- src/lang/nl.rs | 4 +- src/lang/pl.rs | 4 +- src/lang/pt_PT.rs | 4 +- src/lang/ptbr.rs | 4 +- src/lang/ro.rs | 4 +- src/lang/ru.rs | 4 +- src/lang/sk.rs | 4 +- src/lang/sl.rs | 4 +- src/lang/sq.rs | 4 +- src/lang/sr.rs | 4 +- src/lang/sv.rs | 4 +- src/lang/template.rs | 4 +- src/lang/th.rs | 4 +- src/lang/tr.rs | 4 +- src/lang/tw.rs | 4 +- src/lang/ua.rs | 4 +- src/lang/vn.rs | 4 +- 41 files changed, 187 insertions(+), 100 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 71fbfcdd9..17206b8ce 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1240,7 +1240,7 @@ bool option2bool(String option, String value) { option == "stop-service" || option == "direct-server" || option == "stop-rendezvous-service" || - option == "force-always-relay") { + option == kOptionForceAlwaysRelay) { res = value == "Y"; } else { assert(false); @@ -1257,7 +1257,7 @@ String bool2option(String option, bool b) { option == "stop-service" || option == "direct-server" || option == "stop-rendezvous-service" || - option == "force-always-relay") { + option == kOptionForceAlwaysRelay) { res = b ? 'Y' : ''; } else { assert(false); @@ -1288,6 +1288,14 @@ bool mainGetLocalBoolOptionSync(String key) { return option2bool(key, bind.mainGetLocalOption(key: key)); } +bool mainGetPeerBoolOptionSync(String id, String key) { + return option2bool(key, bind.mainGetPeerOptionSync(id: id, key: key)); +} + +mainSetPeerBoolOptionSync(String id, String key, bool v) { + bind.mainSetPeerOptionSync(id: id, key: key, value: bool2option(key, v)); +} + Future matchPeer(String searchText, Peer peer) async { if (searchText.isEmpty) { return true; @@ -1545,7 +1553,9 @@ Future restoreWindowPosition(WindowType type, debugPrint("no window position saved, ignoring position restoration"); return false; } - if (type == WindowType.RemoteDesktop && !isRemotePeerPos && windowId != null) { + if (type == WindowType.RemoteDesktop && + !isRemotePeerPos && + windowId != null) { if (lpos.offsetWidth != null) { lpos.offsetWidth = lpos.offsetWidth! + windowId * 20; } @@ -1801,14 +1811,13 @@ connectMainDesktop( required bool isTcpTunneling, required bool isRDP, bool? forceRelay, - bool forceSeparateWindow = false, }) async { if (isFileTransfer) { await rustDeskWinManager.newFileTransfer(id, forceRelay: forceRelay); } else if (isTcpTunneling || isRDP) { await rustDeskWinManager.newPortForward(id, isRDP, forceRelay: forceRelay); } else { - await rustDeskWinManager.newRemoteDesktop(id, forceRelay: forceRelay, forceSeparateWindow: forceSeparateWindow); + await rustDeskWinManager.newRemoteDesktop(id, forceRelay: forceRelay); } } @@ -1822,7 +1831,6 @@ connect( bool isFileTransfer = false, bool isTcpTunneling = false, bool isRDP = false, - bool forceSeparateWindow = false, }) async { if (id == '') return; id = id.replaceAll(' ', ''); @@ -1840,7 +1848,6 @@ connect( isTcpTunneling: isTcpTunneling, isRDP: isRDP, forceRelay: forceRelay, - forceSeparateWindow: forceSeparateWindow, ); } else { await rustDeskWinManager.call(WindowType.Main, kWindowConnect, { @@ -1849,7 +1856,6 @@ connect( 'isTcpTunneling': isTcpTunneling, 'isRDP': isRDP, 'forceRelay': forceRelay, - 'forceSeparateWindow': forceSeparateWindow, }); } } else { diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 61c5cb69e..936be6c20 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -404,7 +404,6 @@ abstract class BasePeerCard extends StatelessWidget { bool isFileTransfer = false, bool isTcpTunneling = false, bool isRDP = false, - bool forceSeparateWindow = false, }) { return MenuEntryButton( childBuilder: (TextStyle? style) => Text( @@ -418,7 +417,6 @@ abstract class BasePeerCard extends StatelessWidget { isFileTransfer: isFileTransfer, isTcpTunneling: isTcpTunneling, isRDP: isRDP, - forceSeparateWindow: forceSeparateWindow, ); }, padding: menuPadding, @@ -427,25 +425,13 @@ abstract class BasePeerCard extends StatelessWidget { } @protected - List> _connectActions(BuildContext context, Peer peer) { - final actions = [_connectAction(context, peer, false)]; - if (!mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow)) { - actions.add(_connectAction(context, peer, true)); - } - return actions; - } - - @protected - MenuEntryBase _connectAction( - BuildContext context, Peer peer, bool forceSeparateWindow) { + MenuEntryBase _connectAction(BuildContext context, Peer peer) { return _connectCommonAction( context, peer.id, (peer.alias.isEmpty - ? translate('Connect') - : '${translate('Connect')} ${peer.id}') + - (forceSeparateWindow ? ' (${translate('separate window')})' : ''), - forceSeparateWindow: forceSeparateWindow, + ? translate('Connect') + : '${translate('Connect')} ${peer.id}'), ); } @@ -538,15 +524,40 @@ abstract class BasePeerCard extends StatelessWidget { ); } + Future> _openNewConnInAction( + String id, String label, String key) async { + return MenuEntrySwitch( + switchType: SwitchType.scheckbox, + text: translate(label), + getter: () async => mainGetPeerBoolOptionSync(id, key), + setter: (bool v) async { + await bind.mainSetPeerOption( + id: id, key: key, value: bool2option(key, v)); + }, + padding: menuPadding, + dismissOnClicked: true, + ); + } + + _openInTabsAction(String id) async => + await _openNewConnInAction(id, 'Open in Tabs', kOptionOpenInTabs); + + _openInWindowsAction(String id) async => + await _openNewConnInAction(id, 'Open in windows', kOptionOpenInWindows); + + _openNewConnInOptAction(String id) async => + mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs) + ? await _openInWindowsAction(id) + : await _openInTabsAction(id); + @protected Future _isForceAlwaysRelay(String id) async { - return (await bind.mainGetPeerOption(id: id, key: 'force-always-relay')) + return (await bind.mainGetPeerOption(id: id, key: kOptionForceAlwaysRelay)) .isNotEmpty; } @protected Future> _forceAlwaysRelayAction(String id) async { - const option = 'force-always-relay'; return MenuEntrySwitch( switchType: SwitchType.scheckbox, text: translate('Always connect via relay'), @@ -555,7 +566,9 @@ abstract class BasePeerCard extends StatelessWidget { }, setter: (bool v) async { await bind.mainSetPeerOption( - id: id, key: option, value: bool2option(option, v)); + id: id, + key: kOptionForceAlwaysRelay, + value: bool2option(kOptionForceAlwaysRelay, v)); }, padding: menuPadding, dismissOnClicked: true, @@ -813,7 +826,7 @@ class RecentPeerCard extends BasePeerCard { Future>> _buildMenuItems( BuildContext context) async { final List> menuItems = [ - ..._connectActions(context, peer), + _connectAction(context, peer), _transferFileAction(context, peer.id), ]; @@ -822,6 +835,7 @@ class RecentPeerCard extends BasePeerCard { if (isDesktop && peer.platform != 'Android') { menuItems.add(_tcpTunnelingAction(context, peer.id)); } + menuItems.add(await _openNewConnInOptAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id)); if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); @@ -869,12 +883,13 @@ class FavoritePeerCard extends BasePeerCard { Future>> _buildMenuItems( BuildContext context) async { final List> menuItems = [ - ..._connectActions(context, peer), + _connectAction(context, peer), _transferFileAction(context, peer.id), ]; if (isDesktop && peer.platform != 'Android') { menuItems.add(_tcpTunnelingAction(context, peer.id)); } + menuItems.add(await _openNewConnInOptAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id)); if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); @@ -919,7 +934,7 @@ class DiscoveredPeerCard extends BasePeerCard { Future>> _buildMenuItems( BuildContext context) async { final List> menuItems = [ - ..._connectActions(context, peer), + _connectAction(context, peer), _transferFileAction(context, peer.id), ]; @@ -928,6 +943,7 @@ class DiscoveredPeerCard extends BasePeerCard { if (isDesktop && peer.platform != 'Android') { menuItems.add(_tcpTunnelingAction(context, peer.id)); } + menuItems.add(await _openNewConnInOptAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id)); if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); @@ -971,12 +987,13 @@ class AddressBookPeerCard extends BasePeerCard { Future>> _buildMenuItems( BuildContext context) async { final List> menuItems = [ - ..._connectActions(context, peer), + _connectAction(context, peer), _transferFileAction(context, peer.id), ]; if (isDesktop && peer.platform != 'Android') { menuItems.add(_tcpTunnelingAction(context, peer.id)); } + menuItems.add(await _openNewConnInOptAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id)); if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); @@ -1033,12 +1050,13 @@ class MyGroupPeerCard extends BasePeerCard { Future>> _buildMenuItems( BuildContext context) async { final List> menuItems = [ - ..._connectActions(context, peer), + _connectAction(context, peer), _transferFileAction(context, peer.id), ]; if (isDesktop && peer.platform != 'Android') { menuItems.add(_tcpTunnelingAction(context, peer.id)); } + menuItems.add(await _openNewConnInOptAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id)); if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 99a87362e..5376196e4 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -22,8 +22,6 @@ const String kAppTypeDesktopRemote = "remote"; const String kAppTypeDesktopFileTransfer = "file transfer"; const String kAppTypeDesktopPortForward = "port forward"; -const bool kCloseMultiWindowByHide = true; - const String kWindowMainWindowOnTop = "main_window_on_top"; const String kWindowGetWindowInfo = "get_window_info"; const String kWindowDisableGrabKeyboard = "disable_grab_keyboard"; @@ -42,7 +40,10 @@ const String kWindowEventGetSessionIdList = "get_session_id_list"; const String kWindowEventMoveTabToNewWindow = "move_tab_to_new_window"; const String kWindowEventCloseForSeparateWindow = "close_for_separate_window"; -const String kOptionSeparateRemoteWindow = "allow-separate-remote-window"; +const String kOptionOpenNewConnInTabs = "enable-open-new-connections-in-tabs"; +const String kOptionOpenInTabs = "allow-open-in-tabs"; +const String kOptionOpenInWindows = "allow-open-in-windows"; +const String kOptionForceAlwaysRelay = "force-always-relay"; const String kUniLinksPrefix = "rustdesk://"; const String kUrlActionClose = "close"; diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index b87820b97..7bf303a68 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -554,13 +554,7 @@ class _DesktopHomePageState extends State } else if (call.method == kWindowEventShow) { await rustDeskWinManager.registerActiveWindow(call.arguments["id"]); } else if (call.method == kWindowEventHide) { - final wId = call.arguments['id']; - final isSeparateWindowEnabled = - mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow); - if (isSeparateWindowEnabled && !kCloseMultiWindowByHide) { - await rustDeskWinManager.destroyWindow(wId); - } - await rustDeskWinManager.unregisterActiveWindow(wId); + await rustDeskWinManager.unregisterActiveWindow(call.arguments['id']); } else if (call.method == kWindowConnect) { await connectMainDesktop( call.arguments['id'], @@ -568,7 +562,6 @@ class _DesktopHomePageState extends State isTcpTunneling: call.arguments['isTcpTunneling'], isRDP: call.arguments['isRDP'], forceRelay: call.arguments['forceRelay'], - forceSeparateWindow: call.arguments['forceSeparateWindow'], ); } else if (call.method == kWindowEventMoveTabToNewWindow) { final args = call.arguments.split(','); diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 4a4992c58..33b0a2e43 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -319,8 +319,8 @@ class _GeneralState extends State<_General> { _OptionCheckBox(context, 'Adaptive bitrate', 'enable-abr'), _OptionCheckBox( context, - 'Separate remote windows', - kOptionSeparateRemoteWindow, + 'Open new connections in tabs', + kOptionOpenNewConnInTabs, isServer: false, ), ]; diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 32faf08ae..35d20a263 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -116,7 +116,7 @@ class _RemotePageState extends State Wakelock.enable(); } // Register texture. - if (mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow)) { + if (mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs)) { _renderTexture = renderTexture; } else { _renderTexture = RenderTexture(); diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 0a1858c2c..abd76238e 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -81,19 +81,24 @@ class RustDeskMultiWindowManager { } _newSession( - bool separateWindow, + bool openInTabs, WindowType type, String methodName, String remoteId, List windows, String msg, ) async { - if (separateWindow) { - if (kCloseMultiWindowByHide && _inactiveWindows.isNotEmpty) { + if (openInTabs) { + if (windows.isEmpty) { + await newSessionWindow(type, remoteId, msg, windows); + } else { + call(type, methodName, msg); + } + } else { + if (_inactiveWindows.isNotEmpty) { for (final windowId in windows) { if (_inactiveWindows.contains(windowId)) { - await DesktopMultiWindow.invokeMethod( - windowId, methodName, msg); + await DesktopMultiWindow.invokeMethod(windowId, methodName, msg); WindowController.fromWindowId(windowId).show(); registerActiveWindow(windowId); return; @@ -101,12 +106,6 @@ class RustDeskMultiWindowManager { } } await newSessionWindow(type, remoteId, msg, windows); - } else { - if (windows.isEmpty) { - await newSessionWindow(type, remoteId, msg, windows); - } else { - call(type, methodName, msg); - } } } @@ -119,7 +118,6 @@ class RustDeskMultiWindowManager { bool? forceRelay, String? switchUuid, bool? isRDP, - bool forceSeparateWindow = false, }) async { var params = { "type": type.index, @@ -136,11 +134,16 @@ class RustDeskMultiWindowManager { final msg = jsonEncode(params); // separate window for file transfer is not supported - bool separateWindow = forceSeparateWindow || - (type != WindowType.FileTransfer && - mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow)); + bool openInTabs = false; + if (type == WindowType.RemoteDesktop) { + if (mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs)) { + openInTabs = !mainGetPeerBoolOptionSync(remoteId, kOptionOpenInWindows); + } else { + openInTabs = mainGetPeerBoolOptionSync(remoteId, kOptionOpenInTabs); + } + } - if (windows.length > 1 || separateWindow) { + if (windows.length > 1 || !openInTabs) { for (final windowId in windows) { if (await DesktopMultiWindow.invokeMethod( windowId, kWindowEventActiveSession, remoteId)) { @@ -149,7 +152,7 @@ class RustDeskMultiWindowManager { } } - await _newSession(separateWindow, type, methodName, remoteId, windows, msg); + await _newSession(openInTabs, type, methodName, remoteId, windows, msg); } Future newRemoteDesktop( @@ -157,7 +160,6 @@ class RustDeskMultiWindowManager { String? password, String? switchUuid, bool? forceRelay, - bool forceSeparateWindow = false, }) async { return await newSession( WindowType.RemoteDesktop, @@ -167,7 +169,6 @@ class RustDeskMultiWindowManager { password: password, forceRelay: forceRelay, switchUuid: switchUuid, - forceSeparateWindow: forceSeparateWindow, ); } diff --git a/src/lang/ca.rs b/src/lang/ca.rs index a7d4c9793..2a38db38f 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/cn.rs b/src/lang/cn.rs index ae3723692..f8f191f66 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "管理的设备数已达到最大值"), ("Sync with recent sessions", "同步最近会话"), ("Sort tags", "对标签进行排序"), - ("Separate remote windows", "使用独立远程窗口"), + ("Open new connections in tabs", "在选项卡中打开新连接"), + ("Open in tabs", "在选项卡中打开"), + ("Open in windows", "在新窗口中打开"), ("separate window", "独立窗口"), ("Move tab to new window", "将标签页移至新窗口"), ].iter().cloned().collect(); diff --git a/src/lang/cs.rs b/src/lang/cs.rs index eb958733f..6160a0e87 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/da.rs b/src/lang/da.rs index 36dbb2229..7f7acda4a 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/de.rs b/src/lang/de.rs index dfe5e39d6..3e3f258dc 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."), ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), - ("Separate remote windows", "Separate entfernte Fenster"), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", "Separates Fenster"), ("Move tab to new window", "Tab in neues Fenster verschieben"), ].iter().cloned().collect(); diff --git a/src/lang/el.rs b/src/lang/el.rs index e9a547dd7..93ead4c88 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 5ad8e19a9..a966e2260 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/es.rs b/src/lang/es.rs index 97d3f61ed..a7856d93b 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Has alcanzado el máximo número de dispositivos administrados."), ("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sort tags", "Ordenar etiquetas"), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/fa.rs b/src/lang/fa.rs index ea4656257..819ebac61 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/fr.rs b/src/lang/fr.rs index d2a470e35..8d614c1b6 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/hu.rs b/src/lang/hu.rs index a179c3ab1..6f5939e63 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/id.rs b/src/lang/id.rs index 0c4e7e35b..d0dc47e82 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/it.rs b/src/lang/it.rs index 202a455d6..d6ca7a42b 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."), ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), - ("Separate remote windows", "Separa finestre remote"), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", "Separa finestra"), ("Move tab to new window", "Sposta scheda nella finestra successiva"), ].iter().cloned().collect(); diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 747d8835b..165f30ade 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ko.rs b/src/lang/ko.rs index bdb86e52b..13075b9ff 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 438227aaf..5907f44f6 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 7c9884dd3..cacd8daf2 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 90b6e9624..9399062b2 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Het maximum aantal gecontroleerde apparaten is bereikt."), ("Sync with recent sessions", "Recente sessies synchroniseren"), ("Sort tags", "Labels sorteren"), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 733a607cc..8c12cfea0 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Przekroczona maks. liczba urządzeń"), ("Sync with recent sessions", "Synchronizacja z ostatnimi sesjami"), ("Sort tags", "Znaczniki sortowania"), - ("Separate remote windows", "Oddzielne zdalne okna"), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", "oddzielne okno"), ("Move tab to new window", "Przenieś zakładkę do nowego okna"), ].iter().cloned().collect(); diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index ddf182355..b0ec7d50d 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 69a154503..b3c2debe0 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ro.rs b/src/lang/ro.rs index dee9ce028..91f5990d0 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ru.rs b/src/lang/ru.rs index a359585de..ee4a7cdee 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), - ("Separate remote windows", "Отдельные удалённые окна"), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", "отдельное окно"), ("Move tab to new window", "Переместить вкладку в отдельное окно"), ].iter().cloned().collect(); diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 04d063bc4..01b671ce0 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 5df824031..02b8d622e 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sq.rs b/src/lang/sq.rs index c4305d74a..f9f6434e2 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 031750c5c..91e0fc778 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 5d779dbf8..1e899e008 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/template.rs b/src/lang/template.rs index 9bfa58414..372289819 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/th.rs b/src/lang/th.rs index 7dde8febd..a4d166036 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/tr.rs b/src/lang/tr.rs index e16679ece..4e29f041d 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/tw.rs b/src/lang/tw.rs index fb4c390e1..fc656208d 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ua.rs b/src/lang/ua.rs index d218dc9d3..db04a7740 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 2b71f9592..ca99323fa 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -524,7 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Separate remote windows", ""), + ("Open new connections in tabs", ""), + ("Open in tabs", ""), + ("Open in windows", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); From b5679df7f9264a59b3ab70084ae97621d0d8eac8 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 13:50:29 +0800 Subject: [PATCH 332/612] refact, peer card menu, open in tabs action Signed-off-by: dignow --- flutter/lib/common/widgets/peer_card.dart | 2 +- src/lang/ca.rs | 4 ++-- src/lang/cn.rs | 4 ++-- src/lang/cs.rs | 4 ++-- src/lang/da.rs | 4 ++-- src/lang/de.rs | 4 ++-- src/lang/el.rs | 4 ++-- src/lang/en.rs | 1 + src/lang/eo.rs | 4 ++-- src/lang/es.rs | 4 ++-- src/lang/fa.rs | 4 ++-- src/lang/fr.rs | 4 ++-- src/lang/hu.rs | 4 ++-- src/lang/id.rs | 4 ++-- src/lang/it.rs | 4 ++-- src/lang/ja.rs | 4 ++-- src/lang/ko.rs | 4 ++-- src/lang/kz.rs | 4 ++-- src/lang/lt.rs | 4 ++-- src/lang/nl.rs | 4 ++-- src/lang/pl.rs | 4 ++-- src/lang/pt_PT.rs | 4 ++-- src/lang/ptbr.rs | 4 ++-- src/lang/ro.rs | 4 ++-- src/lang/ru.rs | 4 ++-- src/lang/sk.rs | 4 ++-- src/lang/sl.rs | 4 ++-- src/lang/sq.rs | 4 ++-- src/lang/sr.rs | 4 ++-- src/lang/sv.rs | 4 ++-- src/lang/template.rs | 4 ++-- src/lang/th.rs | 4 ++-- src/lang/tr.rs | 4 ++-- src/lang/tw.rs | 4 ++-- src/lang/ua.rs | 4 ++-- src/lang/vn.rs | 4 ++-- 36 files changed, 70 insertions(+), 69 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 936be6c20..dc8b9a667 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -543,7 +543,7 @@ abstract class BasePeerCard extends StatelessWidget { await _openNewConnInAction(id, 'Open in Tabs', kOptionOpenInTabs); _openInWindowsAction(String id) async => - await _openNewConnInAction(id, 'Open in windows', kOptionOpenInWindows); + await _openNewConnInAction(id, 'Open with New window', kOptionOpenInWindows); _openNewConnInOptAction(String id) async => mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs) diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 2a38db38f..02b366fd6 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/cn.rs b/src/lang/cn.rs index f8f191f66..a524997b2 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "同步最近会话"), ("Sort tags", "对标签进行排序"), ("Open new connections in tabs", "在选项卡中打开新连接"), - ("Open in tabs", "在选项卡中打开"), - ("Open in windows", "在新窗口中打开"), + ("Open in Tabs", "在选项卡中打开"), + ("Open with New window", "在新窗口中打开"), ("separate window", "独立窗口"), ("Move tab to new window", "将标签页移至新窗口"), ].iter().cloned().collect(); diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 6160a0e87..1103c86ab 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/da.rs b/src/lang/da.rs index 7f7acda4a..ac00a4569 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/de.rs b/src/lang/de.rs index 3e3f258dc..17a1a8a76 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", "Separates Fenster"), ("Move tab to new window", "Tab in neues Fenster verschieben"), ].iter().cloned().collect(); diff --git a/src/lang/el.rs b/src/lang/el.rs index 93ead4c88..0e1af3967 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/en.rs b/src/lang/en.rs index 24c7192c2..2a9b40568 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -12,6 +12,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("not_close_tcp_tip", "Don't close this window while you are using the tunnel"), ("setup_server_tip", "For faster connection, please set up your own server"), ("Auto Login", "Auto Login (Only valid if you set \"Lock after session end\")"), + ("Always connect via relay", "Always Connect via Relay"), ("whitelist_tip", "Only whitelisted IP can access me"), ("whitelist_sep", "Separated by comma, semicolon, spaces or new line"), ("Wrong credentials", "Wrong username or password"), diff --git a/src/lang/eo.rs b/src/lang/eo.rs index a966e2260..10ffff3a7 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/es.rs b/src/lang/es.rs index a7856d93b..afd231960 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sort tags", "Ordenar etiquetas"), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 819ebac61..9ccfa7e9a 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 8d614c1b6..75b3ef275 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 6f5939e63..52580db9b 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/id.rs b/src/lang/id.rs index d0dc47e82..513325aef 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/it.rs b/src/lang/it.rs index d6ca7a42b..0385b300e 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", "Separa finestra"), ("Move tab to new window", "Sposta scheda nella finestra successiva"), ].iter().cloned().collect(); diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 165f30ade..e2a89f803 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 13075b9ff..0e0160527 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 5907f44f6..09eb5c2b6 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/lt.rs b/src/lang/lt.rs index cacd8daf2..a1a14578a 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 9399062b2..3ef4c733e 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Recente sessies synchroniseren"), ("Sort tags", "Labels sorteren"), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 8c12cfea0..76c2766b0 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Synchronizacja z ostatnimi sesjami"), ("Sort tags", "Znaczniki sortowania"), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", "oddzielne okno"), ("Move tab to new window", "Przenieś zakładkę do nowego okna"), ].iter().cloned().collect(); diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index b0ec7d50d..2ec34dc9a 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index b3c2debe0..f749479aa 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 91f5990d0..c784a6aa3 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ru.rs b/src/lang/ru.rs index ee4a7cdee..6b86ea756 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", "отдельное окно"), ("Move tab to new window", "Переместить вкладку в отдельное окно"), ].iter().cloned().collect(); diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 01b671ce0..ced5b01b6 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 02b8d622e..c9a11e7c4 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sq.rs b/src/lang/sq.rs index f9f6434e2..3d1d22d20 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 91e0fc778..e9601d933 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 1e899e008..3588733f0 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/template.rs b/src/lang/template.rs index 372289819..54095748e 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/th.rs b/src/lang/th.rs index a4d166036..6cb00c453 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 4e29f041d..b7362205f 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/tw.rs b/src/lang/tw.rs index fc656208d..6bbac0463 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ua.rs b/src/lang/ua.rs index db04a7740..b65b3068b 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/vn.rs b/src/lang/vn.rs index ca99323fa..d3ca91ccc 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -525,8 +525,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in tabs", ""), - ("Open in windows", ""), + ("Open in Tabs", ""), + ("Open with New window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); From 836a2b0fbd1235fb1c8cc117f962d78fcb7ffa22 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 14:07:40 +0800 Subject: [PATCH 333/612] fix label Signed-off-by: dignow --- flutter/lib/common/widgets/peer_card.dart | 2 +- src/lang/ca.rs | 2 +- src/lang/cn.rs | 2 +- src/lang/cs.rs | 2 +- src/lang/da.rs | 2 +- src/lang/de.rs | 2 +- src/lang/el.rs | 2 +- src/lang/eo.rs | 2 +- src/lang/es.rs | 2 +- src/lang/fa.rs | 2 +- src/lang/fr.rs | 2 +- src/lang/hu.rs | 2 +- src/lang/id.rs | 2 +- src/lang/it.rs | 2 +- src/lang/ja.rs | 2 +- src/lang/ko.rs | 2 +- src/lang/kz.rs | 2 +- src/lang/lt.rs | 2 +- src/lang/nl.rs | 2 +- src/lang/pl.rs | 2 +- src/lang/pt_PT.rs | 2 +- src/lang/ptbr.rs | 2 +- src/lang/ro.rs | 2 +- src/lang/ru.rs | 2 +- src/lang/sk.rs | 2 +- src/lang/sl.rs | 2 +- src/lang/sq.rs | 2 +- src/lang/sr.rs | 2 +- src/lang/sv.rs | 2 +- src/lang/template.rs | 2 +- src/lang/th.rs | 2 +- src/lang/tr.rs | 2 +- src/lang/tw.rs | 2 +- src/lang/ua.rs | 2 +- src/lang/vn.rs | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index dc8b9a667..a1c800c8a 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -543,7 +543,7 @@ abstract class BasePeerCard extends StatelessWidget { await _openNewConnInAction(id, 'Open in Tabs', kOptionOpenInTabs); _openInWindowsAction(String id) async => - await _openNewConnInAction(id, 'Open with New window', kOptionOpenInWindows); + await _openNewConnInAction(id, 'Open with New Window', kOptionOpenInWindows); _openNewConnInOptAction(String id) async => mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs) diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 02b366fd6..0bf0bb3e4 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/cn.rs b/src/lang/cn.rs index a524997b2..d13914094 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "对标签进行排序"), ("Open new connections in tabs", "在选项卡中打开新连接"), ("Open in Tabs", "在选项卡中打开"), - ("Open with New window", "在新窗口中打开"), + ("Open with New Window", "在新窗口中打开"), ("separate window", "独立窗口"), ("Move tab to new window", "将标签页移至新窗口"), ].iter().cloned().collect(); diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 1103c86ab..c857c1a60 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/da.rs b/src/lang/da.rs index ac00a4569..26d35390a 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/de.rs b/src/lang/de.rs index 17a1a8a76..5dbaaac12 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Tags sortieren"), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", "Separates Fenster"), ("Move tab to new window", "Tab in neues Fenster verschieben"), ].iter().cloned().collect(); diff --git a/src/lang/el.rs b/src/lang/el.rs index 0e1af3967..3a6bda3f9 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 10ffff3a7..c0259aff0 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/es.rs b/src/lang/es.rs index afd231960..da98bcb43 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Ordenar etiquetas"), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 9ccfa7e9a..bb61497f0 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 75b3ef275..e1c79e528 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 52580db9b..4fea28276 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/id.rs b/src/lang/id.rs index 513325aef..3549da2b6 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/it.rs b/src/lang/it.rs index 0385b300e..ded2e5a01 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Ordina etichette"), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", "Separa finestra"), ("Move tab to new window", "Sposta scheda nella finestra successiva"), ].iter().cloned().collect(); diff --git a/src/lang/ja.rs b/src/lang/ja.rs index e2a89f803..334e99bda 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 0e0160527..6cc4170f5 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 09eb5c2b6..59ef40dcd 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/lt.rs b/src/lang/lt.rs index a1a14578a..3f8bbdc5e 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 3ef4c733e..9ef86b6ca 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Labels sorteren"), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 76c2766b0..e77f64367 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Znaczniki sortowania"), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", "oddzielne okno"), ("Move tab to new window", "Przenieś zakładkę do nowego okna"), ].iter().cloned().collect(); diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 2ec34dc9a..7f54d1667 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index f749479aa..7f55d2597 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ro.rs b/src/lang/ro.rs index c784a6aa3..3ce0446f5 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 6b86ea756..a23030e1d 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Сортировка меток"), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", "отдельное окно"), ("Move tab to new window", "Переместить вкладку в отдельное окно"), ].iter().cloned().collect(); diff --git a/src/lang/sk.rs b/src/lang/sk.rs index ced5b01b6..5f74a0721 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sl.rs b/src/lang/sl.rs index c9a11e7c4..f4a7946ca 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 3d1d22d20..dfaad1051 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sr.rs b/src/lang/sr.rs index e9601d933..be85ffcba 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 3588733f0..e8ef6c476 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/template.rs b/src/lang/template.rs index 54095748e..c76b3b226 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/th.rs b/src/lang/th.rs index 6cb00c453..056d0ca06 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/tr.rs b/src/lang/tr.rs index b7362205f..39dab06cf 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 6bbac0463..d58f7e8fe 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ua.rs b/src/lang/ua.rs index b65b3068b..13e6cb1d0 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/vn.rs b/src/lang/vn.rs index d3ca91ccc..18c81f29b 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open new connections in tabs", ""), ("Open in Tabs", ""), - ("Open with New window", ""), + ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); From 9b614c8b3233467b083691d521d24b28f863bd3b Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 14:22:32 +0800 Subject: [PATCH 334/612] remove peer card menu Signed-off-by: dignow --- flutter/lib/common/widgets/peer_card.dart | 10 +++++----- flutter/lib/utils/multi_window_manager.dart | 10 ++-------- src/lang/ca.rs | 2 -- src/lang/cn.rs | 2 -- src/lang/cs.rs | 2 -- src/lang/da.rs | 2 -- src/lang/de.rs | 2 -- src/lang/el.rs | 2 -- src/lang/eo.rs | 2 -- src/lang/es.rs | 2 -- src/lang/fa.rs | 2 -- src/lang/fr.rs | 2 -- src/lang/hu.rs | 2 -- src/lang/id.rs | 2 -- src/lang/it.rs | 2 -- src/lang/ja.rs | 2 -- src/lang/ko.rs | 2 -- src/lang/kz.rs | 2 -- src/lang/lt.rs | 2 -- src/lang/nl.rs | 2 -- src/lang/pl.rs | 2 -- src/lang/pt_PT.rs | 2 -- src/lang/ptbr.rs | 2 -- src/lang/ro.rs | 2 -- src/lang/ru.rs | 2 -- src/lang/sk.rs | 2 -- src/lang/sl.rs | 2 -- src/lang/sq.rs | 2 -- src/lang/sr.rs | 2 -- src/lang/sv.rs | 2 -- src/lang/template.rs | 2 -- src/lang/th.rs | 2 -- src/lang/tr.rs | 2 -- src/lang/tw.rs | 2 -- src/lang/ua.rs | 2 -- src/lang/vn.rs | 2 -- 36 files changed, 7 insertions(+), 81 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index a1c800c8a..50beda75c 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -835,7 +835,7 @@ class RecentPeerCard extends BasePeerCard { if (isDesktop && peer.platform != 'Android') { menuItems.add(_tcpTunnelingAction(context, peer.id)); } - menuItems.add(await _openNewConnInOptAction(peer.id)); + // menuItems.add(await _openNewConnInOptAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id)); if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); @@ -889,7 +889,7 @@ class FavoritePeerCard extends BasePeerCard { if (isDesktop && peer.platform != 'Android') { menuItems.add(_tcpTunnelingAction(context, peer.id)); } - menuItems.add(await _openNewConnInOptAction(peer.id)); + // menuItems.add(await _openNewConnInOptAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id)); if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); @@ -943,7 +943,7 @@ class DiscoveredPeerCard extends BasePeerCard { if (isDesktop && peer.platform != 'Android') { menuItems.add(_tcpTunnelingAction(context, peer.id)); } - menuItems.add(await _openNewConnInOptAction(peer.id)); + // menuItems.add(await _openNewConnInOptAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id)); if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); @@ -993,7 +993,7 @@ class AddressBookPeerCard extends BasePeerCard { if (isDesktop && peer.platform != 'Android') { menuItems.add(_tcpTunnelingAction(context, peer.id)); } - menuItems.add(await _openNewConnInOptAction(peer.id)); + // menuItems.add(await _openNewConnInOptAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id)); if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); @@ -1056,7 +1056,7 @@ class MyGroupPeerCard extends BasePeerCard { if (isDesktop && peer.platform != 'Android') { menuItems.add(_tcpTunnelingAction(context, peer.id)); } - menuItems.add(await _openNewConnInOptAction(peer.id)); + // menuItems.add(await _openNewConnInOptAction(peer.id)); menuItems.add(await _forceAlwaysRelayAction(peer.id)); if (peer.platform == 'Windows') { menuItems.add(_rdpAction(context, peer.id)); diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index abd76238e..e87551d6b 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -134,14 +134,8 @@ class RustDeskMultiWindowManager { final msg = jsonEncode(params); // separate window for file transfer is not supported - bool openInTabs = false; - if (type == WindowType.RemoteDesktop) { - if (mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs)) { - openInTabs = !mainGetPeerBoolOptionSync(remoteId, kOptionOpenInWindows); - } else { - openInTabs = mainGetPeerBoolOptionSync(remoteId, kOptionOpenInTabs); - } - } + bool openInTabs = type != WindowType.RemoteDesktop || + mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs); if (windows.length > 1 || !openInTabs) { for (final windowId in windows) { diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 0bf0bb3e4..c88e07198 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/cn.rs b/src/lang/cn.rs index d13914094..644882b64 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "同步最近会话"), ("Sort tags", "对标签进行排序"), ("Open new connections in tabs", "在选项卡中打开新连接"), - ("Open in Tabs", "在选项卡中打开"), - ("Open with New Window", "在新窗口中打开"), ("separate window", "独立窗口"), ("Move tab to new window", "将标签页移至新窗口"), ].iter().cloned().collect(); diff --git a/src/lang/cs.rs b/src/lang/cs.rs index c857c1a60..2c0f62a8a 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/da.rs b/src/lang/da.rs index 26d35390a..0da788f32 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/de.rs b/src/lang/de.rs index 5dbaaac12..e177ccd14 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", "Separates Fenster"), ("Move tab to new window", "Tab in neues Fenster verschieben"), ].iter().cloned().collect(); diff --git a/src/lang/el.rs b/src/lang/el.rs index 3a6bda3f9..c98065d55 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/eo.rs b/src/lang/eo.rs index c0259aff0..2959f8224 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/es.rs b/src/lang/es.rs index da98bcb43..40b0f8aa2 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sort tags", "Ordenar etiquetas"), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/fa.rs b/src/lang/fa.rs index bb61497f0..d7ffcba2d 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/fr.rs b/src/lang/fr.rs index e1c79e528..d5d2bf162 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 4fea28276..b4a51e1ca 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/id.rs b/src/lang/id.rs index 3549da2b6..0be40ee12 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/it.rs b/src/lang/it.rs index ded2e5a01..f0091ec0f 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", "Separa finestra"), ("Move tab to new window", "Sposta scheda nella finestra successiva"), ].iter().cloned().collect(); diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 334e99bda..5cb55777a 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 6cc4170f5..0e3a3b614 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 59ef40dcd..378466334 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 3f8bbdc5e..e1ff74feb 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 9ef86b6ca..4c6b7cc05 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Recente sessies synchroniseren"), ("Sort tags", "Labels sorteren"), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/pl.rs b/src/lang/pl.rs index e77f64367..21deb87a8 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Synchronizacja z ostatnimi sesjami"), ("Sort tags", "Znaczniki sortowania"), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", "oddzielne okno"), ("Move tab to new window", "Przenieś zakładkę do nowego okna"), ].iter().cloned().collect(); diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 7f54d1667..40653dc67 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 7f55d2597..4544bbe3a 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 3ce0446f5..eca9f0263 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ru.rs b/src/lang/ru.rs index a23030e1d..13164a4dc 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", "отдельное окно"), ("Move tab to new window", "Переместить вкладку в отдельное окно"), ].iter().cloned().collect(); diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 5f74a0721..b27b28863 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sl.rs b/src/lang/sl.rs index f4a7946ca..99eb2371b 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sq.rs b/src/lang/sq.rs index dfaad1051..251e11a29 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sr.rs b/src/lang/sr.rs index be85ffcba..d213cd277 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/sv.rs b/src/lang/sv.rs index e8ef6c476..636423607 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/template.rs b/src/lang/template.rs index c76b3b226..52cbcd172 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/th.rs b/src/lang/th.rs index 056d0ca06..57363dacf 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 39dab06cf..c6c7fcc29 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/tw.rs b/src/lang/tw.rs index d58f7e8fe..2390835ca 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 13e6cb1d0..d782bb26d 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 18c81f29b..041d056a0 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -525,8 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("Open in Tabs", ""), - ("Open with New Window", ""), ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); From 772548dbf997c7901cffb1b827dd4a76427bb95f Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 14:34:45 +0800 Subject: [PATCH 335/612] remove unused translation Signed-off-by: dignow --- src/lang/ca.rs | 1 - src/lang/cn.rs | 1 - src/lang/cs.rs | 1 - src/lang/da.rs | 1 - src/lang/de.rs | 1 - src/lang/el.rs | 1 - src/lang/eo.rs | 1 - src/lang/es.rs | 1 - src/lang/fa.rs | 1 - src/lang/fr.rs | 1 - src/lang/hu.rs | 1 - src/lang/id.rs | 1 - src/lang/it.rs | 1 - src/lang/ja.rs | 1 - src/lang/ko.rs | 1 - src/lang/kz.rs | 1 - src/lang/lt.rs | 1 - src/lang/nl.rs | 1 - src/lang/pl.rs | 1 - src/lang/pt_PT.rs | 1 - src/lang/ptbr.rs | 1 - src/lang/ro.rs | 1 - src/lang/ru.rs | 1 - src/lang/sk.rs | 1 - src/lang/sl.rs | 1 - src/lang/sq.rs | 1 - src/lang/sr.rs | 1 - src/lang/sv.rs | 1 - src/lang/template.rs | 1 - src/lang/th.rs | 1 - src/lang/tr.rs | 1 - src/lang/tw.rs | 1 - src/lang/ua.rs | 1 - src/lang/vn.rs | 1 - 34 files changed, 34 deletions(-) diff --git a/src/lang/ca.rs b/src/lang/ca.rs index c88e07198..fb0eeff43 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 644882b64..66c444597 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "同步最近会话"), ("Sort tags", "对标签进行排序"), ("Open new connections in tabs", "在选项卡中打开新连接"), - ("separate window", "独立窗口"), ("Move tab to new window", "将标签页移至新窗口"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 2c0f62a8a..c0c075b14 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 0da788f32..ffb79043a 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index e177ccd14..0eb92ea77 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), ("Open new connections in tabs", ""), - ("separate window", "Separates Fenster"), ("Move tab to new window", "Tab in neues Fenster verschieben"), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index c98065d55..0164dc335 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 2959f8224..915020fc9 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 40b0f8aa2..c645654c9 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sort tags", "Ordenar etiquetas"), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index d7ffcba2d..b491a9a07 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index d5d2bf162..655f5aa41 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index b4a51e1ca..f32cdea23 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 0be40ee12..c33616ad5 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index f0091ec0f..152b364ca 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), ("Open new connections in tabs", ""), - ("separate window", "Separa finestra"), ("Move tab to new window", "Sposta scheda nella finestra successiva"), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 5cb55777a..63a1d5853 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 0e3a3b614..790dc03d7 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 378466334..bbaaccfd9 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index e1ff74feb..1af0f78b8 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 4c6b7cc05..9619bc1b4 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Recente sessies synchroniseren"), ("Sort tags", "Labels sorteren"), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 21deb87a8..114deccb7 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Synchronizacja z ostatnimi sesjami"), ("Sort tags", "Znaczniki sortowania"), ("Open new connections in tabs", ""), - ("separate window", "oddzielne okno"), ("Move tab to new window", "Przenieś zakładkę do nowego okna"), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 40653dc67..83079e2c4 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 4544bbe3a..f9e8bc0cc 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index eca9f0263..e89e499eb 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 13164a4dc..1f8345d18 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), ("Open new connections in tabs", ""), - ("separate window", "отдельное окно"), ("Move tab to new window", "Переместить вкладку в отдельное окно"), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index b27b28863..ed89f6188 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 99eb2371b..ac5283d6a 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 251e11a29..cc2851aab 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index d213cd277..d54090949 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 636423607..8422c9818 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 52cbcd172..2cf0d0e39 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 57363dacf..77b8f24eb 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index c6c7fcc29..97daefc8a 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 2390835ca..6b0643fa7 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index d782bb26d..6fa9cf72d 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 041d056a0..6039b75f1 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -525,7 +525,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", ""), ("Sort tags", ""), ("Open new connections in tabs", ""), - ("separate window", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } From 8c8b5cbb1c1dbded2abcfa07a5c6b86a6e6aff1b Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 8 Aug 2023 14:45:58 +0800 Subject: [PATCH 336/612] fix words --- flutter/lib/common/widgets/peer_card.dart | 4 ++-- src/lang/ca.rs | 2 +- src/lang/cn.rs | 2 +- src/lang/cs.rs | 2 +- src/lang/da.rs | 2 +- src/lang/de.rs | 2 +- src/lang/el.rs | 2 +- src/lang/eo.rs | 2 +- src/lang/es.rs | 2 +- src/lang/fa.rs | 2 +- src/lang/fr.rs | 2 +- src/lang/hu.rs | 2 +- src/lang/id.rs | 2 +- src/lang/it.rs | 2 +- src/lang/ja.rs | 2 +- src/lang/ko.rs | 2 +- src/lang/kz.rs | 2 +- src/lang/lt.rs | 2 +- src/lang/nl.rs | 2 +- src/lang/pl.rs | 2 +- src/lang/pt_PT.rs | 2 +- src/lang/ptbr.rs | 2 +- src/lang/ro.rs | 2 +- src/lang/ru.rs | 2 +- src/lang/sk.rs | 2 +- src/lang/sl.rs | 2 +- src/lang/sq.rs | 2 +- src/lang/sr.rs | 2 +- src/lang/sv.rs | 2 +- src/lang/template.rs | 2 +- src/lang/th.rs | 2 +- src/lang/tr.rs | 2 +- src/lang/tw.rs | 2 +- src/lang/ua.rs | 2 +- src/lang/vn.rs | 2 +- 35 files changed, 36 insertions(+), 36 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 50beda75c..ee3f8d830 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -540,10 +540,10 @@ abstract class BasePeerCard extends StatelessWidget { } _openInTabsAction(String id) async => - await _openNewConnInAction(id, 'Open in Tabs', kOptionOpenInTabs); + await _openNewConnInAction(id, 'Open in New Tab', kOptionOpenInTabs); _openInWindowsAction(String id) async => - await _openNewConnInAction(id, 'Open with New Window', kOptionOpenInWindows); + await _openNewConnInAction(id, 'Open in New Window', kOptionOpenInWindows); _openNewConnInOptAction(String id) async => mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs) diff --git a/src/lang/ca.rs b/src/lang/ca.rs index fb0eeff43..b3d913b62 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 66c444597..83060c6af 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "管理的设备数已达到最大值"), ("Sync with recent sessions", "同步最近会话"), ("Sort tags", "对标签进行排序"), - ("Open new connections in tabs", "在选项卡中打开新连接"), + ("Open connection in new tab", "在选项卡中打开新连接"), ("Move tab to new window", "将标签页移至新窗口"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index c0c075b14..2d7a7ce16 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index ffb79043a..0a10551d3 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 0eb92ea77..1dc63b20b 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."), ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", "Tab in neues Fenster verschieben"), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 0164dc335..33f4d74b8 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 915020fc9..8b29e418e 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index c645654c9..27752e989 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Has alcanzado el máximo número de dispositivos administrados."), ("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sort tags", "Ordenar etiquetas"), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index b491a9a07..0b56e073f 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 655f5aa41..8a2baef55 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index f32cdea23..36c43fec9 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index c33616ad5..c65eee87d 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 152b364ca..ee0764514 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."), ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", "Sposta scheda nella finestra successiva"), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 63a1d5853..6ece9d5c9 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 790dc03d7..6ea9b94ea 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index bbaaccfd9..e5d035b03 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 1af0f78b8..47b70acfd 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 9619bc1b4..08934cea0 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Het maximum aantal gecontroleerde apparaten is bereikt."), ("Sync with recent sessions", "Recente sessies synchroniseren"), ("Sort tags", "Labels sorteren"), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 114deccb7..84f13c617 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Przekroczona maks. liczba urządzeń"), ("Sync with recent sessions", "Synchronizacja z ostatnimi sesjami"), ("Sort tags", "Znaczniki sortowania"), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", "Przenieś zakładkę do nowego okna"), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 83079e2c4..b9e155364 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index f9e8bc0cc..81fd68ac6 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index e89e499eb..ddd141fa4 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 1f8345d18..f8349b12d 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", "Переместить вкладку в отдельное окно"), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index ed89f6188..afe52f4ad 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index ac5283d6a..dc79f9e44 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index cc2851aab..86f3f3544 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index d54090949..06667f4c5 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 8422c9818..2e8ea8713 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 2cf0d0e39..ed3f41efc 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 77b8f24eb..09ade050f 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 97daefc8a..629a144fd 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 6b0643fa7..a86613651 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 6fa9cf72d..a12e2fd10 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 6039b75f1..0db48584e 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", ""), ("Sync with recent sessions", ""), ("Sort tags", ""), - ("Open new connections in tabs", ""), + ("Open connection in new tab", ""), ("Move tab to new window", ""), ].iter().cloned().collect(); } From c9c1ad5829b288d378b4c88b5ad25ff8f812764f Mon Sep 17 00:00:00 2001 From: solokot Date: Tue, 8 Aug 2023 09:53:53 +0300 Subject: [PATCH 337/612] Update ru.rs --- src/lang/ru.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index f8349b12d..c0f129ab0 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -299,7 +299,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Help", "Помощь"), ("Failed", "Не выполнено"), ("Succeeded", "Выполнено"), - ("Someone turns on privacy mode, exit", "Кто-то включает режим конфиденциальности, выход"), + ("Someone turns on privacy mode, exit", "Кто-то включил режим конфиденциальности, выход"), ("Unsupported", "Не поддерживается"), ("Peer denied", "Отклонено удалённым узлом"), ("Please install plugins", "Установите плагины"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), - ("Open connection in new tab", ""), + ("Open connection in new tab", "Открыть подключение в новой вкладке"), ("Move tab to new window", "Переместить вкладку в отдельное окно"), ].iter().cloned().collect(); } From db2ec7df8fba8e196c87aa60c9b77721153bf59c Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Tue, 8 Aug 2023 10:24:46 +0200 Subject: [PATCH 338/612] Update italian language --- src/lang/it.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index ee0764514..5a655ce5a 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Hai raggiunto il numero massimo di dispositivi gestibili."), ("Sync with recent sessions", "Sincronizza con le sessioni recenti"), ("Sort tags", "Ordina etichette"), - ("Open connection in new tab", ""), + ("Open connection in new tab", "Apri connessione in una nuova scheda"), ("Move tab to new window", "Sposta scheda nella finestra successiva"), ].iter().cloned().collect(); } From bebe2b5282bd725a3dd0d796eb4a6d31f524452a Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Tue, 8 Aug 2023 10:31:09 +0200 Subject: [PATCH 339/612] Update de.rs --- src/lang/de.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index 1dc63b20b..ffb62a45f 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -506,7 +506,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Enable", "Aktivieren"), ("Disable", "Deaktivieren"), ("Options", "Einstellungen"), - ("resolution_original_tip", "Originalauflösung"), + ("resolution_original_tip", "Originale Auflösung"), ("resolution_fit_local_tip", "Lokale Auflösung anpassen"), ("resolution_custom_tip", "Benutzerdefinierte Auflösung"), ("Collapse toolbar", "Symbolleiste einklappen"), @@ -524,7 +524,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Sie haben die maximale Anzahl der verwalteten Geräte erreicht."), ("Sync with recent sessions", "Synchronisierung mit den letzten Sitzungen"), ("Sort tags", "Tags sortieren"), - ("Open connection in new tab", ""), + ("Open connection in new tab", "Verbindung in neuem Tab öffnen"), ("Move tab to new window", "Tab in neues Fenster verschieben"), ].iter().cloned().collect(); } From 32fe330946e0db45252cb6dd3147b1eb551564ea Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 18:14:01 +0800 Subject: [PATCH 340/612] restore window pos Signed-off-by: dignow --- flutter/lib/common.dart | 9 +++++++-- flutter/lib/utils/multi_window_manager.dart | 2 ++ src/flutter_ffi.rs | 4 ++++ src/ui_interface.rs | 7 +++++++ src/ui_session_interface.rs | 2 +- 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 17206b8ce..7096c1589 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1542,8 +1542,13 @@ Future restoreWindowPosition(WindowType type, bool isRemotePeerPos = false; String? pos; if (type == WindowType.RemoteDesktop && windowId != null && peerId != null) { - pos = await bind.sessionGetFlutterConfigByPeerId( - id: peerId, k: kWindowPrefix); + if (desktopType == DesktopType.main) { + pos = bind.mainGetPeerFlutterConfigSync( + id: peerId, k: kWindowPrefix + type.name); + } else { + pos = await bind.sessionGetFlutterConfigByPeerId( + id: peerId, k: kWindowPrefix); + } isRemotePeerPos = pos != null; } pos ??= bind.getLocalFlutterConfig(k: kWindowPrefix + type.name); diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index e87551d6b..187b03161 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -99,6 +99,8 @@ class RustDeskMultiWindowManager { for (final windowId in windows) { if (_inactiveWindows.contains(windowId)) { await DesktopMultiWindow.invokeMethod(windowId, methodName, msg); + await restoreWindowPosition(type, + windowId: windowId, peerId: remoteId); WindowController.fromWindowId(windowId).show(); registerActiveWindow(windowId); return; diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 1287abf34..d0106ae54 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -806,6 +806,10 @@ pub fn main_get_peer_option_sync(id: String, key: String) -> SyncReturn SyncReturn(get_peer_option(id, key)) } +pub fn main_get_peer_flutter_config_sync(id: String, k: String) -> SyncReturn { + SyncReturn(get_peer_flutter_config(id, k)) +} + pub fn main_set_peer_option(id: String, key: String, value: String) { set_peer_option(id, key, value) } diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 2979f4ceb..246e3aaff 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -201,6 +201,13 @@ pub fn get_peer_option(id: String, name: String) -> String { c.options.get(&name).unwrap_or(&"".to_owned()).to_owned() } +#[inline] +#[cfg(feature = "flutter")] +pub fn get_peer_flutter_config(id: String, name: String) -> String { + let c = PeerConfig::load(&id); + c.ui_flutter.get(&name).unwrap_or(&"".to_owned()).to_owned() +} + #[inline] pub fn set_peer_option(id: String, name: String, value: String) { let mut c = PeerConfig::load(&id); diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 10e8978c9..7ffcaac6d 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -202,7 +202,7 @@ impl Session { } pub fn get_flutter_config(&self, k: String) -> String { - self.lc.write().unwrap().get_ui_flutter(&k) + self.lc.read().unwrap().get_ui_flutter(&k) } pub fn toggle_option(&mut self, name: String) { From a926cc0dce4c343f4aa61d4574136dd09ccd37c5 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 8 Aug 2023 18:41:38 +0800 Subject: [PATCH 341/612] opt auth svg --- flutter/assets/auth-apple.svg | 2 +- flutter/assets/auth-auth0.svg | 2 +- flutter/assets/auth-azure.svg | 2 +- flutter/assets/auth-default.svg | 15 +-------------- flutter/assets/auth-facebook.svg | 2 +- flutter/assets/auth-github.svg | 2 +- flutter/assets/auth-google.svg | 2 +- 7 files changed, 7 insertions(+), 20 deletions(-) diff --git a/flutter/assets/auth-apple.svg b/flutter/assets/auth-apple.svg index a3c2e871d..6933fbc3b 100644 --- a/flutter/assets/auth-apple.svg +++ b/flutter/assets/auth-apple.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/flutter/assets/auth-auth0.svg b/flutter/assets/auth-auth0.svg index e8c7557e7..dbe3ed236 100644 --- a/flutter/assets/auth-auth0.svg +++ b/flutter/assets/auth-auth0.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/flutter/assets/auth-azure.svg b/flutter/assets/auth-azure.svg index 0482b22e6..b7435604d 100644 --- a/flutter/assets/auth-azure.svg +++ b/flutter/assets/auth-azure.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/flutter/assets/auth-default.svg b/flutter/assets/auth-default.svg index 905c9ca9b..bf5fa9073 100644 --- a/flutter/assets/auth-default.svg +++ b/flutter/assets/auth-default.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/flutter/assets/auth-facebook.svg b/flutter/assets/auth-facebook.svg index d921a6716..f58725000 100644 --- a/flutter/assets/auth-facebook.svg +++ b/flutter/assets/auth-facebook.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/flutter/assets/auth-github.svg b/flutter/assets/auth-github.svg index 1ba71c98b..778b7b341 100644 --- a/flutter/assets/auth-github.svg +++ b/flutter/assets/auth-github.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/flutter/assets/auth-google.svg b/flutter/assets/auth-google.svg index f9ab170e6..18970f31a 100644 --- a/flutter/assets/auth-google.svg +++ b/flutter/assets/auth-google.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 7defb54f15fae012b898f246b5b3a5abe8f9316b Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 19:58:30 +0800 Subject: [PATCH 342/612] save window pos Signed-off-by: dignow --- flutter/lib/common.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 7096c1589..f5ebca3b7 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1424,17 +1424,18 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { k: kWindowPrefix + type.name, v: pos.toString()); if (type == WindowType.RemoteDesktop && windowId != null) { - await _saveSessionWindowPosition(windowId, pos); + await _saveSessionWindowPosition(type, windowId, pos); } } -Future _saveSessionWindowPosition(int windowId, LastWindowPosition pos) async { +Future _saveSessionWindowPosition( + WindowType windowType, int windowId, LastWindowPosition pos) async { final remoteList = await DesktopMultiWindow.invokeMethod( windowId, kWindowEventGetRemoteList, null); if (remoteList != null) { for (final peerId in remoteList.split(',')) { bind.sessionSetFlutterConfigByPeerId( - id: peerId, k: kWindowPrefix, v: pos.toString()); + id: peerId, k: kWindowPrefix + windowType.name, v: pos.toString()); } } } @@ -1547,7 +1548,7 @@ Future restoreWindowPosition(WindowType type, id: peerId, k: kWindowPrefix + type.name); } else { pos = await bind.sessionGetFlutterConfigByPeerId( - id: peerId, k: kWindowPrefix); + id: peerId, k: kWindowPrefix + type.name); } isRemotePeerPos = pos != null; } From 21cf2a01c74b00a0cad79831113c79706a8f6ede Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 8 Aug 2023 17:22:25 +0800 Subject: [PATCH 343/612] update idController when create new connection Signed-off-by: 21pages --- flutter/lib/common.dart | 9 +++++++++ flutter/lib/common/formatter/id_formatter.dart | 7 ++++++- flutter/lib/desktop/pages/connection_page.dart | 1 + flutter/lib/mobile/pages/connection_page.dart | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 17206b8ce..231a91800 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -11,6 +11,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_hbb/common/formatter/id_formatter.dart'; import 'package:flutter_hbb/desktop/widgets/refresh_wrapper.dart'; import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/main.dart'; @@ -1833,6 +1834,14 @@ connect( bool isRDP = false, }) async { if (id == '') return; + if (!isDesktop || desktopType == DesktopType.main) { + try { + if (Get.isRegistered()) { + final idController = Get.find(); + idController.text = formatID(id); + } + } catch (_) {} + } id = id.replaceAll(' ', ''); final oldId = id; id = await bind.mainHandleRelayId(id: id); diff --git a/flutter/lib/common/formatter/id_formatter.dart b/flutter/lib/common/formatter/id_formatter.dart index bd7f76666..c2329d53f 100644 --- a/flutter/lib/common/formatter/id_formatter.dart +++ b/flutter/lib/common/formatter/id_formatter.dart @@ -35,6 +35,11 @@ class IDTextInputFormatter extends TextInputFormatter { String formatID(String id) { String id2 = id.replaceAll(' ', ''); + String suffix = ''; + if (id2.endsWith(r'\r') || id2.endsWith(r'/r')) { + suffix = id2.substring(id2.length - 2, id2.length); + id2 = id2.substring(0, id2.length - 2); + } if (int.tryParse(id2) == null) return id; String newID = ''; if (id2.length <= 3) { @@ -47,7 +52,7 @@ String formatID(String id) { newID += " ${id2.substring(i, i + 3)}"; } } - return newID; + return newID + suffix; } String trimID(String id) { diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart index 45181c4a3..e24b9c954 100644 --- a/flutter/lib/desktop/pages/connection_page.dart +++ b/flutter/lib/desktop/pages/connection_page.dart @@ -68,6 +68,7 @@ class _ConnectionPageState extends State _idController.selection = TextSelection( baseOffset: 0, extentOffset: _idController.value.text.length); }); + Get.put(_idController); windowManager.addListener(this); } diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart index 48c56e6a5..25812e8c2 100644 --- a/flutter/lib/mobile/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -66,6 +66,7 @@ class _ConnectionPageState extends State { _idController.addListener(() { _idEmpty.value = _idController.text.isEmpty; }); + Get.put(_idController); } @override From 312c6324d204b6e144dd9c3f072d1cfa11fd995d Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 8 Aug 2023 18:06:31 +0800 Subject: [PATCH 344/612] opt delete dialog title Signed-off-by: 21pages --- flutter/lib/common/widgets/dialog.dart | 8 +++++--- flutter/lib/common/widgets/peer_card.dart | 7 ++++--- flutter/lib/common/widgets/peer_tab_page.dart | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index 05a105e68..77307418a 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -1352,7 +1352,7 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { msgBoxCommon(ffi.dialogManager, 'Custom Image Quality', content, [btnClose]); } -void deletePeerConfirmDialog(Function onSubmit) async { +void deletePeerConfirmDialog(Function onSubmit, String title) async { gFFI.dialogManager.show( (setState, close, context) { submit() async { @@ -1368,8 +1368,10 @@ void deletePeerConfirmDialog(Function onSubmit) async { Icons.delete_rounded, color: Colors.red, ), - Text(translate('Delete')).paddingOnly( - left: 10, + Expanded( + child: Text(title, overflow: TextOverflow.ellipsis).paddingOnly( + left: 10, + ), ), ], ), diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index ee3f8d830..a88bb4930 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -542,8 +542,8 @@ abstract class BasePeerCard extends StatelessWidget { _openInTabsAction(String id) async => await _openNewConnInAction(id, 'Open in New Tab', kOptionOpenInTabs); - _openInWindowsAction(String id) async => - await _openNewConnInAction(id, 'Open in New Window', kOptionOpenInWindows); + _openInWindowsAction(String id) async => await _openNewConnInAction( + id, 'Open in New Window', kOptionOpenInWindows); _openNewConnInOptAction(String id) async => mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs) @@ -636,7 +636,8 @@ abstract class BasePeerCard extends StatelessWidget { } } - deletePeerConfirmDialog(onSubmit); + deletePeerConfirmDialog(onSubmit, + '${translate('Delete')} "${peer.alias.isEmpty ? formatID(peer.id) : peer.alias}"?'); }, padding: menuPadding, dismissOnClicked: true, diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index f2de21dc7..e8cbd2619 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -312,7 +312,7 @@ class _PeerTabPageState extends State showToast(translate('Successful')); } - deletePeerConfirmDialog(onSubmit); + deletePeerConfirmDialog(onSubmit, translate('Delete')); }, child: Tooltip( message: translate('Delete'), From 6a500f2ede213dcdafd655af9e4b4361cfc7e6f8 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 21:25:44 +0800 Subject: [PATCH 345/612] oidc does not use api server cache & fix logout after changing server Signed-off-by: dignow --- .../desktop/pages/desktop_setting_page.dart | 11 +++-- src/hbbs_http/account.rs | 41 ++++++++++++------- src/ui_interface.rs | 2 +- 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 33b0a2e43..422cc8fdc 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -995,16 +995,19 @@ class _NetworkState extends State<_Network> with AutomaticKeepAliveClientMixin { return false; } } - final old = await bind.mainGetOption(key: 'custom-rendezvous-server'); - if (old.isNotEmpty && old != idServer) { - await gFFI.userModel.logOut(); - } + final oldApiServer = await bind.mainGetApiServer(); + // should set one by one await bind.mainSetOption( key: 'custom-rendezvous-server', value: idServer); await bind.mainSetOption(key: 'relay-server', value: relayServer); await bind.mainSetOption(key: 'api-server', value: apiServer); await bind.mainSetOption(key: 'key', value: key); + + final newApiServer = await bind.mainGetApiServer(); + if (oldApiServer.isNotEmpty && oldApiServer != newApiServer) { + await gFFI.userModel.logOut(); + } return true; } diff --git a/src/hbbs_http/account.rs b/src/hbbs_http/account.rs index bc078440a..2afd4b83e 100644 --- a/src/hbbs_http/account.rs +++ b/src/hbbs_http/account.rs @@ -1,8 +1,5 @@ use super::HbbHttpResponse; -use hbb_common::{ - config::{Config, LocalConfig}, - log, ResultType, -}; +use hbb_common::{config::LocalConfig, log, ResultType}; use reqwest::blocking::Client; use serde_derive::{Deserialize, Serialize}; use serde_repr::{Deserialize_repr, Serialize_repr}; @@ -14,8 +11,6 @@ use std::{ use url::Url; lazy_static::lazy_static! { - static ref API_SERVER: String = crate::get_api_server( - Config::get_option("api-server"), Config::get_option("custom-rendezvous-server")); static ref OIDC_SESSION: Arc> = Arc::new(RwLock::new(OidcSession::new())); } @@ -142,20 +137,30 @@ impl OidcSession { } } - fn auth(op: &str, id: &str, uuid: &str) -> ResultType> { + fn auth( + api_server: &str, + op: &str, + id: &str, + uuid: &str, + ) -> ResultType> { Ok(OIDC_SESSION .read() .unwrap() .client - .post(format!("{}/api/oidc/auth", *API_SERVER)) + .post(format!("{}/api/oidc/auth", api_server)) .json(&HashMap::from([("op", op), ("id", id), ("uuid", uuid)])) .send()? .try_into()?) } - fn query(code: &str, id: &str, uuid: &str) -> ResultType> { + fn query( + api_server: &str, + code: &str, + id: &str, + uuid: &str, + ) -> ResultType> { let url = reqwest::Url::parse_with_params( - &format!("{}/api/oidc/auth-query", *API_SERVER), + &format!("{}/api/oidc/auth-query", api_server), &[("code", code), ("id", id), ("uuid", uuid)], )?; Ok(OIDC_SESSION @@ -189,8 +194,8 @@ impl OidcSession { std::thread::sleep(std::time::Duration::from_secs_f32(secs)); } - fn auth_task(op: String, id: String, uuid: String, remember_me: bool) { - let auth_request_res = Self::auth(&op, &id, &uuid); + fn auth_task(api_server: String, op: String, id: String, uuid: String, remember_me: bool) { + let auth_request_res = Self::auth(&api_server, &op, &id, &uuid); log::info!("Request oidc auth result: {:?}", &auth_request_res); let code_url = match auth_request_res { Ok(HbbHttpResponse::<_>::Data(code_url)) => code_url, @@ -226,7 +231,7 @@ impl OidcSession { let begin = Instant::now(); let query_timeout = OIDC_SESSION.read().unwrap().query_timeout; while OIDC_SESSION.read().unwrap().keep_querying && begin.elapsed() < query_timeout { - match Self::query(&code_url.code, &id, &uuid) { + match Self::query(&api_server, &code_url.code, &id, &uuid) { Ok(HbbHttpResponse::<_>::Data(auth_body)) => { if remember_me { LocalConfig::set_option( @@ -289,12 +294,18 @@ impl OidcSession { } } - pub fn account_auth(op: String, id: String, uuid: String, remember_me: bool) { + pub fn account_auth( + api_server: String, + op: String, + id: String, + uuid: String, + remember_me: bool, + ) { Self::auth_cancel(); Self::wait_stop_querying(); OIDC_SESSION.write().unwrap().before_task(); std::thread::spawn(move || { - Self::auth_task(op, id, uuid, remember_me); + Self::auth_task(api_server, op, id, uuid, remember_me); OIDC_SESSION.write().unwrap().after_task(); }); } diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 2979f4ceb..39a6b264d 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -912,7 +912,7 @@ fn check_connect_status(reconnect: bool) -> mpsc::UnboundedSender { #[cfg(feature = "flutter")] pub fn account_auth(op: String, id: String, uuid: String, remember_me: bool) { - account::OidcSession::account_auth(op, id, uuid, remember_me); + account::OidcSession::account_auth(get_api_server(), op, id, uuid, remember_me); } #[cfg(feature = "flutter")] From dcad52cf52053c754f33fabe1c758dab6c188a37 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 21:34:46 +0800 Subject: [PATCH 346/612] add comments Signed-off-by: dignow --- flutter/lib/common.dart | 3 +++ src/flutter_ffi.rs | 2 ++ 2 files changed, 5 insertions(+) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index f5ebca3b7..d3d94baa2 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1543,6 +1543,9 @@ Future restoreWindowPosition(WindowType type, bool isRemotePeerPos = false; String? pos; if (type == WindowType.RemoteDesktop && windowId != null && peerId != null) { + // If the restore position is called by main window, and the peer id is not null + // then we may need to get the position by reading the peer config. + // Because the session may not be read at this time. if (desktopType == DesktopType.main) { pos = bind.mainGetPeerFlutterConfigSync( id: peerId, k: kWindowPrefix + type.name); diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index d0106ae54..4a12ee19f 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -806,6 +806,8 @@ pub fn main_get_peer_option_sync(id: String, key: String) -> SyncReturn SyncReturn(get_peer_option(id, key)) } +// Sometimes we need to get the flutter config of a peer by reading the file. +// Because the session may not be established yet. pub fn main_get_peer_flutter_config_sync(id: String, k: String) -> SyncReturn { SyncReturn(get_peer_flutter_config(id, k)) } From 7692dcd629e1c1598adeac5e100c57f8eee022b3 Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 21:37:34 +0800 Subject: [PATCH 347/612] fix logout Signed-off-by: dignow --- flutter/lib/desktop/pages/desktop_setting_page.dart | 2 +- flutter/lib/models/user_model.dart | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 422cc8fdc..591efd4c7 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -1006,7 +1006,7 @@ class _NetworkState extends State<_Network> with AutomaticKeepAliveClientMixin { final newApiServer = await bind.mainGetApiServer(); if (oldApiServer.isNotEmpty && oldApiServer != newApiServer) { - await gFFI.userModel.logOut(); + await gFFI.userModel.logOut(apiServer: oldApiServer); } return true; } diff --git a/flutter/lib/models/user_model.dart b/flutter/lib/models/user_model.dart index ebed47587..003577ba0 100644 --- a/flutter/lib/models/user_model.dart +++ b/flutter/lib/models/user_model.dart @@ -101,10 +101,10 @@ class UserModel { await Future.wait([gFFI.abModel.pullAb(), gFFI.groupModel.pull()]); } - Future logOut() async { + Future logOut({String? apiServer}) async { final tag = gFFI.dialogManager.showLoading(translate('Waiting')); try { - final url = await bind.mainGetApiServer(); + final url = apiServer ?? await bind.mainGetApiServer(); final authHeaders = getHttpHeaders(); authHeaders['Content-Type'] = "application/json"; await http From e830a59c2a449316e610263f906a3a9b567f2148 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 9 Aug 2023 07:42:22 +0800 Subject: [PATCH 348/612] skip PeerConfig saving when not receiving peerinfo to keep peercard order Signed-off-by: 21pages --- src/client.rs | 4 ++++ src/client/io_loop.rs | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/client.rs b/src/client.rs index dfd73455c..9c039464c 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1209,6 +1209,10 @@ impl LoginConfigHandler { /// * `k` - key of option /// * `v` - value of option pub fn save_ui_flutter(&mut self, k: String, v: String) { + if self.version == 0 && k == "wm_" { + log::info!("skip saving {k}"); + return; + } let mut config = self.load_config(); config.ui_flutter.insert(k, v); self.save_config(config); diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index c24d0f54c..f8cdb3ea0 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -850,6 +850,11 @@ impl Remote { } pub async fn sync_jobs_status_to_local(&mut self) -> bool { + let peer_version = self.handler.lc.read().unwrap().version; + if peer_version == 0 { + log::info!("skip saving job status"); + return false; + } log::info!("sync transfer job status"); let mut config: PeerConfig = self.handler.load_config(); let mut transfer_metas = TransferSerde::default(); From 3ecf0cc68551cbf8347124bbb2ed8ef0326c2feb Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 9 Aug 2023 12:29:53 +0800 Subject: [PATCH 349/612] fix session render texture instance Signed-off-by: dignow --- flutter/lib/desktop/pages/remote_page.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 35d20a263..b39b1a927 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -117,9 +117,9 @@ class _RemotePageState extends State } // Register texture. if (mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs)) { - _renderTexture = renderTexture; - } else { _renderTexture = RenderTexture(); + } else { + _renderTexture = renderTexture; } _renderTexture.create(sessionId); From 9a7a6004070587178bb8e268268f08917c14588a Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 9 Aug 2023 12:46:12 +0800 Subject: [PATCH 350/612] remove global render texture instance Signed-off-by: dignow --- flutter/lib/desktop/pages/remote_page.dart | 6 +----- flutter/lib/desktop/widgets/tabbar_widget.dart | 2 -- flutter/lib/models/desktop_render_texture.dart | 5 ----- 3 files changed, 1 insertion(+), 12 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index b39b1a927..28212e4ca 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -116,11 +116,7 @@ class _RemotePageState extends State Wakelock.enable(); } // Register texture. - if (mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs)) { - _renderTexture = RenderTexture(); - } else { - _renderTexture = renderTexture; - } + _renderTexture = RenderTexture(); _renderTexture.create(sessionId); _ffi.ffiModel.updateEventListener(sessionId, widget.id); diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 2a7d1452e..2645ea0f2 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -582,8 +582,6 @@ class WindowActionPanelState extends State } await windowManager.hide(); } else { - renderTexture.destroy(); - // it's safe to hide the subwindow final controller = WindowController.fromWindowId(kWindowId!); if (Platform.isMacOS && await controller.isFullScreen()) { diff --git a/flutter/lib/models/desktop_render_texture.dart b/flutter/lib/models/desktop_render_texture.dart index 37d387eb2..f59373623 100644 --- a/flutter/lib/models/desktop_render_texture.dart +++ b/flutter/lib/models/desktop_render_texture.dart @@ -38,9 +38,4 @@ class RenderTexture { _textureKey = -1; } } - - static final RenderTexture instance = RenderTexture(); } - -// Global instance for separate texture -final renderTexture = RenderTexture.instance; From fbde794d39a153430e53c975f6859d2ca4d77ba2 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 9 Aug 2023 13:54:09 +0800 Subject: [PATCH 351/612] add missing Get.delete, android can update id controller Signed-off-by: 21pages --- flutter/lib/desktop/pages/connection_page.dart | 3 +++ flutter/lib/mobile/pages/connection_page.dart | 3 +++ 2 files changed, 6 insertions(+) diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart index e24b9c954..de87317b3 100644 --- a/flutter/lib/desktop/pages/connection_page.dart +++ b/flutter/lib/desktop/pages/connection_page.dart @@ -77,6 +77,9 @@ class _ConnectionPageState extends State _idController.dispose(); _updateTimer?.cancel(); windowManager.removeListener(this); + if (Get.isRegistered()) { + Get.delete(); + } super.dispose(); } diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart index 25812e8c2..c99462166 100644 --- a/flutter/lib/mobile/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -196,6 +196,9 @@ class _ConnectionPageState extends State { @override void dispose() { _idController.dispose(); + if (Get.isRegistered()) { + Get.delete(); + } super.dispose(); } } From 52bffd4030f74e0869b01f04476f4cf0483ee989 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 9 Aug 2023 14:59:52 +0800 Subject: [PATCH 352/612] fix waiting for image, should not await dialogManager.show Signed-off-by: 21pages --- flutter/lib/models/model.dart | 27 +++++++++++++-------------- src/flutter.rs | 8 ++++++++ src/flutter_ffi.rs | 6 ++++++ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 9fa73e1b7..e54bc0d07 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -425,19 +425,18 @@ class FfiModel with ChangeNotifier { closeConnection(); } - Future.delayed(Duration.zero, () async { - await dialogManager.show( - (setState, close, context) => CustomAlertDialog( - title: null, - content: SelectionArea(child: msgboxContent(type, title, text)), - actions: [ - dialogButton("Cancel", onPressed: onClose, isOutline: true) - ], - onCancel: onClose), - tag: '$sessionId-waiting-for-image', - ); - _waitForImageDialogShow[sessionId] = true; - }); + dialogManager.show( + (setState, close, context) => CustomAlertDialog( + title: null, + content: SelectionArea(child: msgboxContent(type, title, text)), + actions: [ + dialogButton("Cancel", onPressed: onClose, isOutline: true) + ], + onCancel: onClose), + tag: '$sessionId-waiting-for-image', + ); + _waitForImageDialogShow[sessionId] = true; + bind.sessionOnWaitingForImageDialogShow(sessionId: sessionId); } _updateSessionWidthHeight(SessionID sessionId) { @@ -1902,7 +1901,7 @@ Future initializeCursorAndCanvas(FFI ffi) async { } clearWaitingForImage(OverlayDialogManager? dialogManager, SessionID sessionId) { - final durations = [100, 500, 1000, 2000]; + final durations = [0, 100, 500, 1000, 2000]; for (var duration in durations) { Future.delayed(Duration(milliseconds: duration), () { dialogManager?.dismissByTag('$sessionId-waiting-for-image'); diff --git a/src/flutter.rs b/src/flutter.rs index 88290897d..52190ce2e 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -345,6 +345,14 @@ impl FlutterHandler { *self.notify_rendered.write().unwrap() = false; self.renderer.write().unwrap().set_size(width, height); } + + pub fn on_waiting_for_image_dialog_show(&self) { + #[cfg(any(feature = "flutter_texture_render"))] + { + *self.notify_rendered.write().unwrap() = false; + } + // rgba array render will notify every frame + } } impl InvokeUiSession for FlutterHandler { diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 4a12ee19f..122af0c2b 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1266,6 +1266,12 @@ pub fn session_change_prefer_codec(session_id: SessionID) { } } +pub fn session_on_waiting_for_image_dialog_show(session_id: SessionID) { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + session.ui_handler.on_waiting_for_image_dialog_show(); + } +} + pub fn main_set_home_dir(_home: String) { #[cfg(any(target_os = "android", target_os = "ios"))] { From de85c9448aa3659fa0724af123ef4eea8de39d60 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 9 Aug 2023 15:32:51 +0800 Subject: [PATCH 353/612] remove extra dismiss waiting for image Signed-off-by: 21pages --- flutter/lib/models/model.dart | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index e54bc0d07..9c4ff281c 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1901,10 +1901,5 @@ Future initializeCursorAndCanvas(FFI ffi) async { } clearWaitingForImage(OverlayDialogManager? dialogManager, SessionID sessionId) { - final durations = [0, 100, 500, 1000, 2000]; - for (var duration in durations) { - Future.delayed(Duration(milliseconds: duration), () { - dialogManager?.dismissByTag('$sessionId-waiting-for-image'); - }); - } + dialogManager?.dismissByTag('$sessionId-waiting-for-image'); } From 0d16f54c2f2e7b7af9a69cbc969b83872aa4c9a5 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 9 Aug 2023 17:17:18 +0800 Subject: [PATCH 354/612] fix move tab to new window Signed-off-by: dignow --- flutter/lib/utils/multi_window_manager.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 187b03161..4bd8a46e9 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -50,7 +50,7 @@ class RustDeskMultiWindowManager { 'session_id': sessionId, }; await _newSession( - true, + false, WindowType.RemoteDesktop, kWindowEventNewRemoteDesktop, peerId, From 28cbe0f4641e53789ad8ef4935ddea0c3285c147 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 9 Aug 2023 18:37:09 +0800 Subject: [PATCH 355/612] fix, set window position before show when reusing window Signed-off-by: dignow --- flutter/lib/common.dart | 2 ++ flutter/lib/utils/multi_window_manager.dart | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 570b134c5..e518a56e0 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1543,6 +1543,8 @@ Future restoreWindowPosition(WindowType type, bool isRemotePeerPos = false; String? pos; + // No need to check mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs) + // Though "open in tabs" is true and the new window restore peer position, it's ok. if (type == WindowType.RemoteDesktop && windowId != null && peerId != null) { // If the restore position is called by main window, and the peer id is not null // then we may need to get the position by reading the peer config. diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 4bd8a46e9..3f7d995b7 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -98,9 +98,9 @@ class RustDeskMultiWindowManager { if (_inactiveWindows.isNotEmpty) { for (final windowId in windows) { if (_inactiveWindows.contains(windowId)) { - await DesktopMultiWindow.invokeMethod(windowId, methodName, msg); await restoreWindowPosition(type, windowId: windowId, peerId: remoteId); + await DesktopMultiWindow.invokeMethod(windowId, methodName, msg); WindowController.fromWindowId(windowId).show(); registerActiveWindow(windowId); return; From 6b17644d98ab1337088ee1ceb9fe2668d3362fa4 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Wed, 9 Aug 2023 17:34:26 +0530 Subject: [PATCH 356/612] Revert "add delay in refresh" This reverts commit 897dc1c2ba7ca2c03b6d6d11cbc92de624a76bf4. --- src/platform/linux.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index 4162b8a26..c8609db20 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -1089,8 +1089,6 @@ mod desktop { return; } - // wait 2 seconds before getting seat0 values; was required for lightdm to get correct values - std::thread::sleep(Duration::from_secs(2)); let seat0_values = get_values_of_seat0(&[0, 1, 2]); if seat0_values[0].is_empty() { *self = Self::default(); From 0d2c46a893741479434092cbf779287b48efed48 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Wed, 9 Aug 2023 17:35:02 +0530 Subject: [PATCH 357/612] Revert "skip env tries for lightdm login screen" This reverts commit d28d3baf056f09509fcc0813295ac6024e762806. --- src/platform/linux.rs | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index c8609db20..cda26ea10 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -919,19 +919,13 @@ mod desktop { } fn get_display(&mut self) { - // skip env tries for lightdm login screen - if self.username != "lightdm"{ - let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; - for display_env in display_envs { - self.display = get_env_tries("DISPLAY", &self.uid, display_env, 10); - if !self.display.is_empty() { - break; - } + let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; + for diplay_env in display_envs { + self.display = get_env_tries("DISPLAY", &self.uid, diplay_env, 20); + if !self.display.is_empty() { + break; } } - else { - self.display = String::new(); - } if self.display.is_empty() { self.display = Self::get_display_by_user(&self.username); @@ -988,19 +982,13 @@ mod desktop { fn get_xauth(&mut self) { // try by direct access to window manager process by name - // skip env tries for lightdm login screen - if self.username != "lightdm"{ - let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; - for display_env in display_envs { - self.xauth = get_env_tries("XAUTHORITY", &self.uid, display_env, 20); - if !self.xauth.is_empty() { - break; - } + let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; + for diplay_env in display_envs { + self.xauth = get_env_tries("XAUTHORITY", &self.uid, diplay_env, 20); + if !self.xauth.is_empty() { + break; } } - else { - self.xauth = String::new(); - } // get from Xorg process, parameter and environment if self.xauth.is_empty() { From ebfebdffa7a23c66f7aa508f9fb02e0dedb7acc5 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Wed, 9 Aug 2023 17:51:23 +0530 Subject: [PATCH 358/612] add check for seat0 active user Signed-off-by: Sahil Yeole --- src/platform/linux.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index cda26ea10..ab8d53732 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -1073,11 +1073,13 @@ mod desktop { } pub fn refresh(&mut self) { + let seat0_values = get_values_of_seat0(&[0, 1, 2]); if !self.sid.is_empty() && is_active(&self.sid) { - return; + if self.sid == seat0_values[0] { + return; + } } - let seat0_values = get_values_of_seat0(&[0, 1, 2]); if seat0_values[0].is_empty() { *self = Self::default(); self.is_rustdesk_subprocess = false; From e6dd082b0f2fde58e9349148c964e6184eb67b5b Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 9 Aug 2023 20:27:52 +0800 Subject: [PATCH 359/612] fix, login device info Signed-off-by: dignow --- flutter/lib/common/hbbs/hbbs.dart | 21 +++++++++------------ src/flutter_ffi.rs | 4 ++-- src/hbbs_http/account.rs | 7 ++++++- src/plugin/native_handlers/ui.rs | 22 ++++++++-------------- src/ui_interface.rs | 24 ++++++++++++++++++++++++ 5 files changed, 49 insertions(+), 29 deletions(-) diff --git a/flutter/lib/common/hbbs/hbbs.dart b/flutter/lib/common/hbbs/hbbs.dart index d102d9f02..8e5c2d02a 100644 --- a/flutter/lib/common/hbbs/hbbs.dart +++ b/flutter/lib/common/hbbs/hbbs.dart @@ -1,4 +1,5 @@ -import 'dart:io'; +import 'dart:convert'; +import 'package:flutter/material.dart'; import 'package:flutter_hbb/models/peer_model.dart'; @@ -70,16 +71,6 @@ class PeerPayload { } } -class DeviceInfo { - static Map toJson() { - final Map data = {}; - data['os'] = Platform.operatingSystem; - data['type'] = "client"; - data['name'] = bind.mainGetHostname(); - return data; - } -} - class LoginRequest { String? username; String? password; @@ -88,7 +79,6 @@ class LoginRequest { bool? autoLogin; String? type; String? verificationCode; - Map deviceInfo = DeviceInfo.toJson(); LoginRequest( {this.username, @@ -110,6 +100,13 @@ class LoginRequest { if (verificationCode != null) { data['verificationCode'] = verificationCode; } + + Map deviceInfo = {}; + try { + deviceInfo = jsonDecode(bind.mainGetLoginDeviceInfo()); + } catch (e) { + debugPrint('Failed to decode get device info: $e'); + } data['deviceInfo'] = deviceInfo; return data; } diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 122af0c2b..ef4c9e2ba 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -637,8 +637,8 @@ pub fn main_get_default_sound_input() -> Option { None } -pub fn main_get_hostname() -> SyncReturn { - SyncReturn(get_hostname()) +pub fn main_get_login_device_info() -> SyncReturn { + SyncReturn(get_login_device_info_json()) } pub fn main_change_id(new_id: String) { diff --git a/src/hbbs_http/account.rs b/src/hbbs_http/account.rs index 2afd4b83e..e76dda76c 100644 --- a/src/hbbs_http/account.rs +++ b/src/hbbs_http/account.rs @@ -148,7 +148,12 @@ impl OidcSession { .unwrap() .client .post(format!("{}/api/oidc/auth", api_server)) - .json(&HashMap::from([("op", op), ("id", id), ("uuid", uuid)])) + .json(&serde_json::json!({ + "op": op, + "id": id, + "uuid": uuid, + "deviceInfo": crate::ui_interface::get_login_device_info(), + })) .send()? .try_into()?) } diff --git a/src/plugin/native_handlers/ui.rs b/src/plugin/native_handlers/ui.rs index d4ee91299..aec7facd8 100644 --- a/src/plugin/native_handlers/ui.rs +++ b/src/plugin/native_handlers/ui.rs @@ -2,10 +2,7 @@ use std::{collections::HashMap, ffi::c_void, os::raw::c_int}; use serde_json::json; -use crate::{ - define_method_prefix, - flutter::{APP_TYPE_MAIN}, -}; +use crate::{define_method_prefix, flutter::APP_TYPE_MAIN}; use super::PluginNativeHandler; @@ -26,7 +23,8 @@ pub struct PluginNativeUIHandler; /// ``` /// [Safety] /// Please make sure the callback u provided is VALID, or memory or calling issues may occur to cause the program crash! -pub type OnUIReturnCallback = extern "C" fn(return_code: c_int, data: *const c_void, data_len: u64, user_data: *const c_void); +pub type OnUIReturnCallback = + extern "C" fn(return_code: c_int, data: *const c_void, data_len: u64, user_data: *const c_void); impl PluginNativeHandler for PluginNativeUIHandler { define_method_prefix!("ui_"); @@ -41,9 +39,7 @@ impl PluginNativeHandler for PluginNativeUIHandler { if let Some(cb) = data.get("cb") { if let Some(cb) = cb.as_u64() { let user_data = match data.get("user_data") { - Some(user_data) => { - user_data.as_u64().unwrap_or(0) - }, + Some(user_data) => user_data.as_u64().unwrap_or(0), None => 0, }; self.select_peers_async(cb, user_data); @@ -68,9 +64,7 @@ impl PluginNativeHandler for PluginNativeUIHandler { if let Some(on_tap_cb) = data.get("on_tap_cb") { if let Some(on_tap_cb) = on_tap_cb.as_u64() { let user_data = match data.get("user_data") { - Some(user_data) => { - user_data.as_u64().unwrap_or(0) - }, + Some(user_data) => user_data.as_u64().unwrap_or(0), None => 0, }; self.register_ui_entry(title, on_tap_cb, user_data); @@ -109,10 +103,10 @@ impl PluginNativeUIHandler { /// "user_data": 0 // An opaque pointer value passed to the callback. /// } /// ``` - /// - /// [Arguments] + /// + /// [Arguments] /// @param cb: the function address with type [OnUIReturnCallback]. - /// @param user_data: the function will be called with this value. + /// @param user_data: the function will be called with this value. fn select_peers_async(&self, cb: u64, user_data: u64) { let mut param = HashMap::new(); param.insert("name", json!("native_ui")); diff --git a/src/ui_interface.rs b/src/ui_interface.rs index dbd673880..2b9097cc5 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -44,6 +44,13 @@ pub struct UiStatus { pub id: String, } +#[derive(Debug, Clone, Serialize)] +pub struct LoginDeviceInfo { + pub os: String, + pub r#type: String, + pub name: String, +} + lazy_static::lazy_static! { static ref UI_STATUS : Arc> = Arc::new(Mutex::new(UiStatus{ status_num: 0, @@ -56,6 +63,13 @@ lazy_static::lazy_static! { })); static ref ASYNC_JOB_STATUS : Arc> = Default::default(); static ref TEMPORARY_PASSWD : Arc> = Arc::new(Mutex::new("".to_owned())); + static ref LOGIN_DEVICE_INFO: Arc = Arc::new(LoginDeviceInfo{ + // std::env::consts::OS is better than whoami::platform() here. + os: std::env::consts::OS.to_owned(), + r#type: "client".to_owned(), + name: crate::common::hostname(), + }); + static ref LOGIN_DEVICE_INFO_JSON: Arc = Arc::new(serde_json::to_string(&**LOGIN_DEVICE_INFO).unwrap_or_default()); } #[cfg(not(any(target_os = "android", target_os = "ios")))] @@ -959,6 +973,16 @@ pub fn get_hostname() -> String { crate::common::hostname() } +#[inline] +pub fn get_login_device_info() -> LoginDeviceInfo { + (**LOGIN_DEVICE_INFO).clone() +} + +#[inline] +pub fn get_login_device_info_json() -> String { + (**LOGIN_DEVICE_INFO_JSON).clone() +} + // notice: avoiding create ipc connection repeatedly, // because windows named pipe has serious memory leak issue. #[cfg(not(any(target_os = "android", target_os = "ios")))] From 9a6c38f0e833fbfe3ddddd9f37d7965a0c1eae07 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 9 Aug 2023 21:25:56 +0800 Subject: [PATCH 360/612] remove global login device info Signed-off-by: dignow --- src/ui_interface.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 2b9097cc5..b5f0cdb18 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -63,13 +63,6 @@ lazy_static::lazy_static! { })); static ref ASYNC_JOB_STATUS : Arc> = Default::default(); static ref TEMPORARY_PASSWD : Arc> = Arc::new(Mutex::new("".to_owned())); - static ref LOGIN_DEVICE_INFO: Arc = Arc::new(LoginDeviceInfo{ - // std::env::consts::OS is better than whoami::platform() here. - os: std::env::consts::OS.to_owned(), - r#type: "client".to_owned(), - name: crate::common::hostname(), - }); - static ref LOGIN_DEVICE_INFO_JSON: Arc = Arc::new(serde_json::to_string(&**LOGIN_DEVICE_INFO).unwrap_or_default()); } #[cfg(not(any(target_os = "android", target_os = "ios")))] @@ -975,12 +968,17 @@ pub fn get_hostname() -> String { #[inline] pub fn get_login_device_info() -> LoginDeviceInfo { - (**LOGIN_DEVICE_INFO).clone() + LoginDeviceInfo { + // std::env::consts::OS is better than whoami::platform() here. + os: std::env::consts::OS.to_owned(), + r#type: "client".to_owned(), + name: crate::common::hostname(), + } } #[inline] pub fn get_login_device_info_json() -> String { - (**LOGIN_DEVICE_INFO_JSON).clone() + serde_json::to_string(&get_login_device_info()).unwrap_or_default() } // notice: avoiding create ipc connection repeatedly, From 723a1897b9f44a55664140477e938d41b4ef4a60 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 9 Aug 2023 21:28:12 +0800 Subject: [PATCH 361/612] revert get_env_tries tries back to 10, https://github.com/rustdesk/rustdesk/pull/5276#issuecomment-1671288661 --- src/platform/linux.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index ab8d53732..c09d26008 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -921,7 +921,7 @@ mod desktop { fn get_display(&mut self) { let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; for diplay_env in display_envs { - self.display = get_env_tries("DISPLAY", &self.uid, diplay_env, 20); + self.display = get_env_tries("DISPLAY", &self.uid, diplay_env, 10); if !self.display.is_empty() { break; } @@ -984,7 +984,7 @@ mod desktop { // try by direct access to window manager process by name let display_envs = vec![GNOME_SESSION_BINARY, XFCE4_PANEL, SDDM_GREETER, PLASMA_X11]; for diplay_env in display_envs { - self.xauth = get_env_tries("XAUTHORITY", &self.uid, diplay_env, 20); + self.xauth = get_env_tries("XAUTHORITY", &self.uid, diplay_env, 10); if !self.xauth.is_empty() { break; } From 9d5027b9321bb5e49c541b530ec07f5b149e252a Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Thu, 10 Aug 2023 00:28:39 +0800 Subject: [PATCH 362/612] Update and improve tw translation --- src/lang/tw.rs | 175 +++++++++++++++++++++++++------------------------ 1 file changed, 89 insertions(+), 86 deletions(-) diff --git a/src/lang/tw.rs b/src/lang/tw.rs index a86613651..80e4f31c2 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -28,7 +28,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Enable File Transfer", "啟用檔案傳輸"), ("Enable TCP Tunneling", "啟用 TCP 通道"), ("IP Whitelisting", "IP 白名單"), - ("ID/Relay Server", "ID / 轉送伺服器"), + ("ID/Relay Server", "ID / 中繼伺服器"), ("Import Server Config", "匯入伺服器設定"), ("Export Server Config", "匯出伺服器設定"), ("Import server configuration successfully", "匯入伺服器設定成功"), @@ -40,14 +40,14 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Your new ID", "您的新 ID"), ("length %min% to %max%", "長度在 %min% 與 %max% 之間"), ("starts with a letter", "以字母開頭"), - ("allowed characters", "使用允許的字元"), + ("allowed characters", "允許的字元"), ("id_change_tip", "僅能使用以下字元:a-z、A-Z、0-9、_ (底線)。首字元必須為 a-z 或 A-Z。長度介於 6 到 16 之間。"), ("Website", "網站"), ("About", "關於"), ("Slogan_tip", "在這個混沌的世界中用心製作!"), ("Privacy Statement", "隱私權聲明"), ("Mute", "靜音"), - ("Build Date", "構建日期"), + ("Build Date", "建構日期"), ("Version", "版本"), ("Home", "首頁"), ("Audio Input", "音訊輸入"), @@ -55,12 +55,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Hardware Codec", "硬體編解碼器"), ("Adaptive bitrate", "自適應位元速率"), ("ID Server", "ID 伺服器"), - ("Relay Server", "轉送伺服器"), + ("Relay Server", "中繼伺服器"), ("API Server", "API 伺服器"), ("invalid_http", "開頭必須為 http:// 或 https://"), ("Invalid IP", "IP 無效"), ("Invalid format", "格式無效"), - ("server_not_support", "伺服器暫不支持"), + ("server_not_support", "伺服器尚未支援"), ("Not available", "無法使用"), ("Too frequent", "修改過於頻繁,請稍後再試。"), ("Cancel", "取消"), @@ -139,39 +139,39 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Remote desktop is offline", "遠端桌面已離線"), ("Key mismatch", "金鑰不符"), ("Timeout", "逾時"), - ("Failed to connect to relay server", "無法連線到轉送伺服器"), + ("Failed to connect to relay server", "無法連線到中繼伺服器"), ("Failed to connect via rendezvous server", "無法透過 rendezvous 伺服器連線"), - ("Failed to connect via relay server", "無法透過轉送伺服器連線"), + ("Failed to connect via relay server", "無法透過中繼伺服器連線"), ("Failed to make direct connection to remote desktop", "無法直接連線到遠端桌面"), ("Set Password", "設定密碼"), ("OS Password", "作業系統密碼"), - ("install_tip", "UAC 會導致 RustDesk 在某些情況下無法正常以遠端電腦執行。若要避開 UAC,請點擊下方按鈕將 RustDesk 安裝到系統中。"), - ("Click to upgrade", "點擊以升級"), - ("Click to download", "點擊以下載"), - ("Click to update", "點擊以更新"), + ("install_tip", "UAC 會導致 RustDesk 在某些情況下無法正常作為遠端端點運作。若要避開 UAC,請點選下方按鈕將 RustDesk 安裝到系統中。"), + ("Click to upgrade", "點選以升級"), + ("Click to download", "點選以下載"), + ("Click to update", "點選以更新"), ("Configure", "設定"), - ("config_acc", "您需要授予 RustDesk「協助工具」權限才能存取遠端電腦。"), - ("config_screen", "您需要授予 RustDesk「畫面錄製」權限才能存取遠端電腦。"), + ("config_acc", "為了遠端控制您的桌面,您需要授予 RustDesk「協助工具」權限。"), + ("config_screen", "為了遠端存取您的桌面,您需要授予 RustDesk「螢幕錄製」權限。"), ("Installing ...", "正在安裝 ..."), ("Install", "安裝"), ("Installation", "安裝"), ("Installation Path", "安裝路徑"), ("Create start menu shortcuts", "新增開始功能表捷徑"), ("Create desktop icon", "新增桌面捷徑"), - ("agreement_tip", "開始安裝即表示接受許可協議"), + ("agreement_tip", "開始安裝即表示您接受授權條款。"), ("Accept and Install", "接受並安裝"), - ("End-user license agreement", "使用者授權合約"), + ("End-user license agreement", "終端使用者授權合約"), ("Generating ...", "正在產生 ..."), ("Your installation is lower version.", "您安裝的版本過舊。"), - ("not_close_tcp_tip", "使用通道時請不要關閉此視窗"), + ("not_close_tcp_tip", "在使用通道時請不要關閉此視窗"), ("Listening ...", "正在等待通道連線 ..."), ("Remote Host", "遠端主機"), - ("Remote Port", "遠端連線端口"), + ("Remote Port", "遠端連接埠"), ("Action", "操作"), ("Add", "新增"), - ("Local Port", "本機連線端口"), + ("Local Port", "本機連接埠"), ("Local Address", "本機地址"), - ("Change Local Port", "修改本機連線端口"), + ("Change Local Port", "修改本機連接埠"), ("setup_server_tip", "若您需要更快的連線速度,可以選擇自行建立伺服器"), ("Too short, at least 6 characters.", "過短,至少需要 6 個字元。"), ("The confirmation is not identical.", "兩次輸入不相符"), @@ -185,15 +185,15 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Allow file copy and paste", "允許檔案複製和貼上"), ("Connected", "已連線"), ("Direct and encrypted connection", "加密直接連線"), - ("Relayed and encrypted connection", "加密轉送連線"), - ("Direct and unencrypted connection", "未加密直接連線"), - ("Relayed and unencrypted connection", "未加密轉送連線"), + ("Relayed and encrypted connection", "加密中繼連線"), + ("Direct and unencrypted connection", "直接且未加密的連線"), + ("Relayed and unencrypted connection", "中繼且未加密的連線"), ("Enter Remote ID", "輸入遠端 ID"), ("Enter your password", "輸入您的密碼"), ("Logging in...", "正在登入 ..."), ("Enable RDP session sharing", "啟用 RDP 工作階段共享"), - ("Auto Login", "自動登入 (鎖定將在設定關閉後套用)"), - ("Enable Direct IP Access", "允許 IP 直接存取"), + ("Auto Login", "自動登入 (只在您設定「工作階段結束後鎖定」時有效)"), + ("Enable Direct IP Access", "啟用 IP 直接存取"), ("Rename", "重新命名"), ("Space", "空白"), ("Create Desktop Shortcut", "新增桌面捷徑"), @@ -204,50 +204,50 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "警告"), ("Login screen using Wayland is not supported", "不支援使用 Wayland 的登入畫面"), ("Reboot required", "需要重新啟動"), - ("Unsupported display server", "不支援顯示伺服器"), - ("x11 expected", "預期 x11"), - ("Port", "端口"), + ("Unsupported display server", "不支援的顯示伺服器"), + ("x11 expected", "預期為 x11"), + ("Port", "連接埠"), ("Settings", "設定"), ("Username", "使用者名稱"), - ("Invalid port", "連線端口無效"), + ("Invalid port", "連接埠無效"), ("Closed manually by the peer", "對方關閉了工作階段"), ("Enable remote configuration modification", "允許遠端使用者更改設定"), ("Run without install", "跳過安裝直接執行"), ("Connect via relay", "中繼連線"), - ("Always connect via relay", "一律透過轉送連線"), - ("whitelist_tip", "只有白名單中的 IP 可以存取"), + ("Always connect via relay", "一律透過中繼連線"), + ("whitelist_tip", "只有白名單上的 IP 可以存取"), ("Login", "登入"), ("Verify", "驗證"), ("Remember me", "記住我"), ("Trust this device", "信任此裝置"), ("Verification code", "驗證碼"), - ("verification_tip", "已向註冊電子信箱發送了登入驗證碼,請輸入驗證碼以繼續登入"), + ("verification_tip", "驗證碼已發送到註冊的電子郵件地址,請輸入驗證碼以繼續登入。"), ("Logout", "登出"), ("Tags", "標籤"), ("Search ID", "搜尋 ID"), - ("whitelist_sep", "使用逗號、分號、空白,或是換行來分隔"), + ("whitelist_sep", "使用逗號、分號、空格,或是換行來分隔"), ("Add ID", "新增 ID"), ("Add Tag", "新增標籤"), ("Unselect all tags", "取消選取所有標籤"), ("Network error", "網路錯誤"), ("Username missed", "缺少使用者名稱"), ("Password missed", "缺少密碼"), - ("Wrong credentials", "提供的登入資訊有誤"), + ("Wrong credentials", "登入資訊錯誤"), ("The verification code is incorrect or has expired", "驗證碼錯誤或已過期"), ("Edit Tag", "編輯標籤"), - ("Unremember Password", "忘掉密碼"), + ("Unremember Password", "忘記密碼"), ("Favorites", "我的最愛"), - ("Add to Favorites", "新增到我的最愛"), - ("Remove from Favorites", "從我的最愛中刪除"), + ("Add to Favorites", "加入我的最愛"), + ("Remove from Favorites", "從我的最愛中移除"), ("Empty", "空空如也"), ("Invalid folder name", "資料夾名稱無效"), - ("Socks5 Proxy", "Socks5 代理"), + ("Socks5 Proxy", "Socks5 代理伺服器"), ("Hostname", "主機名稱"), ("Discovered", "已探索"), - ("install_daemon_tip", "為了能夠開機時自動啟動,請先安裝系統服務。"), + ("install_daemon_tip", "若要在開機時啟動,您需要安裝系統服務。"), ("Remote ID", "遠端 ID"), ("Paste", "貼上"), - ("Paste here?", "貼上到這裡?"), + ("Paste here?", "在此貼上?"), ("Are you sure to close the connection?", "您確定要關閉連線嗎?"), ("Download new version", "下載新版本"), ("Touch mode", "觸控模式"), @@ -258,8 +258,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Two-Finger Tap", "雙指輕觸"), ("Right Mouse", "滑鼠右鍵"), ("One-Finger Move", "單指移動"), - ("Double Tap & Move", "雙擊並移動"), - ("Mouse Drag", "滑鼠選中拖動"), + ("Double Tap & Move", "點兩下並移動"), + ("Mouse Drag", "滑鼠拖曳"), ("Three-Finger vertically", "三指垂直滑動"), ("Mouse Wheel", "滑鼠滾輪"), ("Two-Finger Move", "雙指移動"), @@ -270,8 +270,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No permission of file transfer", "沒有檔案傳輸權限"), ("Note", "備註"), ("Connection", "連線"), - ("Share Screen", "共享螢幕畫面"), - ("Chat", "聊天訊息"), + ("Share Screen", "螢幕分享"), + ("Chat", "聊天"), ("Total", "總計"), ("items", "個項目"), ("Selected", "已選擇"), @@ -282,39 +282,42 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Screen Connection", "畫面連線"), ("Do you accept?", "是否接受?"), ("Open System Setting", "開啟系統設定"), - ("How to get Android input permission?", "如何獲取 Android 的輸入權限?"), - ("android_input_permission_tip1", "取得輸入權限後可以讓遠端裝置透過滑鼠控制此 Android 裝置"), - ("android_input_permission_tip2", "請在接下來的系統設定頁面中,找到並進入「已安裝的服務」頁面,並將「RustDesk Input」服務開啟"), - ("android_new_connection_tip", "收到新的連線控制請求,對方想要控制您目前的裝置"), - ("android_service_will_start_tip", "開啟畫面錄製權限將自動開啟服務,允許其他裝置向此裝置請求建立連線。"), + ("How to get Android input permission?", "如何取得 Android 的輸入權限?"), + ("android_input_permission_tip1", "為了讓遠端裝置能夠透過滑鼠或觸控控制您的 Android 裝置,您需要允許 RustDesk 使用「輔助功能」服務。"), + ("android_input_permission_tip2", "請前往下一個系統設定頁面,找到並進入「已安裝的服務」,開啟「RustDesk Input」服務。"), + ("android_new_connection_tip", "收到新的控制請求,對方想要控制您目前的裝置。"), + ("android_service_will_start_tip", "開啟「畫面錄製」將自動啟動服務,允許其他裝置向您的裝置請求連線。"), ("android_stop_service_tip", "關閉服務將自動關閉所有已建立的連線。"), ("android_version_audio_tip", "目前的 Android 版本不支援音訊錄製,請升級到 Android 10 或以上版本。"), - ("android_start_service_tip", "點擊「啟動服務」或啟用「螢幕錄製」權限,以啟動螢幕共享服務。"), + ("android_start_service_tip", "點選「啟動服務」或啟用「螢幕錄製」權限以啟動螢幕分享服務。"), ("android_permission_may_not_change_tip", "對於已經建立的連線,權限可能不會立即發生改變,除非重新建立連線。"), ("Account", "帳號"), ("Overwrite", "取代"), ("This file exists, skip or overwrite this file?", "此檔案/資料夾已存在,要略過或是取代此檔案嗎?"), ("Quit", "退出"), + ("android_version_audio_tip", "目前的 Android 版本不支援音訊錄製,請升級至 Android 10 或更新的版本。"), + ("android_start_service_tip", "點選「啟動服務」或啟用「畫面錄製」權限以啟動螢幕分享服務。"), + ("android_permission_may_not_change_tip", "已建立連線的權限可能不會立即改變,除非重新連線。"), ("doc_mac_permission", "https://rustdesk.com/docs/zh-tw/manual/mac/#啟用權限"), - ("Help", "幫助"), + ("Help", "說明"), ("Failed", "失敗"), ("Succeeded", "成功"), - ("Someone turns on privacy mode, exit", "其他使用者開啟隱私模式,退出"), + ("Someone turns on privacy mode, exit", "有人開啟了隱私模式,退出"), ("Unsupported", "不支援"), - ("Peer denied", "被對方拒絕"), - ("Please install plugins", "請安裝插件"), - ("Peer exit", "被對方退出"), - ("Failed to turn off", "退出失敗"), - ("Turned off", "退出"), + ("Peer denied", "對方拒絕"), + ("Please install plugins", "請安裝外掛程式"), + ("Peer exit", "對方退出"), + ("Failed to turn off", "關閉失敗"), + ("Turned off", "已關閉"), ("In privacy mode", "開啟隱私模式"), ("Out privacy mode", "退出隱私模式"), ("Language", "語言"), ("Keep RustDesk background service", "保持 RustDesk 後台服務"), ("Ignore Battery Optimizations", "忽略電池最佳化"), - ("android_open_battery_optimizations_tip", "如需關閉此功能,請在接下來的 RustDesk 應用設定頁面中,找到並進入 [電源] 頁面,取消勾選 [不受限制]"), - ("Start on Boot", "開機自動啟動"), - ("Start the screen sharing service on boot, requires special permissions", "開機自動啟動螢幕共享服務,此功能需要一些特殊權限。"), - ("Connection not allowed", "對方不允許連線"), + ("android_open_battery_optimizations_tip", "如果您想要停用此功能,請前往下一個 RustDesk 應用程式設定頁面,找到並進入「電池」,取消勾選「不受限制」"), + ("Start on Boot", "開機時啟動"), + ("Start the screen sharing service on boot, requires special permissions", "開機時啟動螢幕分享服務,需要特殊權限。"), + ("Connection not allowed", "不允許連線"), ("Legacy mode", "傳統模式"), ("Map mode", "1:1 傳輸模式"), ("Translate mode", "翻譯模式"), @@ -323,8 +326,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Set permanent password", "設定固定密碼"), ("Enable Remote Restart", "啟用遠端重新啟動"), ("Allow remote restart", "允許遠端重新啟動"), - ("Restart Remote Device", "重新啟動遠端電腦"), - ("Are you sure you want to restart", "確定要重新啟動"), + ("Restart Remote Device", "重新啟動遠端裝置"), + ("Are you sure you want to restart", "確定要重新啟動嗎?"), ("Restarting Remote Device", "正在重新啟動遠端裝置"), ("remote_restarting_tip", "遠端裝置正在重新啟動,請關閉此對話框,並在一段時間後使用永久密碼重新連線"), ("Copied", "已複製"), @@ -353,13 +356,13 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Dark", "黑暗"), ("Light", "明亮"), ("Follow System", "跟隨系統"), - ("Enable hardware codec", "使用硬體編解碼器"), + ("Enable hardware codec", "啟用硬體編解碼器"), ("Unlock Security Settings", "解鎖安全設定"), - ("Enable Audio", "允許傳輸音訊"), + ("Enable Audio", "啟用音訊"), ("Unlock Network Settings", "解鎖網路設定"), ("Server", "伺服器"), ("Direct IP Access", "IP 直接連線"), - ("Proxy", "代理"), + ("Proxy", "代理伺服器"), ("Apply", "套用"), ("Disconnect all devices?", "中斷所有遠端連線?"), ("Clear", "清空"), @@ -382,17 +385,17 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Write a message", "輸入聊天訊息"), ("Prompt", "提示"), ("Please wait for confirmation of UAC...", "請等待對方確認 UAC ..."), - ("elevated_foreground_window_tip", "目前的遠端桌面視窗需要更高的權限才能繼續操作,暫時無法使用滑鼠、鍵盤,可以請求對方最小化目前視窗,或者在連線管理視窗點擊提升權限。為了避免這個問題,建議在遠端裝置上安裝本軟體。"), + ("elevated_foreground_window_tip", "目前的遠端桌面視窗需要更高的權限才能繼續操作,暫時無法使用滑鼠、鍵盤,可以請求對方最小化目前視窗,或者在連線管理視窗點選提升權限。為了避免這個問題,建議在遠端裝置上安裝本軟體。"), ("Disconnected", "斷開連線"), ("Other", "其他"), ("Confirm before closing multiple tabs", "關閉多個分頁前詢問我"), ("Keyboard Settings", "鍵盤設定"), ("Full Access", "完全存取"), ("Screen Share", "僅分享螢幕畫面"), - ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland 需要 Ubuntu 21.04 或更高版本。"), - ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland 需要更高版本的 Linux 發行版。請嘗試使用 X11 桌面或更改您的作業系統。"), + ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland 需要 Ubuntu 21.04 或更新的版本。"), + ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland 需要更新的版的 Linux 發行版。請嘗試使用 X11 桌面或更改您的作業系統。"), ("JumpLink", "查看"), - ("Please Select the screen to be shared(Operate on the peer side).", "請選擇要分享的螢幕畫面(在對端操作)。"), + ("Please Select the screen to be shared(Operate on the peer side).", "請選擇要分享的螢幕畫面(在對方的裝置上操作)。"), ("Show RustDesk", "顯示 RustDesk"), ("This PC", "此電腦"), ("or", "或"), @@ -400,8 +403,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Elevate", "提升權限"), ("Zoom cursor", "縮放游標"), ("Accept sessions via password", "只允許透過輸入密碼進行連線"), - ("Accept sessions via click", "只允許透過點擊接受進行連線"), - ("Accept sessions via both", "允許輸入密碼或點擊接受進行連線"), + ("Accept sessions via click", "只允許透過點選接受進行連線"), + ("Accept sessions via both", "允許輸入密碼或點選接受進行連線"), ("Please wait for the remote side to accept your session request...", "請等待對方接受您的連線請求 ..."), ("One-time Password", "一次性密碼"), ("Use one-time password", "使用一次性密碼"), @@ -411,7 +414,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("hide_cm_tip", "在只允許密碼連線並且只用固定密碼的情況下才允許隱藏"), ("wayland_experiment_tip", "Wayland 支援處於實驗階段,如果您需要使用無人值守存取,請使用 X11。"), ("Right click to select tabs", "右鍵選擇分頁"), - ("Skipped", "已略過"), + ("Skipped", "已跳過"), ("Add to Address Book", "新增到通訊錄"), ("Group", "群組"), ("Search", "搜尋"), @@ -428,7 +431,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Ask the remote user for authentication", "請求遠端使用者進行身分驗證"), ("Choose this if the remote account is administrator", "當遠端使用者帳戶是管理員時,請選擇此選項"), ("Transmit the username and password of administrator", "發送管理員的使用者名稱和密碼"), - ("still_click_uac_tip", "依然需要遠端使用者在 UAC 視窗點擊確認。"), + ("still_click_uac_tip", "依然需要遠端使用者在 UAC 視窗點選確認。"), ("Request Elevation", "請求權限提升"), ("wait_accept_uac_tip", "請等待遠端使用者確認 UAC 對話框。"), ("Elevate successfully", "權限提升成功"), @@ -454,7 +457,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Voice call", "語音通話"), ("Text chat", "文字聊天"), ("Stop voice call", "停止語音通話"), - ("relay_hint_tip", "可能無法直接連線,可以嘗試中繼連線。\n另外,如果想要直接使用中繼連線,可以在 ID 後面新增/r,如果近期工作階段裏存在該卡片,也可以在卡片選項裏選擇強制走中繼連接。"), + ("relay_hint_tip", "可能無法直接連線,可以嘗試中繼連線。\n另外,如果想要直接使用中繼連線,可以在 ID 後面新增/r,如果近期工作階段裏存在該分頁,也可以在分頁選項裡選擇強制走中繼連線。"), ("Reconnect", "重新連線"), ("Codec", "編解碼器"), ("Resolution", "解析度"), @@ -487,7 +490,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("OS Account", "作業系統使用者帳戶"), ("another_user_login_title_tip", "另一個使用者已經登入"), ("another_user_login_text_tip", "斷開連線"), - ("xorg_not_found_title_tip", "未找到 Xorg"), + ("xorg_not_found_title_tip", "找不到 Xorg"), ("xorg_not_found_text_tip", "請安裝 Xorg"), ("no_desktop_title_tip", "沒有可用的桌面"), ("no_desktop_text_tip", "請安裝 GNOME 桌面"), @@ -513,18 +516,18 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Accept and Elevate", "接受並提升"), ("accept_and_elevate_btn_tooltip", "接受連線並提升 UAC 權限。"), ("clipboard_wait_response_timeout_tip", "等待複製回應逾時。"), - ("Incoming connection", "收到的連接"), - ("Outgoing connection", "發起的連接"), + ("Incoming connection", "接收的連線"), + ("Outgoing connection", "發起的連線"), ("Exit", "退出"), ("Open", "開啟"), - ("logout_tip", "確定要退出登錄嗎?"), - ("Service", ""), - ("Start", ""), - ("Stop", ""), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), - ("Open connection in new tab", ""), - ("Move tab to new window", ""), + ("logout_tip", "確定要登出嗎?"), + ("Service", "服務"), + ("Start", "啟動"), + ("Stop", "停止"), + ("exceed_max_devices", "超過最大裝置數量"), + ("Sync with recent sessions", "與近期工作階段同步"), + ("Sort tags", "排序標籤"), + ("Open connection in new tab", "在新分頁開啟連線"), + ("Move tab to new window", "移動標籤到新視窗"), ].iter().cloned().collect(); } From 5028b8a93dfa2a08bf6d4a53b9a356a8544aaa2f Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 9 Aug 2023 18:38:43 +0800 Subject: [PATCH 363/612] fix keep peer card order when connect failed Signed-off-by: 21pages --- src/client.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/client.rs b/src/client.rs index 9c039464c..e9d319685 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1151,6 +1151,10 @@ impl LoginConfigHandler { /// /// * `config` - [`PeerConfig`] to save. pub fn save_config(&mut self, config: PeerConfig) { + if self.version == 0 { + log::info!("skip saving peer config {}", self.id); + return; + } config.store(&self.id); self.config = config; } @@ -1209,10 +1213,6 @@ impl LoginConfigHandler { /// * `k` - key of option /// * `v` - value of option pub fn save_ui_flutter(&mut self, k: String, v: String) { - if self.version == 0 && k == "wm_" { - log::info!("skip saving {k}"); - return; - } let mut config = self.load_config(); config.ui_flutter.insert(k, v); self.save_config(config); From 3fd58bb69d6002e355376ee102257e393762c5a7 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 9 Aug 2023 22:00:15 +0800 Subject: [PATCH 364/612] opt peer card multi select Signed-off-by: 21pages --- flutter/assets/checkbox.ttf | Bin 0 -> 1728 bytes flutter/lib/common.dart | 1 + flutter/lib/common/widgets/peer_card.dart | 98 +++++++++++------- flutter/lib/common/widgets/peer_tab_page.dart | 29 +++++- flutter/lib/main.dart | 6 +- flutter/lib/models/peer_tab_model.dart | 85 ++++++++------- flutter/pubspec.yaml | 3 + 7 files changed, 135 insertions(+), 87 deletions(-) create mode 100644 flutter/assets/checkbox.ttf diff --git a/flutter/assets/checkbox.ttf b/flutter/assets/checkbox.ttf new file mode 100644 index 0000000000000000000000000000000000000000..70ddde69842369c9634906a967604c5bfcff2e86 GIT binary patch literal 1728 zcmd^9OK%%h6#nj=vEz)vZ5~9(MP=$VUO=%^0|E6BMJ-Jv1QfL)LI?>aOf2+2X z>)!(mpZ=Q-&#BH${QN3$pZ`LG#Mq8;gZKyjCmXGJGef}KyHpuJbRE2@Y@wcrFM#z+D|0+oToSF8(;9IO`?beV6IRW#YHjm zq?lS1$HkaPkEKo&O5*v6=N84YCo0FqV-wRkAqr`ZGb9%1Db9*-b5>_uPUpwp`YUs6 zT4wg|TRGwH^=8i&3TJ2KQZnv+o-Y>ja!Ki4wrk}lrBxLtEjf|5_Ip{;KM0*oQVkUI zd%aOo()A>EbpOByHqH&u1d5tYRjY}G5S+T8d zpE=HXinyV%z)^gou|y8HG&acpq_Ii-tHvqJU{~Wb`8|y-tcgc8&Y~#Xi;?HVUe#XT zvYT!g)WRShjaR(-hVMipb2P4bQKuOO_UY36h+6RiFB+BUT(4K+xMtU)uw^f^p6C0a z-HyU*o*S1Maoj#rE~|MIUvk41pSlPh9K_UB*jUFFbrUW^1gIrCe#pMU=sGswGc$U~ zdpLWI(Gfa~Q#EazMv2eX;iwfx1xe)LZaTQm*(&TYW=A&vh?QDI%ep_0o%qBy4^a88 zv5w2=5*kTXn@@F_-)KFf_)@aY*6?*z*G;{z|0PmL!Si+-p8MW { diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index a88bb4930..f12c15160 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -61,20 +61,19 @@ class _PeerCardState extends State<_PeerCard> final name = '${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}'; final PeerTabModel peerTabModel = Provider.of(context); - final selected = peerTabModel.isPeerSelected(peer.id); return Card( margin: EdgeInsets.symmetric(horizontal: 2), child: GestureDetector( onTap: () { if (peerTabModel.multiSelectionMode) { - peerTabModel.togglePeerSelect(peer); + peerTabModel.select(peer); } else { if (!isWebDesktop) connect(context, peer.id); } }, onDoubleTap: isWebDesktop ? () => connect(context, peer.id) : null, onLongPress: () { - peerTabModel.togglePeerSelect(peer); + peerTabModel.select(peer); }, child: Container( padding: EdgeInsets.only(left: 12, top: 8, bottom: 8), @@ -103,23 +102,7 @@ class _PeerCardState extends State<_PeerCard> ], ).paddingOnly(left: 8.0), ), - selected - ? Padding( - padding: const EdgeInsets.all(12), - child: checkBox(), - ) - : InkWell( - child: const Padding( - padding: EdgeInsets.all(12), - child: Icon(Icons.more_vert)), - onTapDown: (e) { - final x = e.globalPosition.dx; - final y = e.globalPosition.dy; - _menuPos = RelativeRect.fromLTRB(x, y, x, y); - }, - onTap: () { - _showPeerMenu(peer.id); - }), + checkBoxOrActionMoreMobile(peer), ], ), ))); @@ -159,15 +142,8 @@ class _PeerCardState extends State<_PeerCard> onDoubleTap: peerTabModel.multiSelectionMode ? null : () => widget.connect(context, peer.id), - onLongPress: () { - peerTabModel.togglePeerSelect(peer); - }, - onSecondaryTapDown: (_) { - peerTabModel.togglePeerSelect(peer); - }, - onTap: peerTabModel.multiSelectionMode - ? () => peerTabModel.togglePeerSelect(peer) - : null, + onTap: () => peerTabModel.select(peer), + onLongPress: () => peerTabModel.select(peer), child: Obx(() => peerCardUiType.value == PeerUiType.grid ? _buildPeerCard(context, peer, deco) : _buildPeerTile(context, peer, deco))), @@ -176,8 +152,6 @@ class _PeerCardState extends State<_PeerCard> Widget _buildPeerTile( BuildContext context, Peer peer, Rx deco) { - final PeerTabModel peerTabModel = Provider.of(context); - final selected = peerTabModel.isPeerSelected(peer.id); final name = '${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}'; final greyStyle = TextStyle( @@ -237,7 +211,7 @@ class _PeerCardState extends State<_PeerCard> ], ).marginOnly(top: 2), ), - selected ? checkBox() : _actionMore(peer), + checkBoxOrActionMoreDesktop(peer), ], ).paddingOnly(left: 10.0, top: 3.0), ), @@ -250,8 +224,6 @@ class _PeerCardState extends State<_PeerCard> Widget _buildPeerCard( BuildContext context, Peer peer, Rx deco) { - final PeerTabModel peerTabModel = Provider.of(context); - final selected = peerTabModel.isPeerSelected(peer.id); final name = '${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}'; return Card( @@ -321,7 +293,7 @@ class _PeerCardState extends State<_PeerCard> style: Theme.of(context).textTheme.titleSmall, )), ]).paddingSymmetric(vertical: 8)), - selected ? checkBox() : _actionMore(peer), + checkBoxOrActionMoreDesktop(peer), ], ).paddingSymmetric(horizontal: 12.0), ) @@ -333,11 +305,57 @@ class _PeerCardState extends State<_PeerCard> ); } - Widget checkBox() { - return Icon( - Icons.check_box, - color: MyTheme.accent, - ); + Widget checkBoxOrActionMoreMobile(Peer peer) { + final PeerTabModel peerTabModel = Provider.of(context); + final selected = peerTabModel.isPeerSelected(peer.id); + if (peerTabModel.multiSelectionMode) { + return Padding( + padding: const EdgeInsets.all(12), + child: selected + ? Icon( + Icons.check_box, + color: MyTheme.accent, + ) + : Icon(Icons.check_box_outline_blank), + ); + } else { + return InkWell( + child: const Padding( + padding: EdgeInsets.all(12), child: Icon(Icons.more_vert)), + onTapDown: (e) { + final x = e.globalPosition.dx; + final y = e.globalPosition.dy; + _menuPos = RelativeRect.fromLTRB(x, y, x, y); + }, + onTap: () { + _showPeerMenu(peer.id); + }); + } + } + + Widget checkBoxOrActionMoreDesktop(Peer peer) { + final PeerTabModel peerTabModel = Provider.of(context); + final selected = peerTabModel.isPeerSelected(peer.id); + if (peerTabModel.multiSelectionMode) { + final icon = selected + ? Icon( + Icons.check_box, + color: MyTheme.accent, + ) + : Icon(Icons.check_box_outline_blank); + bool last = peerTabModel.isShiftDown && peer.id == peerTabModel.lastId; + if (last) { + return Container( + decoration: BoxDecoration( + border: Border.all(color: MyTheme.accent, width: 1)), + child: icon, + ); + } else { + return icon; + } + } else { + return _actionMore(peer); + } } Widget _actionMore(Peer peer) => Listener( diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index e8cbd2619..a034ec13d 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -103,6 +103,7 @@ class _PeerTabPageState extends State Expanded(child: _createSwitchBar(context)), const PeerSearchBar().marginOnly(right: isMobile ? 0 : 13), _createRefresh(), + _createMultiSelection(), Offstage( offstage: !isDesktop, child: _createPeerViewTypeSwitch(context)), @@ -258,6 +259,24 @@ class _PeerTabPageState extends State ); } + Widget _createMultiSelection() { + final textColor = Theme.of(context).textTheme.titleLarge?.color; + final model = Provider.of(context); + return Container( + padding: EdgeInsets.all(4.0), + child: InkWell( + onTap: () { + model.setMultiSelectionMode(true); + }, + child: Icon( + IconFont.checkbox, + size: 18, + color: textColor, + ), + ), + ); + } + Widget createMultiSelectionBar() { final model = Provider.of(context); return Row( @@ -308,7 +327,7 @@ class _PeerTabPageState extends State default: break; } - gFFI.peerTabModel.closeSelection(); + gFFI.peerTabModel.setMultiSelectionMode(false); showToast(translate('Successful')); } @@ -334,7 +353,7 @@ class _PeerTabPageState extends State } } await bind.mainStoreFav(favs: favs); - gFFI.peerTabModel.closeSelection(); + model.setMultiSelectionMode(false); showToast(translate('Successful')); }, child: Tooltip( @@ -355,7 +374,7 @@ class _PeerTabPageState extends State final peers = model.selectedPeers; gFFI.abModel.addPeers(peers); gFFI.abModel.pushAb(); - gFFI.peerTabModel.closeSelection(); + model.setMultiSelectionMode(false); showToast(translate('Successful')); }, child: Tooltip( @@ -379,7 +398,7 @@ class _PeerTabPageState extends State gFFI.abModel.changeTagForPeers( peers.map((p) => p.id).toList(), selectedTags); gFFI.abModel.pushAb(); - gFFI.peerTabModel.closeSelection(); + model.setMultiSelectionMode(false); showToast(translate('Successful')); }); }, @@ -416,7 +435,7 @@ class _PeerTabPageState extends State final model = Provider.of(context); return InkWell( onTap: () { - model.closeSelection(); + model.setMultiSelectionMode(false); }, child: Tooltip(message: translate('Close'), child: Icon(Icons.clear))) diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index 14db061bd..ef3862aac 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -418,7 +418,7 @@ class _AppState extends State { : (context, child) { child = _keepScaleBuilder(context, child); child = botToastBuilder(context, child); - if (desktopType == DesktopType.main) { + if (isDesktop && desktopType == DesktopType.main) { child = keyListenerBuilder(context, child); } return child; @@ -465,9 +465,9 @@ Widget keyListenerBuilder(BuildContext context, Widget? child) { onKey: (RawKeyEvent event) { if (event.logicalKey == LogicalKeyboardKey.shiftLeft) { if (event is RawKeyDownEvent) { - gFFI.peerTabModel.isShiftDown = true; + gFFI.peerTabModel.setShiftDown(true); } else if (event is RawKeyUpEvent) { - gFFI.peerTabModel.isShiftDown = false; + gFFI.peerTabModel.setShiftDown(false); } } }, diff --git a/flutter/lib/models/peer_tab_model.dart b/flutter/lib/models/peer_tab_model.dart index 024158ccc..e7f4192cd 100644 --- a/flutter/lib/models/peer_tab_model.dart +++ b/flutter/lib/models/peer_tab_model.dart @@ -39,11 +39,14 @@ class PeerTabModel with ChangeNotifier { List get indexs => List.generate(tabNames.length, (index) => index); List _selectedPeers = List.empty(growable: true); List get selectedPeers => _selectedPeers; - bool get multiSelectionMode => _selectedPeers.isNotEmpty; + bool _multiSelectionMode = false; + bool get multiSelectionMode => _multiSelectionMode; List _currentTabCachedPeers = List.empty(growable: true); List get currentTabCachedPeers => _currentTabCachedPeers; - bool isShiftDown = false; - String? _shiftAnchorId; + bool _isShiftDown = false; + bool get isShiftDown => _isShiftDown; + String _lastId = ''; + String get lastId => _lastId; PeerTabModel(this.parent) { // init currentTab @@ -85,38 +88,39 @@ class PeerTabModel with ChangeNotifier { return Icons.help; } - togglePeerSelect(Peer peer) { + setMultiSelectionMode(bool mode) { + _multiSelectionMode = mode; + if (!mode) { + _selectedPeers.clear(); + _lastId = ''; + } + notifyListeners(); + } + + select(Peer peer) { + if (!_multiSelectionMode) { + // https://github.com/flutter/flutter/issues/101275#issuecomment-1604541700 + // After onTap, the shift key should be pressed for a while when not in multiselection mode, + // because onTap is delayed when onDoubleTap is not null + if (isDesktop && !_isShiftDown) return; + _multiSelectionMode = true; + } final cached = _currentTabCachedPeers.map((e) => e.id).toList(); int thisIndex = cached.indexOf(peer.id); - int closestIndex = -1; - String? closestId; - int smallestDiff = -1; - for (var i = 0; i < cached.length; i++) { - if (isPeerSelected(cached[i])) { - int diff = (i - thisIndex).abs(); - if (smallestDiff == -1 || diff < smallestDiff) { - closestIndex = i; - closestId = cached[i]; - smallestDiff = diff; - } - } - } - if (isShiftDown && - thisIndex >= 0 && - closestIndex >= 0 && - closestId != null) { - int shiftAnchorIndex = cached.indexOf(_shiftAnchorId ?? ''); - if (shiftAnchorIndex < 0) { - // use closest as shift anchor, rather than focused which we don't have - shiftAnchorIndex = closestIndex; - _shiftAnchorId = closestId; - } - int start = min(shiftAnchorIndex, thisIndex); - int end = max(shiftAnchorIndex, thisIndex); - _selectedPeers.clear(); + int lastIndex = cached.indexOf(_lastId); + if (_isShiftDown && thisIndex >= 0 && lastIndex >= 0) { + int start = min(thisIndex, lastIndex); + int end = max(thisIndex, lastIndex); + bool remove = isPeerSelected(peer.id); for (var i = start; i <= end; i++) { - if (!isPeerSelected(cached[i])) { - _selectedPeers.add(_currentTabCachedPeers[i]); + if (remove) { + if (isPeerSelected(cached[i])) { + _selectedPeers.removeWhere((p) => p.id == cached[i]); + } + } else { + if (!isPeerSelected(cached[i])) { + _selectedPeers.add(_currentTabCachedPeers[i]); + } } } } else { @@ -125,14 +129,8 @@ class PeerTabModel with ChangeNotifier { } else { _selectedPeers.add(peer); } - _shiftAnchorId = null; } - notifyListeners(); - } - - closeSelection() { - _selectedPeers.clear(); - _shiftAnchorId = null; + _lastId = peer.id; notifyListeners(); } @@ -151,4 +149,13 @@ class PeerTabModel with ChangeNotifier { bool isPeerSelected(String id) { return selectedPeers.firstWhereOrNull((p) => p.id == id) != null; } + + setShiftDown(bool v) { + if (_isShiftDown != v) { + _isShiftDown = v; + if (_multiSelectionMode) { + notifyListeners(); + } + } + } } diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index e7bc54b4b..9ae0016b6 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -149,6 +149,9 @@ flutter: - family: AddressBook fonts: - asset: assets/address_book.ttf + - family: CheckBox + fonts: + - asset: assets/checkbox.ttf # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware. From 96e3d9496d5b85449aa481da1d3b25a60ce66179 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 09:29:07 +0800 Subject: [PATCH 365/612] fix, desktop touchscreen support long press Signed-off-by: dignow --- flutter/lib/common/widgets/remote_input.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/flutter/lib/common/widgets/remote_input.dart b/flutter/lib/common/widgets/remote_input.dart index bed4dee8a..35eaf8a7c 100644 --- a/flutter/lib/common/widgets/remote_input.dart +++ b/flutter/lib/common/widgets/remote_input.dart @@ -157,9 +157,6 @@ class _RawTouchGestureDetectorRegionState if (lastDeviceKind != PointerDeviceKind.touch) { return; } - if (isDesktop) { - return; - } if (handleTouch) { ffi.cursorModel .move(_cacheLongPressPosition.dx, _cacheLongPressPosition.dy); From db45552a05ab85d38100d4eafb1e2c0b8ffc1c27 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 10 Aug 2023 10:08:33 +0800 Subject: [PATCH 366/612] rename tag Signed-off-by: 21pages --- flutter/lib/common/widgets/address_book.dart | 24 ++++++ flutter/lib/common/widgets/dialog.dart | 71 ++++++++++++++++++ flutter/lib/common/widgets/peer_card.dart | 77 ++++---------------- flutter/lib/models/ab_model.dart | 27 +++++++ src/lang/ca.rs | 2 + src/lang/cn.rs | 2 + src/lang/cs.rs | 2 + src/lang/da.rs | 2 + src/lang/de.rs | 2 + src/lang/el.rs | 2 + src/lang/eo.rs | 2 + src/lang/es.rs | 2 + src/lang/fa.rs | 2 + src/lang/fr.rs | 2 + src/lang/hu.rs | 2 + src/lang/id.rs | 2 + src/lang/it.rs | 2 + src/lang/ja.rs | 2 + src/lang/ko.rs | 2 + src/lang/kz.rs | 2 + src/lang/lt.rs | 2 + src/lang/nl.rs | 2 + src/lang/pl.rs | 2 + src/lang/pt_PT.rs | 2 + src/lang/ptbr.rs | 2 + src/lang/ro.rs | 2 + src/lang/ru.rs | 2 + src/lang/sk.rs | 2 + src/lang/sl.rs | 2 + src/lang/sq.rs | 2 + src/lang/sr.rs | 2 + src/lang/sv.rs | 2 + src/lang/template.rs | 2 + src/lang/th.rs | 2 + src/lang/tr.rs | 2 + src/lang/tw.rs | 2 + src/lang/ua.rs | 2 + src/lang/vn.rs | 2 + 38 files changed, 204 insertions(+), 63 deletions(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index c62a88421..fa7d15b73 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -9,6 +9,7 @@ import '../../desktop/widgets/material_mod_popup_menu.dart' as mod_menu; import 'package:get/get.dart'; import '../../common.dart'; +import 'dialog.dart'; import 'login.dart'; final hideAbTagsPanel = false.obs; @@ -473,6 +474,29 @@ class AddressBookTag extends StatelessWidget { void _showMenu(BuildContext context, RelativeRect pos) { final items = [ + getEntry(translate("Rename"), () { + renameDialog( + oldName: name, + validator: (String? newName) { + if (newName == null || newName.isEmpty) { + return translate('Can not be empty'); + } + if (newName != name && gFFI.abModel.tags.contains(newName)) { + return translate('Already exists'); + } + return null; + }, + onSubmit: (String newName) { + if (name != newName) { + gFFI.abModel.renameTag(name, newName); + gFFI.abModel.pushAb(); + } + Future.delayed(Duration.zero, () => Get.back()); + }, + onCancel: () { + Future.delayed(Duration.zero, () => Get.back()); + }); + }), getEntry(translate("Delete"), () { gFFI.abModel.deleteTag(name); gFFI.abModel.pushAb(); diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index 77307418a..40f0901aa 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -1448,3 +1448,74 @@ void editAbTagDialog( ); }); } + +void renameDialog( + {required String oldName, + FormFieldValidator? validator, + required ValueChanged onSubmit, + Function? onCancel}) async { + RxBool isInProgress = false.obs; + var controller = TextEditingController(text: oldName); + final formKey = GlobalKey(); + gFFI.dialogManager.show((setState, close, context) { + submit() async { + String text = controller.text.trim(); + if (validator != null && formKey.currentState?.validate() == false) { + return; + } + isInProgress.value = true; + onSubmit(text); + close(); + isInProgress.value = false; + } + + cancel() { + onCancel?.call(); + close(); + } + + return CustomAlertDialog( + title: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.edit_rounded, color: MyTheme.accent), + Text(translate('Rename')).paddingOnly(left: 10), + ], + ), + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + child: Form( + key: formKey, + child: TextFormField( + controller: controller, + autofocus: true, + decoration: InputDecoration(labelText: translate('Name')), + validator: validator, + ), + ), + ), + Obx(() => Offstage( + offstage: isInProgress.isFalse, + child: const LinearProgressIndicator())), + ], + ), + actions: [ + dialogButton( + "Cancel", + icon: Icon(Icons.close_rounded), + onPressed: cancel, + isOutline: true, + ), + dialogButton( + "OK", + icon: Icon(Icons.done_rounded), + onPressed: submit, + ), + ], + onSubmit: submit, + onCancel: cancel, + ); + }); +} diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index f12c15160..4d49bd496 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -139,9 +139,10 @@ class _PeerCardState extends State<_PeerCard> ); }, child: GestureDetector( - onDoubleTap: peerTabModel.multiSelectionMode - ? null - : () => widget.connect(context, peer.id), + onDoubleTap: + peerTabModel.multiSelectionMode || peerTabModel.isShiftDown + ? null + : () => widget.connect(context, peer.id), onTap: () => peerTabModel.select(peer), onLongPress: () => peerTabModel.select(peer), child: Obx(() => peerCardUiType.value == PeerUiType.grid @@ -600,8 +601,16 @@ abstract class BasePeerCard extends StatelessWidget { translate('Rename'), style: style, ), - proc: () { - _rename(id); + proc: () async { + String oldName = await _getAlias(id); + renameDialog( + oldName: oldName, + onSubmit: (String newName) async { + if (newName != oldName) { + await bind.mainSetPeerAlias(id: id, alias: newName); + _update(); + } + }); }, padding: menuPadding, dismissOnClicked: true, @@ -771,64 +780,6 @@ abstract class BasePeerCard extends StatelessWidget { Future _getAlias(String id) async => await bind.mainGetPeerOption(id: id, key: 'alias'); - void _rename(String id) async { - RxBool isInProgress = false.obs; - String name = await _getAlias(id); - var controller = TextEditingController(text: name); - gFFI.dialogManager.show((setState, close, context) { - submit() async { - isInProgress.value = true; - String name = controller.text.trim(); - await bind.mainSetPeerAlias(id: id, alias: name); - _update(); - close(); - isInProgress.value = false; - } - - return CustomAlertDialog( - title: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon(Icons.edit_rounded, color: MyTheme.accent), - Text(translate('Rename')).paddingOnly(left: 10), - ], - ), - content: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - child: Form( - child: TextFormField( - controller: controller, - autofocus: true, - decoration: InputDecoration(labelText: translate('Name')), - ), - ), - ), - Obx(() => Offstage( - offstage: isInProgress.isFalse, - child: const LinearProgressIndicator())), - ], - ), - actions: [ - dialogButton( - "Cancel", - icon: Icon(Icons.close_rounded), - onPressed: close, - isOutline: true, - ), - dialogButton( - "OK", - icon: Icon(Icons.done_rounded), - onPressed: submit, - ), - ], - onSubmit: submit, - onCancel: close, - ); - }); - } - @protected void _update(); } diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 5bbbc0f9f..be801a141 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -223,6 +223,33 @@ class AbModel { } } + void renameTag(String oldTag, String newTag) { + if (tags.contains(newTag)) return; + tags.value = tags.map((e) { + if (e == oldTag) { + return newTag; + } else { + return oldTag; + } + }).toList(); + selectedTags.value = selectedTags.map((e) { + if (e == oldTag) { + return newTag; + } else { + return oldTag; + } + }).toList(); + for (var peer in peers) { + peer.tags = peer.tags.map((e) { + if (e == oldTag) { + return newTag; + } else { + return oldTag; + } + }).toList(); + } + } + void unsetSelectedTags() { selectedTags.clear(); } diff --git a/src/lang/ca.rs b/src/lang/ca.rs index b3d913b62..23914b810 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 83060c6af..6c4565fe7 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "对标签进行排序"), ("Open connection in new tab", "在选项卡中打开新连接"), ("Move tab to new window", "将标签页移至新窗口"), + ("Can not be empty", "不能为空"), + ("Already exists", "已经存在"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 2d7a7ce16..b2a304c39 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 0a10551d3..df3aecc45 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index ffb62a45f..c33510135 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Tags sortieren"), ("Open connection in new tab", "Verbindung in neuem Tab öffnen"), ("Move tab to new window", "Tab in neues Fenster verschieben"), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 33f4d74b8..846c632c7 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 8b29e418e..aec715f72 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 27752e989..dcd39c9a7 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Ordenar etiquetas"), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 0b56e073f..7cda61f82 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 8a2baef55..3acbdf800 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 36c43fec9..44158db0d 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index c65eee87d..dac33d1f0 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 5a655ce5a..8dac0ba73 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Ordina etichette"), ("Open connection in new tab", "Apri connessione in una nuova scheda"), ("Move tab to new window", "Sposta scheda nella finestra successiva"), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 6ece9d5c9..5099a8387 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 6ea9b94ea..43cc3526b 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index e5d035b03..ea08bfc58 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 47b70acfd..4cbf215a4 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 08934cea0..312def157 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Labels sorteren"), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 84f13c617..cdab09c7c 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Znaczniki sortowania"), ("Open connection in new tab", ""), ("Move tab to new window", "Przenieś zakładkę do nowego okna"), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index b9e155364..7bfad8a10 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 81fd68ac6..df0e922bd 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index ddd141fa4..0e280496d 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index c0f129ab0..ea51c660f 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Сортировка меток"), ("Open connection in new tab", "Открыть подключение в новой вкладке"), ("Move tab to new window", "Переместить вкладку в отдельное окно"), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index afe52f4ad..487edfbfd 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index dc79f9e44..dc51191ba 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 86f3f3544..7ac82ee65 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 06667f4c5..686d0c66c 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 2e8ea8713..072baf201 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index ed3f41efc..ff87844cd 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 09ade050f..4f462ef6a 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 629a144fd..b184dff21 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 80e4f31c2..2f374329e 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -529,5 +529,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "排序標籤"), ("Open connection in new tab", "在新分頁開啟連線"), ("Move tab to new window", "移動標籤到新視窗"), + ("Can not be empty", "不能為空"), + ("Already exists", "已經存在"), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index a12e2fd10..ac5e0b672 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 0db48584e..335f25a58 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -526,5 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", ""), ("Open connection in new tab", ""), ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), ].iter().cloned().collect(); } From 54a396ed1b0885194b93523686b9ddcc405d900f Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 10 Aug 2023 11:12:58 +0800 Subject: [PATCH 367/612] fix tag rename Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index be801a141..e24ccf4fe 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -229,14 +229,14 @@ class AbModel { if (e == oldTag) { return newTag; } else { - return oldTag; + return e; } }).toList(); selectedTags.value = selectedTags.map((e) { if (e == oldTag) { return newTag; } else { - return oldTag; + return e; } }).toList(); for (var peer in peers) { @@ -244,7 +244,7 @@ class AbModel { if (e == oldTag) { return newTag; } else { - return oldTag; + return e; } }).toList(); } From d2413b18995a49bd047e0464600d2471754fb787 Mon Sep 17 00:00:00 2001 From: SergeyMy <131688106+SergeyMy@users.noreply.github.com> Date: Thu, 10 Aug 2023 09:17:03 +0500 Subject: [PATCH 368/612] Update desktop_setting_page.dart FIX https://github.com/rustdesk/rustdesk/blob/bc0a5bf6e13cf782df36488e5614868550ae81cb/src/lang/template.rs#L527 --- flutter/lib/desktop/pages/desktop_setting_page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 591efd4c7..e0e5858b7 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -319,7 +319,7 @@ class _GeneralState extends State<_General> { _OptionCheckBox(context, 'Adaptive bitrate', 'enable-abr'), _OptionCheckBox( context, - 'Open new connections in tabs', + 'Open connection in new tab', kOptionOpenNewConnInTabs, isServer: false, ), From c4f642258ba2375c414e24b9b94b97b2a87eb010 Mon Sep 17 00:00:00 2001 From: solokot Date: Thu, 10 Aug 2023 07:55:48 +0300 Subject: [PATCH 369/612] Update ru.rs --- src/lang/ru.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index ea51c660f..3aec5dc36 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Сортировка меток"), ("Open connection in new tab", "Открыть подключение в новой вкладке"), ("Move tab to new window", "Переместить вкладку в отдельное окно"), - ("Can not be empty", ""), - ("Already exists", ""), + ("Can not be empty", "Не может быть пустым"), + ("Already exists", "Уже существует"), ].iter().cloned().collect(); } From 200fc56a4ac787d74475f434ebb20558f46708c9 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 6 Aug 2023 14:00:48 +0800 Subject: [PATCH 370/612] tmp commit Signed-off-by: dignow --- flutter/lib/models/input_model.dart | 74 +++++++++++++++++----------- libs/hbb_common/protos/message.proto | 20 ++++++++ 2 files changed, 64 insertions(+), 30 deletions(-) diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index 6b50aa37f..eeaa1a441 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -592,17 +592,52 @@ class InputModel { return; } evt['type'] = type; + + final pos = handlePointerDevicePos( + x, + y, + isMove, + type, + onExit: onExit, + buttons: evt['buttons'], + ); + if (pos == null) { + return; + } + evt['x'] = '${pos.x}}'; + evt['y'] = '${pos.y}'; + + Map mapButtons = { + kPrimaryMouseButton: 'left', + kSecondaryMouseButton: 'right', + kMiddleMouseButton: 'wheel', + kBackMouseButton: 'back', + kForwardMouseButton: 'forward' + }; + evt['buttons'] = mapButtons[evt['buttons']] ?? ''; + + bind.sessionSendMouse(sessionId: sessionId, msg: json.encode(evt)); + } + + Point? handlePointerDevicePos( + double x, + double y, + bool isMove, + String evtType, { + bool onExit = false, + int buttons = kPrimaryMouseButton, + }) { y -= CanvasModel.topToEdge; x -= CanvasModel.leftToEdge; final canvasModel = parent.target!.canvasModel; - final nearThr = 3; - var nearRight = (canvasModel.size.width - x) < nearThr; - var nearBottom = (canvasModel.size.height - y) < nearThr; - final ffiModel = parent.target!.ffiModel; if (isMove) { canvasModel.moveDesktopMouse(x, y); } + + final nearThr = 3; + var nearRight = (canvasModel.size.width - x) < nearThr; + var nearBottom = (canvasModel.size.height - y) < nearThr; final d = ffiModel.display; final imageWidth = d.width * canvasModel.scale; final imageHeight = d.height * canvasModel.scale; @@ -650,7 +685,7 @@ class InputModel { } catch (e) { debugPrintStack( label: 'canvasModel.scale value ${canvasModel.scale}, $e'); - return; + return null; } int minX = d.x.toInt(); @@ -661,38 +696,17 @@ class InputModel { evtY = trySetNearestRange(evtY, minY, maxY, 5); if (evtX < minX || evtY < minY || evtX > maxX || evtY > maxY) { // If left mouse up, no early return. - if (evt['buttons'] != kPrimaryMouseButton || type != 'up') { - return; + if (buttons != kPrimaryMouseButton || evtType != 'up') { + return null; } } - if (type != '') { + if (evtType != '') { evtX = 0; evtY = 0; } - evt['x'] = '$evtX'; - evt['y'] = '$evtY'; - var buttons = ''; - switch (evt['buttons']) { - case kPrimaryMouseButton: - buttons = 'left'; - break; - case kSecondaryMouseButton: - buttons = 'right'; - break; - case kMiddleMouseButton: - buttons = 'wheel'; - break; - case kBackMouseButton: - buttons = 'back'; - break; - case kForwardMouseButton: - buttons = 'forward'; - break; - } - evt['buttons'] = buttons; - bind.sessionSendMouse(sessionId: sessionId, msg: json.encode(evt)); + return Point(evtX, evtY); } /// Web only diff --git a/libs/hbb_common/protos/message.proto b/libs/hbb_common/protos/message.proto index e6862bc80..82206cbf2 100644 --- a/libs/hbb_common/protos/message.proto +++ b/libs/hbb_common/protos/message.proto @@ -118,9 +118,29 @@ message TouchScaleUpdate { int32 scale = 1; } +message TouchPanStart { + int32 x = 1; + int32 y = 2; +} + +message TouchPanUpdate { + // The delta x position relative to the previous position. + int32 x = 1; + // The delta y position relative to the previous position. + int32 y = 2; +} + +message TouchPanEnd { + int32 x = 1; + int32 y = 2; +} + message TouchEvent { oneof union { TouchScaleUpdate scale_update = 1; + TouchPanStart pan_start = 2; + TouchPanUpdate pan_update = 3; + TouchPanEnd pan_end = 4; } } From 8999bbf2974722ec60d9732b303f322613b4341e Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 8 Aug 2023 23:53:53 +0800 Subject: [PATCH 371/612] tmp commit Signed-off-by: dignow --- flutter/lib/models/input_model.dart | 71 +++++++++++++++++------------ 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index eeaa1a441..e8cd92a9c 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -223,14 +223,8 @@ class InputModel { command: command); } - Map getEvent(PointerEvent evt, String type) { + Map _getMouseEvent(PointerEvent evt, String type) { final Map out = {}; - out['x'] = evt.position.dx; - out['y'] = evt.position.dy; - if (alt) out['alt'] = 'true'; - if (shift) out['shift'] = 'true'; - if (ctrl) out['ctrl'] = 'true'; - if (command) out['command'] = 'true'; // Check update event type and set buttons to be sent. int buttons = _lastButtons; @@ -260,7 +254,6 @@ class InputModel { out['buttons'] = buttons; out['type'] = type; - return out; } @@ -292,7 +285,7 @@ class InputModel { } /// Modify the given modifier map [evt] based on current modifier key status. - Map modify(Map evt) { + Map modify(Map evt) { if (ctrl) evt['ctrl'] = 'true'; if (shift) evt['shift'] = 'true'; if (alt) evt['alt'] = 'true'; @@ -334,13 +327,14 @@ class InputModel { isPhysicalMouse.value = true; } if (isPhysicalMouse.value) { - handleMouse(getEvent(e, _kMouseEventMove)); + handleMouse(_getMouseEvent(e, _kMouseEventMove), e.position); } } void onPointerPanZoomStart(PointerPanZoomStartEvent e) { _lastScale = 1.0; _stopFling = true; + handlePointerEvent('touch', 'pan_start', e); } // https://docs.flutter.dev/release/breaking-changes/trackpad-gestures @@ -465,21 +459,21 @@ class InputModel { } } if (isPhysicalMouse.value) { - handleMouse(getEvent(e, _kMouseEventDown)); + handleMouse(_getMouseEvent(e, _kMouseEventDown), e.position); } } void onPointUpImage(PointerUpEvent e) { if (e.kind != ui.PointerDeviceKind.mouse) return; if (isPhysicalMouse.value) { - handleMouse(getEvent(e, _kMouseEventUp)); + handleMouse(_getMouseEvent(e, _kMouseEventUp), e.position); } } void onPointMoveImage(PointerMoveEvent e) { if (e.kind != ui.PointerDeviceKind.mouse) return; if (isPhysicalMouse.value) { - handleMouse(getEvent(e, _kMouseEventMove)); + handleMouse(_getMouseEvent(e, _kMouseEventMove), e.position); } } @@ -504,19 +498,16 @@ class InputModel { } void refreshMousePos() => handleMouse({ - 'x': lastMousePos.dx, - 'y': lastMousePos.dy, 'buttons': 0, 'type': _kMouseEventMove, - }); + }, lastMousePos); void tryMoveEdgeOnExit(Offset pos) => handleMouse( { - 'x': pos.dx, - 'y': pos.dy, 'buttons': 0, 'type': _kMouseEventMove, }, + pos, onExit: true, ); @@ -550,17 +541,27 @@ class InputModel { return Offset(x, y); } - void handleMouse( - Map evt, { - bool onExit = false, - }) { - double x = evt['x']; - double y = max(0.0, evt['y']); - final cursorModel = parent.target!.cursorModel; + void handlePointerEvent(String kind, String type, PointerEvent e) { + if (checkPeerControlProtected(e.position.dx, max(0.0, e.position.dy))) { + return; + } + // Only touch events are handled for now. So we can just ignore buttons. + // to-do: handle mouse events + bind.sessionSendPointer( + sessionId: sessionId, + msg: json.encode({ + modify({ + kind: {type: e.position.toString()} + }) + }), + ); + } + bool checkPeerControlProtected(double x, double y) { + final cursorModel = parent.target!.cursorModel; if (cursorModel.isPeerControlProtected) { lastMousePos = ui.Offset(x, y); - return; + return true; } if (!cursorModel.gotMouseControl) { @@ -571,10 +572,23 @@ class InputModel { cursorModel.gotMouseControl = true; } else { lastMousePos = ui.Offset(x, y); - return; + return true; } } lastMousePos = ui.Offset(x, y); + return false; + } + + void handleMouse( + Map evt, + Offset offset, { + bool onExit = false, + }) { + double x = offset.dx; + double y = max(0.0, offset.dy); + if (checkPeerControlProtected(x, y)) { + return; + } var type = ''; var isMove = false; @@ -615,8 +629,7 @@ class InputModel { kForwardMouseButton: 'forward' }; evt['buttons'] = mapButtons[evt['buttons']] ?? ''; - - bind.sessionSendMouse(sessionId: sessionId, msg: json.encode(evt)); + bind.sessionSendMouse(sessionId: sessionId, msg: json.encode(modify(evt))); } Point? handlePointerDevicePos( From 933c99110ccc3e607e70f2ba97211266b5fcf5eb Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 9 Aug 2023 07:39:16 +0800 Subject: [PATCH 372/612] tmp commit Signed-off-by: dignow --- flutter/lib/models/input_model.dart | 85 ++++++++++++++++++++--------- 1 file changed, 58 insertions(+), 27 deletions(-) diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index e8cd92a9c..ef1a90d6e 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -62,11 +62,11 @@ class InputModel { int _lastButtons = 0; Offset lastMousePos = Offset.zero; - get id => parent.target?.id ?? ""; - late final SessionID sessionId; bool get keyboardPerm => parent.target!.ffiModel.keyboard; + String get id => parent.target?.id ?? ''; + String? get peerPlatform => parent.target?.ffiModel.pi.platform; InputModel(this.parent) { sessionId = parent.target!.sessionId; @@ -334,21 +334,26 @@ class InputModel { void onPointerPanZoomStart(PointerPanZoomStartEvent e) { _lastScale = 1.0; _stopFling = true; - handlePointerEvent('touch', 'pan_start', e); + + if (peerPlatform == kPeerPlatformAndroid) { + handlePointerEvent('touch', 'pan_start', e.position); + } } // https://docs.flutter.dev/release/breaking-changes/trackpad-gestures void onPointerPanZoomUpdate(PointerPanZoomUpdateEvent e) { - final scale = ((e.scale - _lastScale) * 1000).toInt(); - _lastScale = e.scale; + if (peerPlatform != kPeerPlatformAndroid) { + final scale = ((e.scale - _lastScale) * 1000).toInt(); + _lastScale = e.scale; - if (scale != 0) { - bind.sessionSendPointer( - sessionId: sessionId, - msg: json.encode({ - 'touch': {'scale': scale} - })); - return; + if (scale != 0) { + bind.sessionSendPointer( + sessionId: sessionId, + msg: json.encode({ + 'touch': {'scale': scale} + })); + return; + } } final delta = e.panDelta; @@ -356,7 +361,8 @@ class InputModel { var x = delta.dx.toInt(); var y = delta.dy.toInt(); - if (parent.target?.ffiModel.pi.platform == kPeerPlatformLinux) { + if (peerPlatform == kPeerPlatformLinux || + peerPlatform == kPeerPlatformAndroid) { _trackpadScrollUnsent += (delta * _trackpadSpeed); x = _trackpadScrollUnsent.dx.truncate(); y = _trackpadScrollUnsent.dy.truncate(); @@ -372,9 +378,13 @@ class InputModel { } } if (x != 0 || y != 0) { - bind.sessionSendMouse( - sessionId: sessionId, - msg: '{"type": "trackpad", "x": "$x", "y": "$y"}'); + if (peerPlatform == kPeerPlatformAndroid) { + handlePointerEvent('touch', 'pan_move', e.delta); + } else { + bind.sessionSendMouse( + sessionId: sessionId, + msg: '{"type": "trackpad", "x": "$x", "y": "$y"}'); + } } } @@ -430,6 +440,11 @@ class InputModel { } void onPointerPanZoomEnd(PointerPanZoomEndEvent e) { + if (peerPlatform == kPeerPlatformAndroid) { + handlePointerEvent('touch', 'pan_end', e.position); + return; + } + bind.sessionSendPointer( sessionId: sessionId, msg: json.encode({ @@ -541,23 +556,39 @@ class InputModel { return Offset(x, y); } - void handlePointerEvent(String kind, String type, PointerEvent e) { - if (checkPeerControlProtected(e.position.dx, max(0.0, e.position.dy))) { + void handlePointerEvent(String kind, String type, Offset offset) { + double x = offset.dx; + double y = max(0.0, offset.dy); + if (_checkPeerControlProtected(x, y)) { return; } // Only touch events are handled for now. So we can just ignore buttons. // to-do: handle mouse events - bind.sessionSendPointer( - sessionId: sessionId, - msg: json.encode({ - modify({ - kind: {type: e.position.toString()} - }) - }), + + final isMoveTypes = ['pan', 'pan_start', 'pan_end']; + final pos = handlePointerDevicePos( + x, + y, + isMoveTypes.contains(type), + type, ); + if (pos == null) { + return; + } + + final evt = { + kind: { + type: { + 'x': '${pos.x}', + 'y': '${pos.y}', + } + } + }; + bind.sessionSendPointer( + sessionId: sessionId, msg: json.encode({modify(evt)})); } - bool checkPeerControlProtected(double x, double y) { + bool _checkPeerControlProtected(double x, double y) { final cursorModel = parent.target!.cursorModel; if (cursorModel.isPeerControlProtected) { lastMousePos = ui.Offset(x, y); @@ -586,7 +617,7 @@ class InputModel { }) { double x = offset.dx; double y = max(0.0, offset.dy); - if (checkPeerControlProtected(x, y)) { + if (_checkPeerControlProtected(x, y)) { return; } From d6f1abad959e21e4dbdc4cb05c1a976083b8bb2c Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 9 Aug 2023 09:00:23 +0800 Subject: [PATCH 373/612] tmp commit Signed-off-by: dignow --- .../com/carriez/flutter_hbb/InputService.kt | 31 ++++++++++++++ .../com/carriez/flutter_hbb/MainService.kt | 17 ++++++-- libs/scrap/src/android/ffi.rs | 6 +-- src/server/connection.rs | 42 +++++++++++++++++-- 4 files changed, 85 insertions(+), 11 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 905a2734d..8e14a590d 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 @@ -26,6 +26,13 @@ const val WHEEL_BUTTON_UP = 34 const val WHEEL_DOWN = 523331 const val WHEEL_UP = 963 +const val TOUCH_SCALE_START = 1 +const val TOUCH_SCALE = 2 +const val TOUCH_SCALE_END = 3 +const val TOUCH_PAN_START = 4 +const val TOUCH_PAN_UPDATE = 5 +const val TOUCH_PAN_END = 6 + const val WHEEL_STEP = 120 const val WHEEL_DURATION = 50L const val LONG_TAP_DELAY = 200L @@ -167,6 +174,30 @@ class InputService : AccessibilityService() { } } + @RequiresApi(Build.VERSION_CODES.N) + fun onTouchInput(mask: Int, _x: Int, _y: Int) { + val x = max(0, _x) + val y = max(0, _y) + when (mask) { + TOUCH_PAN_UPDATE -> { + mouseX += x * SCREEN_INFO.scale + mouseY += y * SCREEN_INFO.scale + continueGesture(mouseX, mouseY) + } + TOUCH_PAN_START -> { + mouseX = x * SCREEN_INFO.scale + mouseY = y * SCREEN_INFO.scale + startGesture(mouseX, mouseY) + } + TOUCH_PAN_END -> { + mouseX = x * SCREEN_INFO.scale + mouseY = y * SCREEN_INFO.scale + endGesture(mouseX, mouseY) + } + else -> {} + } + } + @RequiresApi(Build.VERSION_CODES.N) private fun consumeWheelActions() { if (isWheelActionsPolling) { diff --git a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt index 78e4e451e..f32203703 100644 --- a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt +++ b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt @@ -71,17 +71,26 @@ class MainService : Service() { @Keep @RequiresApi(Build.VERSION_CODES.N) - fun rustMouseInput(mask: Int, x: Int, y: Int) { + fun rustPointerInput(kind: String, mask: Int, x: Int, y: Int) { // turn on screen with LIFT_DOWN when screen off - if (!powerManager.isInteractive && mask == LIFT_DOWN) { + if (!powerManager.isInteractive && (kind == "touch" || mask == LIFT_DOWN)) { if (wakeLock.isHeld) { - Log.d(logTag,"Turn on Screen, WakeLock release") + Log.d(logTag, "Turn on Screen, WakeLock release") wakeLock.release() } Log.d(logTag,"Turn on Screen") wakeLock.acquire(5000) } else { - InputService.ctx?.onMouseInput(mask,x,y) + when (name) { + "touch" -> { + InputService.ctx?.onTouchInput(mask, x, y) + } + "mouse" -> { + InputService.ctx?.onMouseInput(mask, x, y) + } + else -> { + } + } } } diff --git a/libs/scrap/src/android/ffi.rs b/libs/scrap/src/android/ffi.rs index 6855fd3f6..3801bbc87 100644 --- a/libs/scrap/src/android/ffi.rs +++ b/libs/scrap/src/android/ffi.rs @@ -154,7 +154,7 @@ pub extern "system" fn Java_com_carriez_flutter_1hbb_MainService_init( } } -pub fn call_main_service_mouse_input(mask: i32, x: i32, y: i32) -> JniResult<()> { +pub fn call_main_service_pointer_input(kind: String, mask: i32, x: i32, y: i32) -> JniResult<()> { if let (Some(jvm), Some(ctx)) = ( JVM.read().unwrap().as_ref(), MAIN_SERVICE_CTX.read().unwrap().as_ref(), @@ -162,9 +162,9 @@ pub fn call_main_service_mouse_input(mask: i32, x: i32, y: i32) -> JniResult<()> let mut env = jvm.attach_current_thread_as_daemon()?; env.call_method( ctx, - "rustMouseInput", + "rustPointerInput", "(III)V", - &[JValue::Int(mask), JValue::Int(x), JValue::Int(y)], + &[JValue(kind), JValue::Int(mask), JValue::Int(x), JValue::Int(y)], )?; return Ok(()); } else { diff --git a/src/server/connection.rs b/src/server/connection.rs index e32a4c1c3..913c831da 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1546,8 +1546,10 @@ impl Connection { match msg.union { Some(message::Union::MouseEvent(me)) => { #[cfg(any(target_os = "android", target_os = "ios"))] - if let Err(e) = call_main_service_mouse_input(me.mask, me.x, me.y) { - log::debug!("call_main_service_mouse_input fail:{}", e); + if let Err(e) = + call_main_service_pointer_input("mouse".to_string(), me.mask, me.x, me.y) + { + log::debug!("call_main_service_pointer_input fail:{}", e); } #[cfg(not(any(target_os = "android", target_os = "ios")))] if self.peer_keyboard_enabled() { @@ -1559,8 +1561,40 @@ impl Connection { self.input_mouse(me, self.inner.id()); } } - Some(message::Union::PointerDeviceEvent(pde)) => - { + Some(message::Union::PointerDeviceEvent(pde)) => { + #[cfg(any(target_os = "android", target_os = "ios"))] + if let Err(e) = match pde.union { + Some(pointer_device_event::Union::TouchEvent(touch)) => match touch.union { + Some(touch_event::Union::PanStart(pan_start)) => { + call_main_service_pointer_input( + "touch".to_string(), + 4, + pan_start.x, + pan_start.y, + ) + } + Some(touch_event::Union::PanUpdate(pan_start)) => { + call_main_service_pointer_input( + "touch".to_string(), + 5, + pan_start.x, + pan_start.y, + ) + } + Some(touch_event::Union::PanEnd(pan_start)) => { + call_main_service_pointer_input( + "touch".to_string(), + 6, + pan_start.x, + pan_start.y, + ) + } + _ => Ok(()), + }, + _ => Ok(()), + } { + log::debug!("call_main_service_pointer_input fail:{}", e); + } #[cfg(not(any(target_os = "android", target_os = "ios")))] if self.peer_keyboard_enabled() { MOUSE_MOVE_TIME.store(get_time(), Ordering::SeqCst); From 06ee68f836a4e5635ec41fc460afe39d5e851f41 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 9 Aug 2023 22:26:13 +0800 Subject: [PATCH 374/612] tmp commit Signed-off-by: dignow --- flutter/lib/models/input_model.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index ef1a90d6e..18e9d0d2f 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -649,7 +649,7 @@ class InputModel { if (pos == null) { return; } - evt['x'] = '${pos.x}}'; + evt['x'] = '${pos.x}'; evt['y'] = '${pos.y}'; Map mapButtons = { From 93a600a0a8d86cfdb632f15552cb0b887448e0fc Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 9 Aug 2023 23:42:53 +0800 Subject: [PATCH 375/612] tmp commit Signed-off-by: dignow --- flutter/lib/common/widgets/remote_input.dart | 12 +-- flutter/lib/consts.dart | 3 + flutter/lib/models/input_model.dart | 101 ++++++++++++------- src/flutter_ffi.rs | 41 ++++++-- src/server/connection.rs | 12 +-- src/ui_session_interface.rs | 43 ++++++++ 6 files changed, 155 insertions(+), 57 deletions(-) diff --git a/flutter/lib/common/widgets/remote_input.dart b/flutter/lib/common/widgets/remote_input.dart index 35eaf8a7c..b00cd1fb4 100644 --- a/flutter/lib/common/widgets/remote_input.dart +++ b/flutter/lib/common/widgets/remote_input.dart @@ -6,6 +6,7 @@ import 'package:flutter/gestures.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:flutter_hbb/common.dart'; +import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/models/input_model.dart'; @@ -263,9 +264,9 @@ class _RawTouchGestureDetectorRegionState if (scale != 0) { bind.sessionSendPointer( sessionId: sessionId, - msg: json.encode({ - 'touch': {'scale': scale} - })); + msg: json.encode( + PointerEventToRust(kPointerEventKindTouch, 'scale', scale) + .toJson())); } } else { // mobile @@ -283,9 +284,8 @@ class _RawTouchGestureDetectorRegionState if (isDesktop) { bind.sessionSendPointer( sessionId: sessionId, - msg: json.encode({ - 'touch': {'scale': 0} - })); + msg: json.encode( + PointerEventToRust(kPointerEventKindTouch, 'scale', 0).toJson())); } else { // mobile _scale = 1; diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 5376196e4..f26e83e01 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -54,6 +54,9 @@ const String kTabLabelSettingPage = "Settings"; const String kWindowPrefix = "wm_"; const int kWindowMainId = 0; +const String kPointerEventKindTouch = "touch"; +const String kPointerEventKindMouse = "mouse"; + // the executable name of the portable version const String kEnvPortableExecutable = "RUSTDESK_APPNAME"; diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index 18e9d0d2f..9b1ec4437 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -35,6 +35,24 @@ extension ToString on MouseButtons { } } +class PointerEventToRust { + final String kind; + final String type; + final dynamic value; + + PointerEventToRust(this.kind, this.type, this.value); + + Map toJson() { + return { + 'k': kind, + 'v': { + 't': type, + 'v': value, + } + }; + } +} + class InputModel { final WeakReference parent; String keyboardMode = "legacy"; @@ -349,9 +367,9 @@ class InputModel { if (scale != 0) { bind.sessionSendPointer( sessionId: sessionId, - msg: json.encode({ - 'touch': {'scale': scale} - })); + msg: json.encode( + PointerEventToRust(kPointerEventKindTouch, 'scale', scale) + .toJson())); return; } } @@ -379,7 +397,7 @@ class InputModel { } if (x != 0 || y != 0) { if (peerPlatform == kPeerPlatformAndroid) { - handlePointerEvent('touch', 'pan_move', e.delta); + handlePointerEvent('touch', 'pan_update', Offset(x.toDouble(), y.toDouble())); } else { bind.sessionSendMouse( sessionId: sessionId, @@ -447,9 +465,8 @@ class InputModel { bind.sessionSendPointer( sessionId: sessionId, - msg: json.encode({ - 'touch': {'scale': 0} - })); + msg: json.encode( + PointerEventToRust(kPointerEventKindTouch, 'scale', 0).toJson())); waitLastFlingDone(); _stopFling = false; @@ -558,34 +575,40 @@ class InputModel { void handlePointerEvent(String kind, String type, Offset offset) { double x = offset.dx; - double y = max(0.0, offset.dy); + double y = offset.dy; if (_checkPeerControlProtected(x, y)) { return; } // Only touch events are handled for now. So we can just ignore buttons. // to-do: handle mouse events - final isMoveTypes = ['pan', 'pan_start', 'pan_end']; - final pos = handlePointerDevicePos( - x, - y, - isMoveTypes.contains(type), - type, - ); - if (pos == null) { - return; + late final dynamic evtValue; + if (type == 'pan_update') { + evtValue = { + 'x': '${x.toInt()}', + 'y': '${y.toInt()}', + }; + } else { + final isMoveTypes = ['pan_start', 'pan_end']; + final pos = handlePointerDevicePos( + kPointerEventKindTouch, + x, + y, + isMoveTypes.contains(type), + type, + ); + if (pos == null) { + return; + } + evtValue = { + 'x': '${pos.x}', + 'y': '${pos.y}', + }; } - final evt = { - kind: { - type: { - 'x': '${pos.x}', - 'y': '${pos.y}', - } - } - }; + final evt = PointerEventToRust(kind, type, evtValue).toJson(); bind.sessionSendPointer( - sessionId: sessionId, msg: json.encode({modify(evt)})); + sessionId: sessionId, msg: json.encode(modify(evt))); } bool _checkPeerControlProtected(double x, double y) { @@ -639,6 +662,7 @@ class InputModel { evt['type'] = type; final pos = handlePointerDevicePos( + kPointerEventKindMouse, x, y, isMove, @@ -649,8 +673,13 @@ class InputModel { if (pos == null) { return; } - evt['x'] = '${pos.x}'; - evt['y'] = '${pos.y}'; + if (type != '') { + evt['x'] = 0; + evt['y'] = 0; + } else { + evt['x'] = '${pos.x}'; + evt['y'] = '${pos.y}'; + } Map mapButtons = { kPrimaryMouseButton: 'left', @@ -664,6 +693,7 @@ class InputModel { } Point? handlePointerDevicePos( + String kind, double x, double y, bool isMove, @@ -738,18 +768,15 @@ class InputModel { int maxY = (d.y + d.height).toInt() - 1; evtX = trySetNearestRange(evtX, minX, maxX, 5); evtY = trySetNearestRange(evtY, minY, maxY, 5); - if (evtX < minX || evtY < minY || evtX > maxX || evtY > maxY) { - // If left mouse up, no early return. - if (buttons != kPrimaryMouseButton || evtType != 'up') { - return null; + if (kind == kPointerEventKindMouse) { + if (evtX < minX || evtY < minY || evtX > maxX || evtY > maxY) { + // If left mouse up, no early return. + if (!(buttons == kPrimaryMouseButton && evtType == 'up')) { + return null; + } } } - if (evtType != '') { - evtX = 0; - evtY = 0; - } - return Point(evtX, evtY); } diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index ef4c9e2ba..cf5d23397 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1177,14 +1177,39 @@ pub fn session_send_pointer(session_id: SessionID, msg: String) { let ctrl = m.get("ctrl").is_some(); let shift = m.get("shift").is_some(); let command = m.get("command").is_some(); - if let Some(touch_event) = m.get("touch") { - if let Some(scale) = touch_event.get("scale") { - if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { - if let Some(scale) = scale.as_i64() { - session.send_touch_scale(scale as _, alt, ctrl, shift, command); - } - } - } + match (m.get("k"), m.get("v")) { + (Some(k), Some(v)) => match k.as_str() { + Some("touch") => match v.as_str() { + Some("scale") => match v.get("v") { + Some(scale) => { + if let Some(scale) = scale.as_i64() { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + session.send_touch_scale(scale as _, alt, ctrl, shift, command); + } + } + } + None => {} + }, + Some(pan_event) => match (v.get("x"), v.get("y")) { + (Some(x), Some(y)) => { + if let Some(x) = x.as_i64() { + if let Some(y) = y.as_i64() { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) + { + session.send_touch_pan_event( + pan_event, x as _, y as _, alt, ctrl, shift, command, + ); + } + } + } + } + _ => {} + }, + _ => {} + }, + _ => {} + }, + _ => {} } } } diff --git a/src/server/connection.rs b/src/server/connection.rs index 913c831da..972750fc2 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1573,20 +1573,20 @@ impl Connection { pan_start.y, ) } - Some(touch_event::Union::PanUpdate(pan_start)) => { + Some(touch_event::Union::PanUpdate(pan_update)) => { call_main_service_pointer_input( "touch".to_string(), 5, - pan_start.x, - pan_start.y, + pan_update.x, + pan_update.y, ) } - Some(touch_event::Union::PanEnd(pan_start)) => { + Some(touch_event::Union::PanEnd(pan_end)) => { call_main_service_pointer_input( "touch".to_string(), 6, - pan_start.x, - pan_start.y, + pan_end.x, + pan_end.y, ) } _ => Ok(()), diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 7ffcaac6d..23035a550 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -724,6 +724,49 @@ impl Session { send_pointer_device_event(evt, alt, ctrl, shift, command, self); } + pub fn send_touch_pan_event( + &self, + event: &str, + x: i32, + y: i32, + alt: bool, + ctrl: bool, + shift: bool, + command: bool, + ) { + let mut touch_evt = TouchEvent::new(); + match event { + "pan_start" => { + touch_evt.set_pan_start(TouchPanStart { + x, + y, + ..Default::default() + }); + } + "pan_update" => { + touch_evt.set_pan_update(TouchPanUpdate { + x, + y, + ..Default::default() + }); + } + "pan_end" => { + touch_evt.set_pan_end(TouchPanEnd { + x, + y, + ..Default::default() + }); + } + _ => { + log::warn!("unknown touch pan event: {}", event); + return; + } + }; + let mut evt = PointerDeviceEvent::new(); + evt.set_touch_event(touch_evt); + send_pointer_device_event(evt, alt, ctrl, shift, command, self); + } + pub fn send_mouse( &self, mask: i32, From 9e0feb0b64c14c97eccea3905923dbcc7acbaab5 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 01:02:27 +0800 Subject: [PATCH 376/612] tmp debug Signed-off-by: dignow --- flutter/lib/models/input_model.dart | 8 +++---- src/flutter_ffi.rs | 33 ++++++++++++++--------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index 9b1ec4437..5f851c54d 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -585,8 +585,8 @@ class InputModel { late final dynamic evtValue; if (type == 'pan_update') { evtValue = { - 'x': '${x.toInt()}', - 'y': '${y.toInt()}', + 'x': x.toInt(), + 'y': y.toInt(), }; } else { final isMoveTypes = ['pan_start', 'pan_end']; @@ -601,8 +601,8 @@ class InputModel { return; } evtValue = { - 'x': '${pos.x}', - 'y': '${pos.y}', + 'x': pos.x, + 'y': pos.y, }; } diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index cf5d23397..c6f8ca774 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1179,30 +1179,29 @@ pub fn session_send_pointer(session_id: SessionID, msg: String) { let command = m.get("command").is_some(); match (m.get("k"), m.get("v")) { (Some(k), Some(v)) => match k.as_str() { - Some("touch") => match v.as_str() { - Some("scale") => match v.get("v") { + Some("touch") => match v.get("t").and_then(|t| t.as_str()) { + Some("scale") => match v.get("v").and_then(|s| s.as_i64()) { Some(scale) => { - if let Some(scale) = scale.as_i64() { - if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { - session.send_touch_scale(scale as _, alt, ctrl, shift, command); - } + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + session.send_touch_scale(scale as _, alt, ctrl, shift, command); } } None => {} }, - Some(pan_event) => match (v.get("x"), v.get("y")) { - (Some(x), Some(y)) => { - if let Some(x) = x.as_i64() { - if let Some(y) = y.as_i64() { - if let Some(session) = SESSIONS.read().unwrap().get(&session_id) - { - session.send_touch_pan_event( - pan_event, x as _, y as _, alt, ctrl, shift, command, - ); - } + Some(pan_event) => match v.get("v") { + Some(v) => match ( + v.get("x").and_then(|x| x.as_i64()), + v.get("y").and_then(|y| y.as_i64()), + ) { + (Some(x), Some(y)) => { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + session.send_touch_pan_event( + pan_event, x as _, y as _, alt, ctrl, shift, command, + ); } } - } + _ => {} + }, _ => {} }, _ => {} From da16a799fa6851289bc18b081cfa4e715e6163f3 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 01:10:59 +0800 Subject: [PATCH 377/612] fix build Signed-off-by: dignow --- libs/scrap/src/android/ffi.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/scrap/src/android/ffi.rs b/libs/scrap/src/android/ffi.rs index 3801bbc87..78908a2ba 100644 --- a/libs/scrap/src/android/ffi.rs +++ b/libs/scrap/src/android/ffi.rs @@ -164,7 +164,7 @@ pub fn call_main_service_pointer_input(kind: String, mask: i32, x: i32, y: i32) ctx, "rustPointerInput", "(III)V", - &[JValue(kind), JValue::Int(mask), JValue::Int(x), JValue::Int(y)], + &[JValue::String(kind), JValue::Int(mask), JValue::Int(x), JValue::Int(y)], )?; return Ok(()); } else { From 9476d7fdbb7edb3b3ebcaa8326622918b71af227 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 01:24:39 +0800 Subject: [PATCH 378/612] try fix build Signed-off-by: dignow --- libs/scrap/src/android/ffi.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/scrap/src/android/ffi.rs b/libs/scrap/src/android/ffi.rs index 78908a2ba..ba775dfd3 100644 --- a/libs/scrap/src/android/ffi.rs +++ b/libs/scrap/src/android/ffi.rs @@ -163,8 +163,8 @@ pub fn call_main_service_pointer_input(kind: String, mask: i32, x: i32, y: i32) env.call_method( ctx, "rustPointerInput", - "(III)V", - &[JValue::String(kind), JValue::Int(mask), JValue::Int(x), JValue::Int(y)], + "(Ljava/lang/String;III)V", + &[JValue::Object(&JObject::from(name)), JValue::Int(mask), JValue::Int(x), JValue::Int(y)], )?; return Ok(()); } else { From e89ae475f6a4d03ca79d0382e71d1fb9ea816b40 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 03:01:46 +0800 Subject: [PATCH 379/612] fix build Signed-off-by: dignow --- .../main/kotlin/com/carriez/flutter_hbb/MainService.kt | 2 +- libs/scrap/src/android/ffi.rs | 5 +++-- src/server/connection.rs | 10 +++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt index f32203703..535a3f8c3 100644 --- a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt +++ b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt @@ -81,7 +81,7 @@ class MainService : Service() { Log.d(logTag,"Turn on Screen") wakeLock.acquire(5000) } else { - when (name) { + when (kind) { "touch" -> { InputService.ctx?.onTouchInput(mask, x, y) } diff --git a/libs/scrap/src/android/ffi.rs b/libs/scrap/src/android/ffi.rs index ba775dfd3..e9c60ef93 100644 --- a/libs/scrap/src/android/ffi.rs +++ b/libs/scrap/src/android/ffi.rs @@ -154,17 +154,18 @@ pub extern "system" fn Java_com_carriez_flutter_1hbb_MainService_init( } } -pub fn call_main_service_pointer_input(kind: String, mask: i32, x: i32, y: i32) -> JniResult<()> { +pub fn call_main_service_pointer_input(kind: &str, mask: i32, x: i32, y: i32) -> JniResult<()> { if let (Some(jvm), Some(ctx)) = ( JVM.read().unwrap().as_ref(), MAIN_SERVICE_CTX.read().unwrap().as_ref(), ) { let mut env = jvm.attach_current_thread_as_daemon()?; + let kind = env.new_string(kind)?; env.call_method( ctx, "rustPointerInput", "(Ljava/lang/String;III)V", - &[JValue::Object(&JObject::from(name)), JValue::Int(mask), JValue::Int(x), JValue::Int(y)], + &[JValue::Object(&JObject::from(kind)), JValue::Int(mask), JValue::Int(x), JValue::Int(y)], )?; return Ok(()); } else { diff --git a/src/server/connection.rs b/src/server/connection.rs index 972750fc2..f107d15a6 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -39,7 +39,7 @@ use hbb_common::{ tokio_util::codec::{BytesCodec, Framed}, }; #[cfg(any(target_os = "android", target_os = "ios"))] -use scrap::android::call_main_service_mouse_input; +use scrap::android::call_main_service_pointer_input; use serde_json::{json, value::Value}; use sha2::{Digest, Sha256}; #[cfg(not(any(target_os = "android", target_os = "ios")))] @@ -1547,7 +1547,7 @@ impl Connection { Some(message::Union::MouseEvent(me)) => { #[cfg(any(target_os = "android", target_os = "ios"))] if let Err(e) = - call_main_service_pointer_input("mouse".to_string(), me.mask, me.x, me.y) + call_main_service_pointer_input("mouse", me.mask, me.x, me.y) { log::debug!("call_main_service_pointer_input fail:{}", e); } @@ -1567,7 +1567,7 @@ impl Connection { Some(pointer_device_event::Union::TouchEvent(touch)) => match touch.union { Some(touch_event::Union::PanStart(pan_start)) => { call_main_service_pointer_input( - "touch".to_string(), + "touch", 4, pan_start.x, pan_start.y, @@ -1575,7 +1575,7 @@ impl Connection { } Some(touch_event::Union::PanUpdate(pan_update)) => { call_main_service_pointer_input( - "touch".to_string(), + "touch", 5, pan_update.x, pan_update.y, @@ -1583,7 +1583,7 @@ impl Connection { } Some(touch_event::Union::PanEnd(pan_end)) => { call_main_service_pointer_input( - "touch".to_string(), + "touch", 6, pan_end.x, pan_end.y, From b9c8df70196ca0eeb9f8115729a3775b1cd38600 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 03:55:03 +0800 Subject: [PATCH 380/612] debug Signed-off-by: dignow --- flutter/lib/models/input_model.dart | 7 +++++-- src/server/connection.rs | 11 ++--------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index 5f851c54d..eaff4ed6a 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -638,6 +638,7 @@ class InputModel { Offset offset, { bool onExit = false, }) { + debugPrint('REMOVE ME ========================= 111'); double x = offset.dx; double y = max(0.0, offset.dy); if (_checkPeerControlProtected(x, y)) { @@ -671,11 +672,12 @@ class InputModel { buttons: evt['buttons'], ); if (pos == null) { + debugPrint('REMOVE ME ========================= 222'); return; } if (type != '') { - evt['x'] = 0; - evt['y'] = 0; + evt['x'] = '0'; + evt['y'] = '0'; } else { evt['x'] = '${pos.x}'; evt['y'] = '${pos.y}'; @@ -689,6 +691,7 @@ class InputModel { kForwardMouseButton: 'forward' }; evt['buttons'] = mapButtons[evt['buttons']] ?? ''; + debugPrint('REMOVE ME ========================= 333 $evt'); bind.sessionSendMouse(sessionId: sessionId, msg: json.encode(modify(evt))); } diff --git a/src/server/connection.rs b/src/server/connection.rs index f107d15a6..ef8864499 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1546,9 +1546,7 @@ impl Connection { match msg.union { Some(message::Union::MouseEvent(me)) => { #[cfg(any(target_os = "android", target_os = "ios"))] - if let Err(e) = - call_main_service_pointer_input("mouse", me.mask, me.x, me.y) - { + if let Err(e) = call_main_service_pointer_input("mouse", me.mask, me.x, me.y) { log::debug!("call_main_service_pointer_input fail:{}", e); } #[cfg(not(any(target_os = "android", target_os = "ios")))] @@ -1582,12 +1580,7 @@ impl Connection { ) } Some(touch_event::Union::PanEnd(pan_end)) => { - call_main_service_pointer_input( - "touch", - 6, - pan_end.x, - pan_end.y, - ) + call_main_service_pointer_input("touch", 6, pan_end.x, pan_end.y) } _ => Ok(()), }, From be982d95ea548baeee37d805e198b67a2b97da8a Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 08:37:18 +0800 Subject: [PATCH 381/612] tmp build Signed-off-by: dignow --- .../src/main/kotlin/com/carriez/flutter_hbb/InputService.kt | 2 ++ flutter/lib/models/input_model.dart | 6 +----- 2 files changed, 3 insertions(+), 5 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 8e14a590d..84ef31793 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 @@ -190,8 +190,10 @@ class InputService : AccessibilityService() { startGesture(mouseX, mouseY) } TOUCH_PAN_END -> { + endGesture(mouseX, mouseY) mouseX = x * SCREEN_INFO.scale mouseY = y * SCREEN_INFO.scale + continueGesture(mouseX, mouseY) endGesture(mouseX, mouseY) } else -> {} diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index eaff4ed6a..971bbb7e5 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -379,8 +379,7 @@ class InputModel { var x = delta.dx.toInt(); var y = delta.dy.toInt(); - if (peerPlatform == kPeerPlatformLinux || - peerPlatform == kPeerPlatformAndroid) { + if (peerPlatform == kPeerPlatformLinux) { _trackpadScrollUnsent += (delta * _trackpadSpeed); x = _trackpadScrollUnsent.dx.truncate(); y = _trackpadScrollUnsent.dy.truncate(); @@ -638,7 +637,6 @@ class InputModel { Offset offset, { bool onExit = false, }) { - debugPrint('REMOVE ME ========================= 111'); double x = offset.dx; double y = max(0.0, offset.dy); if (_checkPeerControlProtected(x, y)) { @@ -672,7 +670,6 @@ class InputModel { buttons: evt['buttons'], ); if (pos == null) { - debugPrint('REMOVE ME ========================= 222'); return; } if (type != '') { @@ -691,7 +688,6 @@ class InputModel { kForwardMouseButton: 'forward' }; evt['buttons'] = mapButtons[evt['buttons']] ?? ''; - debugPrint('REMOVE ME ========================= 333 $evt'); bind.sessionSendMouse(sessionId: sessionId, msg: json.encode(modify(evt))); } From 5f7055e28286174440f7a8ee17ff7bec0d600af2 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 13:57:57 +0800 Subject: [PATCH 382/612] debug Signed-off-by: dignow --- .../src/main/kotlin/com/carriez/flutter_hbb/InputService.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 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 84ef31793..65b7931db 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 @@ -180,8 +180,8 @@ class InputService : AccessibilityService() { val y = max(0, _y) when (mask) { TOUCH_PAN_UPDATE -> { - mouseX += x * SCREEN_INFO.scale - mouseY += y * SCREEN_INFO.scale + mouseX -= x * SCREEN_INFO.scale + mouseY -= y * SCREEN_INFO.scale continueGesture(mouseX, mouseY) } TOUCH_PAN_START -> { @@ -193,8 +193,6 @@ class InputService : AccessibilityService() { endGesture(mouseX, mouseY) mouseX = x * SCREEN_INFO.scale mouseY = y * SCREEN_INFO.scale - continueGesture(mouseX, mouseY) - endGesture(mouseX, mouseY) } else -> {} } From 072430cef5c0452b4a1ea36b243b1eddc1d0fbdd Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 14:48:00 +0800 Subject: [PATCH 383/612] debug android scroll Signed-off-by: dignow --- .../kotlin/com/carriez/flutter_hbb/InputService.kt | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 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 65b7931db..55c57729e 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 @@ -176,23 +176,21 @@ class InputService : AccessibilityService() { @RequiresApi(Build.VERSION_CODES.N) fun onTouchInput(mask: Int, _x: Int, _y: Int) { - val x = max(0, _x) - val y = max(0, _y) when (mask) { TOUCH_PAN_UPDATE -> { - mouseX -= x * SCREEN_INFO.scale - mouseY -= y * SCREEN_INFO.scale + mouseX -= _x * SCREEN_INFO.scale + mouseY -= _y * SCREEN_INFO.scale continueGesture(mouseX, mouseY) } TOUCH_PAN_START -> { - mouseX = x * SCREEN_INFO.scale - mouseY = y * SCREEN_INFO.scale + mouseX = max(0, _x) * SCREEN_INFO.scale + mouseY = max(0, _y) * SCREEN_INFO.scale startGesture(mouseX, mouseY) } TOUCH_PAN_END -> { endGesture(mouseX, mouseY) - mouseX = x * SCREEN_INFO.scale - mouseY = y * SCREEN_INFO.scale + mouseX = max(0, _x) * SCREEN_INFO.scale + mouseY = max(0, _y) * SCREEN_INFO.scale } else -> {} } From 5b2358c97fb40978b30473b034a913c7d6137cce Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 14:49:49 +0800 Subject: [PATCH 384/612] debug android scroll Signed-off-by: dignow --- .../app/src/main/kotlin/com/carriez/flutter_hbb/InputService.kt | 2 ++ 1 file changed, 2 insertions(+) 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 55c57729e..203558968 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 @@ -180,6 +180,8 @@ class InputService : AccessibilityService() { TOUCH_PAN_UPDATE -> { mouseX -= _x * SCREEN_INFO.scale mouseY -= _y * SCREEN_INFO.scale + mouseX = max(0, mouseX); + mouseY = max(0, mouseY); continueGesture(mouseX, mouseY) } TOUCH_PAN_START -> { From 6368ab691c47f6292e2156c2f3734fb46f45fa6e Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 16:08:30 +0800 Subject: [PATCH 385/612] simple refactor, move code from flutter_ffi.rs to flutter.rs Signed-off-by: dignow --- src/flutter.rs | 79 ++++++++++++++++++++++++++++++++++++++++++++++ src/flutter_ffi.rs | 40 +---------------------- 2 files changed, 80 insertions(+), 39 deletions(-) diff --git a/src/flutter.rs b/src/flutter.rs index 52190ce2e..32be6b1c3 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -1130,6 +1130,85 @@ pub fn stop_global_event_stream(app_type: String) { let _ = GLOBAL_EVENT_STREAM.write().unwrap().remove(&app_type); } +#[inline] +fn session_send_touch_scale( + session_id: SessionID, + v: &serde_json::Value, + alt: bool, + ctrl: bool, + shift: bool, + command: bool, +) { + match v.get("v").and_then(|s| s.as_i64()) { + Some(scale) => { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + session.send_touch_scale(scale as _, alt, ctrl, shift, command); + } + } + None => {} + } +} + +#[inline] +fn session_send_touch_pan( + session_id: SessionID, + v: &serde_json::Value, + pan_event: &str, + alt: bool, + ctrl: bool, + shift: bool, + command: bool, +) { + match v.get("v") { + Some(v) => match ( + v.get("x").and_then(|x| x.as_i64()), + v.get("y").and_then(|y| y.as_i64()), + ) { + (Some(x), Some(y)) => { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + session + .send_touch_pan_event(pan_event, x as _, y as _, alt, ctrl, shift, command); + } + } + _ => {} + }, + _ => {} + } +} + +fn session_send_touch_event( + session_id: SessionID, + v: &serde_json::Value, + alt: bool, + ctrl: bool, + shift: bool, + command: bool, +) { + match v.get("t").and_then(|t| t.as_str()) { + Some("scale") => session_send_touch_scale(session_id, v, alt, ctrl, shift, command), + Some(pan_event) => { + session_send_touch_pan(session_id, v, pan_event, alt, ctrl, shift, command) + } + _ => {} + } +} + +pub fn session_send_pointer(session_id: SessionID, msg: String) { + if let Ok(m) = serde_json::from_str::>(&msg) { + let alt = m.get("alt").is_some(); + let ctrl = m.get("ctrl").is_some(); + let shift = m.get("shift").is_some(); + let command = m.get("command").is_some(); + match (m.get("k"), m.get("v")) { + (Some(k), Some(v)) => match k.as_str() { + Some("touch") => session_send_touch_event(session_id, v, alt, ctrl, shift, command), + _ => {} + }, + _ => {} + } + } +} + #[no_mangle] unsafe extern "C" fn get_rgba() {} diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index c6f8ca774..34a1b61e3 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1172,45 +1172,7 @@ pub fn main_clear_ab() { } pub fn session_send_pointer(session_id: SessionID, msg: String) { - if let Ok(m) = serde_json::from_str::>(&msg) { - let alt = m.get("alt").is_some(); - let ctrl = m.get("ctrl").is_some(); - let shift = m.get("shift").is_some(); - let command = m.get("command").is_some(); - match (m.get("k"), m.get("v")) { - (Some(k), Some(v)) => match k.as_str() { - Some("touch") => match v.get("t").and_then(|t| t.as_str()) { - Some("scale") => match v.get("v").and_then(|s| s.as_i64()) { - Some(scale) => { - if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { - session.send_touch_scale(scale as _, alt, ctrl, shift, command); - } - } - None => {} - }, - Some(pan_event) => match v.get("v") { - Some(v) => match ( - v.get("x").and_then(|x| x.as_i64()), - v.get("y").and_then(|y| y.as_i64()), - ) { - (Some(x), Some(y)) => { - if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { - session.send_touch_pan_event( - pan_event, x as _, y as _, alt, ctrl, shift, command, - ); - } - } - _ => {} - }, - _ => {} - }, - _ => {} - }, - _ => {} - }, - _ => {} - } - } + super::flutter::session_send_pointer(session_id, msg); } pub fn session_send_mouse(session_id: SessionID, msg: String) { From 72cfe053232b4dfd1ca7b5f4015c343a238a9368 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Thu, 10 Aug 2023 11:04:20 +0200 Subject: [PATCH 386/612] Update Italian language --- src/lang/it.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 8dac0ba73..d613f75c3 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Ordina etichette"), ("Open connection in new tab", "Apri connessione in una nuova scheda"), ("Move tab to new window", "Sposta scheda nella finestra successiva"), - ("Can not be empty", ""), - ("Already exists", ""), + ("Can not be empty", "Non può essere vuoto"), + ("Already exists", "Esiste già"), ].iter().cloned().collect(); } From eb8231af1403b970e815f6328227b0e3a1b72d13 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 10 Aug 2023 17:16:53 +0800 Subject: [PATCH 387/612] delete ab cache and show login button on http 401 Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 30 +++++++++++++++++++++++------- flutter/lib/models/user_model.dart | 13 +++++++++---- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index e24ccf4fe..cd9a41252 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -55,13 +55,24 @@ class AbModel { abError.value = ""; } final api = "${await bind.mainGetApiServer()}/api/ab"; + int? statusCode; try { var authHeaders = getHttpHeaders(); authHeaders['Content-Type'] = "application/json"; authHeaders['Accept-Encoding'] = "gzip"; final resp = await http.get(Uri.parse(api), headers: authHeaders); + statusCode = resp.statusCode; if (resp.body.isNotEmpty && resp.body.toLowerCase() != "null") { - Map json = jsonDecode(utf8.decode(resp.bodyBytes)); + Map json; + try { + json = jsonDecode(utf8.decode(resp.bodyBytes)); + } catch (e) { + if (resp.statusCode != 200) { + BotToast.showText( + contentColor: Colors.red, text: 'HTTP ${resp.statusCode}'); + } + rethrow; + } if (json.containsKey('error')) { abError.value = json['error']; } else if (json.containsKey('data')) { @@ -81,28 +92,33 @@ class AbModel { peers.add(Peer.fromJson(peer)); } } + save(); // save on success } } } } catch (err) { - reset(); abError.value = err.toString(); } finally { abLoading.value = false; initialized = true; sync_all_from_recent = true; _timerCounter = 0; - save(); + if (abError.isNotEmpty) { + if (statusCode == 401) { + gFFI.userModel.reset(clearAbCache: true); + } else { + reset(clearCache: false); + } + } } } - Future reset() async { - abError.value = ''; + Future reset({bool clearCache = false}) async { await bind.mainSetLocalOption(key: "selected-tags", value: ''); tags.clear(); peers.clear(); initialized = false; - await bind.mainClearAb(); + if (clearCache) await bind.mainClearAb(); } void addId(String id, String alias, List tags) { @@ -181,12 +197,12 @@ class AbModel { try { await http.Client().send(request); // await pullAb(quiet: true); + save(); // save on success } catch (e) { BotToast.showText(contentColor: Colors.red, text: e.toString()); } finally { sync_all_from_recent = true; _timerCounter = 0; - save(); } } diff --git a/flutter/lib/models/user_model.dart b/flutter/lib/models/user_model.dart index 003577ba0..896d7c564 100644 --- a/flutter/lib/models/user_model.dart +++ b/flutter/lib/models/user_model.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:convert'; +import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/common/hbbs/hbbs.dart'; import 'package:get/get.dart'; @@ -44,7 +45,7 @@ class UserModel { refreshingUser = false; final status = response.statusCode; if (status == 401 || status == 400) { - reset(); + reset(clearAbCache: status == 401); return; } final data = json.decode(utf8.decode(response.bodyBytes)); @@ -83,10 +84,10 @@ class UserModel { } } - Future reset() async { + Future reset({bool clearAbCache = false}) async { await bind.mainSetLocalOption(key: 'access_token', value: ''); await bind.mainSetLocalOption(key: 'user_info', value: ''); - await gFFI.abModel.reset(); + await gFFI.abModel.reset(clearCache: clearAbCache); await gFFI.groupModel.reset(); userName.value = ''; } @@ -118,7 +119,7 @@ class UserModel { } catch (e) { debugPrint("request /api/logout failed: err=$e"); } finally { - await reset(); + await reset(clearAbCache: true); gFFI.dialogManager.dismissByTag(tag); } } @@ -135,6 +136,10 @@ class UserModel { body = jsonDecode(utf8.decode(resp.bodyBytes)); } catch (e) { debugPrint("login: jsonDecode resp body failed: ${e.toString()}"); + if (resp.statusCode != 200) { + BotToast.showText( + contentColor: Colors.red, text: 'HTTP ${resp.statusCode}'); + } rethrow; } if (resp.statusCode != 200) { From d54c96e455a9f6e7cef36ada9dce19cfe0c5dd51 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Thu, 10 Aug 2023 12:09:56 +0200 Subject: [PATCH 388/612] Update de.rs --- src/lang/de.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index c33510135..010c37abe 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -454,7 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Voice call", "Sprachanruf"), ("Text chat", "Text-Chat"), ("Stop voice call", "Sprachanruf beenden"), - ("relay_hint_tip", "Wenn eine direkte Verbindung nicht möglich ist, können Sie versuchen, eine Verbindung über einen Relay-Server herzustellen. \nWenn Sie eine Relay-Verbindung beim ersten Versuch herstellen möchten, können Sie das Suffix \"/r\" an die ID anhängen oder die Option \"Immer über Relay-Server verbinden\" in der Liste der letzten Sitzungen auswählen, sofern diese vorhanden ist."), + ("relay_hint_tip", "Wenn eine direkte Verbindung nicht möglich ist, können Sie versuchen, eine Verbindung über einen Relay-Server herzustellen.\nWenn Sie eine Relay-Verbindung beim ersten Versuch herstellen möchten, können Sie das Suffix \"/r\" an die ID anhängen oder die Option \"Immer über Relay-Server verbinden\" in der Liste der letzten Sitzungen auswählen, sofern diese vorhanden ist."), ("Reconnect", "Erneut verbinden"), ("Codec", "Codec"), ("Resolution", "Auflösung"), @@ -526,7 +526,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sort tags", "Tags sortieren"), ("Open connection in new tab", "Verbindung in neuem Tab öffnen"), ("Move tab to new window", "Tab in neues Fenster verschieben"), - ("Can not be empty", ""), - ("Already exists", ""), + ("Can not be empty", "Darf nicht leer sein"), + ("Already exists", "Existiert bereits"), ].iter().cloned().collect(); } From 7921be45f56428a979dbe33e29f2dd70d71a99dc Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 19:48:26 +0800 Subject: [PATCH 389/612] fix saving peer window pos Signed-off-by: dignow --- flutter/lib/common.dart | 2 +- src/client.rs | 6 +++++- src/flutter_ffi.rs | 16 +++++----------- src/ui_interface.rs | 12 ++++++++++++ 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 799894f7e..328dd4e7a 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1436,7 +1436,7 @@ Future _saveSessionWindowPosition( windowId, kWindowEventGetRemoteList, null); if (remoteList != null) { for (final peerId in remoteList.split(',')) { - bind.sessionSetFlutterConfigByPeerId( + bind.mainSetPeerFlutterConfigSync( id: peerId, k: kWindowPrefix + windowType.name, v: pos.toString()); } } diff --git a/src/client.rs b/src/client.rs index e9d319685..b71668a33 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1214,7 +1214,11 @@ impl LoginConfigHandler { /// * `v` - value of option pub fn save_ui_flutter(&mut self, k: String, v: String) { let mut config = self.load_config(); - config.ui_flutter.insert(k, v); + if v.is_empty() { + config.ui_flutter.remove(&k); + } else { + config.ui_flutter.insert(k, v); + } self.save_config(config); } diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index ef4c9e2ba..8e0eda98b 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -219,17 +219,6 @@ pub fn session_get_flutter_config_by_peer_id(id: String, k: String) -> Option SyncReturn { let k = TEXTURE_RENDER_KEY.fetch_add(1, Ordering::SeqCst) + 1; SyncReturn(k) @@ -812,6 +801,11 @@ pub fn main_get_peer_flutter_config_sync(id: String, k: String) -> SyncReturn SyncReturn<()> { + set_peer_flutter_config(id, k, v); + SyncReturn(()) +} + pub fn main_set_peer_option(id: String, key: String, value: String) { set_peer_option(id, key, value) } diff --git a/src/ui_interface.rs b/src/ui_interface.rs index b5f0cdb18..019cb2d5e 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -215,6 +215,18 @@ pub fn get_peer_flutter_config(id: String, name: String) -> String { c.ui_flutter.get(&name).unwrap_or(&"".to_owned()).to_owned() } +#[inline] +#[cfg(feature = "flutter")] +pub fn set_peer_flutter_config(id: String, name: String, value: String) { + let mut c = PeerConfig::load(&id); + if value.is_empty() { + c.ui_flutter.remove(&name); + } else { + c.ui_flutter.insert(name, value); + } + c.store(&id); +} + #[inline] pub fn set_peer_option(id: String, name: String, value: String) { let mut c = PeerConfig::load(&id); From f502eb0ea5d6eb521e069fe3853ed74b277dec57 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Thu, 10 Aug 2023 18:31:24 +0530 Subject: [PATCH 390/612] enable tooltip for menu buttons Signed-off-by: Sahil Yeole --- .../lib/desktop/widgets/remote_toolbar.dart | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index dcf78b27b..5c04d5e8e 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -1546,7 +1546,7 @@ class _CloseMenu extends StatelessWidget { class _IconMenuButton extends StatefulWidget { final String? assetName; final Widget? icon; - final String? tooltip; + final String tooltip; final Color color; final Color hoverColor; final VoidCallback? onPressed; @@ -1557,7 +1557,7 @@ class _IconMenuButton extends StatefulWidget { Key? key, this.assetName, this.icon, - this.tooltip, + required this.tooltip, required this.color, required this.hoverColor, required this.onPressed, @@ -1595,14 +1595,17 @@ class _IconMenuButtonState extends State<_IconMenuButton> { hover = value; }), onPressed: widget.onPressed, - child: Material( - type: MaterialType.transparency, - child: Ink( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(_ToolbarTheme.iconRadius), - color: hover ? widget.hoverColor : widget.color, - ), - child: icon)), + child: Tooltip( + message: translate(widget.tooltip), + child: Material( + type: MaterialType.transparency, + child: Ink( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(_ToolbarTheme.iconRadius), + color: hover ? widget.hoverColor : widget.color, + ), + child: icon)), + ) ), ).marginSymmetric( horizontal: widget.hMargin ?? _ToolbarTheme.buttonHMargin, @@ -1669,15 +1672,18 @@ class _IconSubmenuButtonState extends State<_IconSubmenuButton> { onHover: (value) => setState(() { hover = value; }), - child: Material( - type: MaterialType.transparency, - child: Ink( - decoration: BoxDecoration( - borderRadius: + child: Tooltip( + message: translate(widget.tooltip), + child: Material( + type: MaterialType.transparency, + child: Ink( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(_ToolbarTheme.iconRadius), - color: hover ? widget.hoverColor : widget.color, + color: hover ? widget.hoverColor : widget.color, + ), + child: icon)) ), - child: icon)), menuChildren: widget.menuChildren .map((e) => _buildPointerTrackWidget(e, widget.ffi)) .toList())); @@ -2003,6 +2009,7 @@ class _MultiMonitorMenu extends StatelessWidget { Obx(() { RxInt display = CurrentDisplayState.find(id); return _IconMenuButton( + tooltip: "Multi monitor", topLevel: false, color: i == display.value ? _ToolbarTheme.blueColor From 66b90c2a08e437eb5517654ba7e6969361b57ddc Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Thu, 10 Aug 2023 18:32:02 +0530 Subject: [PATCH 391/612] add global tooltip wait duration Signed-off-by: Sahil Yeole --- flutter/lib/common.dart | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 799894f7e..91e514a76 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -219,6 +219,13 @@ class MyTheme { ), ); + //tooltip + static TooltipThemeData tooltipTheme() { + return TooltipThemeData( + waitDuration: Duration(seconds: 1, milliseconds: 500), + ); + } + // Dialogs static const double dialogPadding = 24; @@ -288,6 +295,7 @@ class MyTheme { tabBarTheme: const TabBarTheme( labelColor: Colors.black87, ), + tooltipTheme: tooltipTheme(), splashColor: isDesktop ? Colors.transparent : null, highlightColor: isDesktop ? Colors.transparent : null, splashFactory: isDesktop ? NoSplash.splashFactory : null, @@ -377,6 +385,7 @@ class MyTheme { scrollbarTheme: ScrollbarThemeData( thumbColor: MaterialStateProperty.all(Colors.grey[500]), ), + tooltipTheme: tooltipTheme(), splashColor: isDesktop ? Colors.transparent : null, highlightColor: isDesktop ? Colors.transparent : null, splashFactory: isDesktop ? NoSplash.splashFactory : null, From 1be383e50eab75ce6bfe3ec19ae4839b00f8f5b2 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 10 Aug 2023 20:35:41 +0800 Subject: [PATCH 392/612] not show waitingForImage when already get first image Signed-off-by: 21pages --- flutter/lib/models/model.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 9c4ff281c..4b481dfe6 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -425,6 +425,7 @@ class FfiModel with ChangeNotifier { closeConnection(); } + if (_waitForFirstImage[sessionId] == false) return; dialogManager.show( (setState, close, context) => CustomAlertDialog( title: null, From 16c94fb1d06ee6f8b5ca9609cf751fafa1664990 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 10 Aug 2023 21:32:26 +0800 Subject: [PATCH 393/612] hide multiselect icon if peers is empty Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_tab_page.dart | 1 + flutter/lib/common/widgets/peers_view.dart | 51 ++++++++++--------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index a034ec13d..761a37011 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -262,6 +262,7 @@ class _PeerTabPageState extends State Widget _createMultiSelection() { final textColor = Theme.of(context).textTheme.titleLarge?.color; final model = Provider.of(context); + if (model.currentTabCachedPeers.isEmpty) return Offstage(); return Container( padding: EdgeInsets.all(4.0), child: InkWell( diff --git a/flutter/lib/common/widgets/peers_view.dart b/flutter/lib/common/widgets/peers_view.dart index e9af1c6e3..c34299fd6 100644 --- a/flutter/lib/common/widgets/peers_view.dart +++ b/flutter/lib/common/widgets/peers_view.dart @@ -124,31 +124,34 @@ class _PeersViewState extends State<_PeersView> with WindowListener { Widget build(BuildContext context) { return ChangeNotifierProvider( create: (context) => widget.peers, - child: Consumer( - builder: (context, peers, child) => peers.peers.isEmpty - ? Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon( - Icons.sentiment_very_dissatisfied_rounded, - color: Theme.of(context).tabBarTheme.labelColor, - size: 40, - ).paddingOnly(bottom: 10), - Text( - translate( - _emptyMessages[widget.peers.loadEvent] ?? 'Empty', - ), - textAlign: TextAlign.center, - style: TextStyle( - color: Theme.of(context).tabBarTheme.labelColor, - ), - ), - ], + child: Consumer(builder: (context, peers, child) { + if (peers.peers.isEmpty) { + gFFI.peerTabModel.setCurrentTabCachedPeers([]); + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + Icons.sentiment_very_dissatisfied_rounded, + color: Theme.of(context).tabBarTheme.labelColor, + size: 40, + ).paddingOnly(bottom: 10), + Text( + translate( + _emptyMessages[widget.peers.loadEvent] ?? 'Empty', + ), + textAlign: TextAlign.center, + style: TextStyle( + color: Theme.of(context).tabBarTheme.labelColor, + ), ), - ) - : _buildPeersView(peers), - ), + ], + ), + ); + } else { + return _buildPeersView(peers); + } + }), ); } From 7f6b18fc9cfb8b7feeaa6f9924214c6053ebd166 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 10 Aug 2023 22:27:35 +0800 Subject: [PATCH 394/612] change ffi flutter_config to flutter_option Signed-off-by: dignow --- flutter/lib/common.dart | 10 +++---- flutter/lib/common/widgets/peer_tab_page.dart | 10 +++---- flutter/lib/common/widgets/peers_view.dart | 4 +-- .../lib/desktop/widgets/remote_toolbar.dart | 4 +-- flutter/lib/models/model.dart | 4 +-- flutter/lib/models/peer_tab_model.dart | 2 +- libs/hbb_common/src/config.rs | 4 +-- src/flutter_ffi.rs | 30 +++++++++---------- src/ui_interface.rs | 12 ++++---- src/ui_session_interface.rs | 4 +-- 10 files changed, 42 insertions(+), 42 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 328dd4e7a..938be7888 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1422,7 +1422,7 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { debugPrint( "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}"); - await bind.setLocalFlutterConfig( + await bind.setLocalFlutterOption( k: kWindowPrefix + type.name, v: pos.toString()); if (type == WindowType.RemoteDesktop && windowId != null) { @@ -1436,7 +1436,7 @@ Future _saveSessionWindowPosition( windowId, kWindowEventGetRemoteList, null); if (remoteList != null) { for (final peerId in remoteList.split(',')) { - bind.mainSetPeerFlutterConfigSync( + bind.mainSetPeerFlutterOptionSync( id: peerId, k: kWindowPrefix + windowType.name, v: pos.toString()); } } @@ -1551,15 +1551,15 @@ Future restoreWindowPosition(WindowType type, // then we may need to get the position by reading the peer config. // Because the session may not be read at this time. if (desktopType == DesktopType.main) { - pos = bind.mainGetPeerFlutterConfigSync( + pos = bind.mainGetPeerFlutterOptionSync( id: peerId, k: kWindowPrefix + type.name); } else { - pos = await bind.sessionGetFlutterConfigByPeerId( + pos = await bind.sessionGetFlutterOptionByPeerId( id: peerId, k: kWindowPrefix + type.name); } isRemotePeerPos = pos != null; } - pos ??= bind.getLocalFlutterConfig(k: kWindowPrefix + type.name); + pos ??= bind.getLocalFlutterOption(k: kWindowPrefix + type.name); var lpos = LastWindowPosition.loadFromString(pos); if (lpos == null) { diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index a034ec13d..bf325c920 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -64,7 +64,7 @@ class _PeerTabPageState extends State @override void initState() { - final uiType = bind.getLocalFlutterConfig(k: 'peer-card-ui-type'); + final uiType = bind.getLocalFlutterOption(k: 'peer-card-ui-type'); if (uiType != '') { peerCardUiType.value = int.parse(uiType) == PeerUiType.list.index ? PeerUiType.list @@ -174,7 +174,7 @@ class _PeerTabPageState extends State ).paddingSymmetric(horizontal: 4), onTap: () async { await handleTabSelection(t); - await bind.setLocalFlutterConfig( + await bind.setLocalFlutterOption( k: 'peer-tab-index', v: t.toString()); }, onHover: (value) => hover.value = value, @@ -244,7 +244,7 @@ class _PeerTabPageState extends State onTap: () async { final type = types.elementAt( peerCardUiType.value == types.elementAt(0) ? 1 : 0); - await bind.setLocalFlutterConfig( + await bind.setLocalFlutterOption( k: 'peer-card-ui-type', v: type.index.toString()); peerCardUiType.value = type; }, @@ -561,7 +561,7 @@ class _PeerSortDropdownState extends State { void initState() { if (!PeerSortType.values.contains(peerSort.value)) { peerSort.value = PeerSortType.remoteId; - bind.setLocalFlutterConfig( + bind.setLocalFlutterOption( k: "peer-sorting", v: peerSort.value, ); @@ -591,7 +591,7 @@ class _PeerSortDropdownState extends State { dense: true, (String? v) async { if (v != null) { peerSort.value = v; - await bind.setLocalFlutterConfig( + await bind.setLocalFlutterOption( k: "peer-sorting", v: peerSort.value, ); diff --git a/flutter/lib/common/widgets/peers_view.dart b/flutter/lib/common/widgets/peers_view.dart index e9af1c6e3..5b004b52a 100644 --- a/flutter/lib/common/widgets/peers_view.dart +++ b/flutter/lib/common/widgets/peers_view.dart @@ -41,7 +41,7 @@ class LoadEvent { final peerSearchText = "".obs; /// for peer sort, global obs value -final peerSort = bind.getLocalFlutterConfig(k: 'peer-sorting').obs; +final peerSort = bind.getLocalFlutterOption(k: 'peer-sorting').obs; // list for listener final obslist = [peerSearchText, peerSort].obs; @@ -261,7 +261,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener { // fallback to id sorting if (!PeerSortType.values.contains(sortedBy)) { sortedBy = PeerSortType.remoteId; - bind.setLocalFlutterConfig( + bind.setLocalFlutterOption( k: "peer-sorting", v: sortedBy, ); diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index dcf78b27b..d049804e2 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -36,7 +36,7 @@ class ToolbarState { late RxBool _pin; ToolbarState() { - final s = bind.getLocalFlutterConfig(k: kStoreKey); + final s = bind.getLocalFlutterOption(k: kStoreKey); if (s.isEmpty) { _initSet(false, false); return; @@ -89,7 +89,7 @@ class ToolbarState { } _savePin() async { - bind.setLocalFlutterConfig( + bind.setLocalFlutterOption( k: kStoreKey, v: jsonEncode({'pin': _pin.value})); } diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 9c4ff281c..3f546fc22 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1862,14 +1862,14 @@ Future setCanvasConfig( p['yCanvas'] = yCanvas; p['scale'] = scale; p['currentDisplay'] = currentDisplay; - await bind.sessionSetFlutterConfig( + await bind.sessionSetFlutterOption( sessionId: sessionId, k: canvasKey, v: jsonEncode(p)); } Future?> getCanvasConfig(SessionID sessionId) async { if (!isWebDesktop) return null; var p = - await bind.sessionGetFlutterConfig(sessionId: sessionId, k: canvasKey); + await bind.sessionGetFlutterOption(sessionId: sessionId, k: canvasKey); if (p == null || p.isEmpty) return null; try { Map m = json.decode(p); diff --git a/flutter/lib/models/peer_tab_model.dart b/flutter/lib/models/peer_tab_model.dart index e7f4192cd..2e65e64bd 100644 --- a/flutter/lib/models/peer_tab_model.dart +++ b/flutter/lib/models/peer_tab_model.dart @@ -51,7 +51,7 @@ class PeerTabModel with ChangeNotifier { PeerTabModel(this.parent) { // init currentTab _currentTab = - int.tryParse(bind.getLocalFlutterConfig(k: 'peer-tab-index')) ?? 0; + int.tryParse(bind.getLocalFlutterOption(k: 'peer-tab-index')) ?? 0; if (_currentTab < 0 || _currentTab >= tabNames.length) { _currentTab = 0; } diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 56ffa9a01..c3aa2cfd9 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -1290,7 +1290,7 @@ impl LocalConfig { } } - pub fn get_flutter_config(k: &str) -> String { + pub fn get_flutter_option(k: &str) -> String { if let Some(v) = LOCAL_CONFIG.read().unwrap().ui_flutter.get(k) { v.clone() } else { @@ -1298,7 +1298,7 @@ impl LocalConfig { } } - pub fn set_flutter_config(k: String, v: String) { + pub fn set_flutter_option(k: String, v: String) { let mut config = LOCAL_CONFIG.write().unwrap(); let v2 = if v.is_empty() { None } else { Some(&v) }; if v2 != config.ui_flutter.get(&k) { diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 8e0eda98b..7f7af71b4 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -197,23 +197,23 @@ pub fn session_toggle_option(session_id: SessionID, value: String) { } } -pub fn session_get_flutter_config(session_id: SessionID, k: String) -> Option { +pub fn session_get_flutter_option(session_id: SessionID, k: String) -> Option { if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { - Some(session.get_flutter_config(k)) + Some(session.get_flutter_option(k)) } else { None } } -pub fn session_set_flutter_config(session_id: SessionID, k: String, v: String) { +pub fn session_set_flutter_option(session_id: SessionID, k: String, v: String) { if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) { - session.save_flutter_config(k, v); + session.save_flutter_option(k, v); } } -pub fn session_get_flutter_config_by_peer_id(id: String, k: String) -> Option { +pub fn session_get_flutter_option_by_peer_id(id: String, k: String) -> Option { if let Some((_, session)) = SESSIONS.read().unwrap().iter().find(|(_, s)| s.id == id) { - Some(session.get_flutter_config(k)) + Some(session.get_flutter_option(k)) } else { None } @@ -224,12 +224,12 @@ pub fn get_next_texture_key() -> SyncReturn { SyncReturn(k) } -pub fn get_local_flutter_config(k: String) -> SyncReturn { - SyncReturn(ui_interface::get_local_flutter_config(k)) +pub fn get_local_flutter_option(k: String) -> SyncReturn { + SyncReturn(ui_interface::get_local_flutter_option(k)) } -pub fn set_local_flutter_config(k: String, v: String) { - ui_interface::set_local_flutter_config(k, v); +pub fn set_local_flutter_option(k: String, v: String) { + ui_interface::set_local_flutter_option(k, v); } pub fn get_local_kb_layout_type() -> SyncReturn { @@ -795,14 +795,14 @@ pub fn main_get_peer_option_sync(id: String, key: String) -> SyncReturn SyncReturn(get_peer_option(id, key)) } -// Sometimes we need to get the flutter config of a peer by reading the file. +// Sometimes we need to get the flutter option of a peer by reading the file. // Because the session may not be established yet. -pub fn main_get_peer_flutter_config_sync(id: String, k: String) -> SyncReturn { - SyncReturn(get_peer_flutter_config(id, k)) +pub fn main_get_peer_flutter_option_sync(id: String, k: String) -> SyncReturn { + SyncReturn(get_peer_flutter_option(id, k)) } -pub fn main_set_peer_flutter_config_sync(id: String, k: String, v: String) -> SyncReturn<()> { - set_peer_flutter_config(id, k, v); +pub fn main_set_peer_flutter_option_sync(id: String, k: String, v: String) -> SyncReturn<()> { + set_peer_flutter_option(id, k, v); SyncReturn(()) } diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 019cb2d5e..51f848457 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -168,14 +168,14 @@ pub fn set_local_option(key: String, value: String) { #[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))] #[inline] -pub fn get_local_flutter_config(key: String) -> String { - LocalConfig::get_flutter_config(&key) +pub fn get_local_flutter_option(key: String) -> String { + LocalConfig::get_flutter_option(&key) } #[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))] #[inline] -pub fn set_local_flutter_config(key: String, value: String) { - LocalConfig::set_flutter_config(key, value); +pub fn set_local_flutter_option(key: String, value: String) { + LocalConfig::set_flutter_option(key, value); } #[cfg(feature = "flutter")] @@ -210,14 +210,14 @@ pub fn get_peer_option(id: String, name: String) -> String { #[inline] #[cfg(feature = "flutter")] -pub fn get_peer_flutter_config(id: String, name: String) -> String { +pub fn get_peer_flutter_option(id: String, name: String) -> String { let c = PeerConfig::load(&id); c.ui_flutter.get(&name).unwrap_or(&"".to_owned()).to_owned() } #[inline] #[cfg(feature = "flutter")] -pub fn set_peer_flutter_config(id: String, name: String, value: String) { +pub fn set_peer_flutter_option(id: String, name: String, value: String) { let mut c = PeerConfig::load(&id); if value.is_empty() { c.ui_flutter.remove(&name); diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 7ffcaac6d..bbf6d0aec 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -197,11 +197,11 @@ impl Session { self.lc.write().unwrap().save_scroll_style(value); } - pub fn save_flutter_config(&mut self, k: String, v: String) { + pub fn save_flutter_option(&mut self, k: String, v: String) { self.lc.write().unwrap().save_ui_flutter(k, v); } - pub fn get_flutter_config(&self, k: String) -> String { + pub fn get_flutter_option(&self, k: String) -> String { self.lc.read().unwrap().get_ui_flutter(&k) } From 823632ccbaf6d481f231b378f7ae461347d062c4 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Thu, 10 Aug 2023 20:09:43 +0530 Subject: [PATCH 395/612] remove multi monitor tooltip Signed-off-by: Sahil Yeole --- flutter/lib/desktop/widgets/remote_toolbar.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 5c04d5e8e..b15c9d540 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -2009,7 +2009,7 @@ class _MultiMonitorMenu extends StatelessWidget { Obx(() { RxInt display = CurrentDisplayState.find(id); return _IconMenuButton( - tooltip: "Multi monitor", + tooltip: "", topLevel: false, color: i == display.value ? _ToolbarTheme.blueColor From 85e6ed32a1a8592848e0ce73eb201cc045b5c9a0 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 11 Aug 2023 08:34:14 +0800 Subject: [PATCH 396/612] tooltip for monitor icon --- flutter/lib/desktop/widgets/remote_toolbar.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 9cbcbf658..7136efc71 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -620,7 +620,7 @@ class _MonitorMenu extends StatelessWidget { topLevel: false, color: _ToolbarTheme.blueColor, hoverColor: _ToolbarTheme.hoverBlueColor, - tooltip: "", + tooltip: "#${i + 1} monitor", hMargin: 6, vMargin: 12, icon: Container( From 87600d36e4a06fb2414209e09e04a7ca0dc0ff2f Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 11 Aug 2023 08:37:02 +0800 Subject: [PATCH 397/612] remove not save peer config when version is zero Signed-off-by: 21pages --- src/client.rs | 4 ---- src/client/io_loop.rs | 11 ++++------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/client.rs b/src/client.rs index b71668a33..798550467 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1151,10 +1151,6 @@ impl LoginConfigHandler { /// /// * `config` - [`PeerConfig`] to save. pub fn save_config(&mut self, config: PeerConfig) { - if self.version == 0 { - log::info!("skip saving peer config {}", self.id); - return; - } config.store(&self.id); self.config = config; } diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index f8cdb3ea0..08c3a6a9b 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -850,11 +850,6 @@ impl Remote { } pub async fn sync_jobs_status_to_local(&mut self) -> bool { - let peer_version = self.handler.lc.read().unwrap().version; - if peer_version == 0 { - log::info!("skip saving job status"); - return false; - } log::info!("sync transfer job status"); let mut config: PeerConfig = self.handler.load_config(); let mut transfer_metas = TransferSerde::default(); @@ -867,8 +862,10 @@ impl Remote { transfer_metas.write_jobs.push(json_str); } log::info!("meta: {:?}", transfer_metas); - config.transfer = transfer_metas; - self.handler.save_config(config); + if config.transfer != transfer_metas { + config.transfer = transfer_metas; + self.handler.save_config(config); + } true } From fdd24dcb7252e3041a7a8cb92f7b4af46a706a9c Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 11 Aug 2023 11:38:26 +0800 Subject: [PATCH 398/612] fix temporary password not update right now when length changed Signed-off-by: 21pages --- flutter/lib/models/server_model.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 6e6dd2b82..e48ceef42 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -217,6 +217,9 @@ class ServerModel with ChangeNotifier { update = true; } if (_temporaryPasswordLength != temporaryPasswordLength) { + if (_temporaryPasswordLength.isNotEmpty) { + bind.mainUpdateTemporaryPassword(); + } _temporaryPasswordLength = temporaryPasswordLength; update = true; } From 71996c95090e7185a3b2c921fda7ee0b05d7cdd3 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 11 Aug 2023 13:19:23 +0800 Subject: [PATCH 399/612] fix --assign --- src/core_main.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index a6088d6b2..7e328d278 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -359,10 +359,15 @@ pub fn core_main() -> Option> { body["strategy_name"] = serde_json::json!(name); } let url = crate::ui_interface::get_api_server() + "/api/devices/cli"; - if let Err(err) = crate::post_request_sync(url, body.to_string(), &header) { - println!("{}", err); - } else { - println!("Done!"); + match crate::post_request_sync(url, body.to_string(), &header) { + Err(err) => println!("{}", err), + Ok(text) => { + if text.is_empty() { + println!("Done!"); + } else { + println!("{}", text); + } + } } } } else { From e2fdd6952456a0086f9b8e14f05352b4b804d2d6 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 11 Aug 2023 14:00:26 +0800 Subject: [PATCH 400/612] remove rs-ny.rustdesk.com --- libs/hbb_common/src/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index c3aa2cfd9..88df0e18e 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -90,7 +90,7 @@ const CHARS: &[char] = &[ 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ]; -pub const RENDEZVOUS_SERVERS: &[&str] = &["rs-ny.rustdesk.com", "rs-sg.rustdesk.com"]; +pub const RENDEZVOUS_SERVERS: &[&str] = &["rs-sg.rustdesk.com"]; pub const RS_PUB_KEY: &str = match option_env!("RS_PUB_KEY") { Some(key) if !key.is_empty() => key, From 26cd24d92f1a470ac949e389595ff5e7c70e27e0 Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 11 Aug 2023 12:01:57 +0800 Subject: [PATCH 401/612] fix saving frame, maximized Signed-off-by: dignow --- flutter/lib/common.dart | 101 ++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 35 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 6c3716f53..9b7b69855 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -222,7 +222,7 @@ class MyTheme { //tooltip static TooltipThemeData tooltipTheme() { return TooltipThemeData( - waitDuration: Duration(seconds: 1, milliseconds: 500), + waitDuration: Duration(seconds: 1, milliseconds: 500), ); } @@ -1394,14 +1394,26 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { late Offset position; late Size sz; late bool isMaximized; + setFrameIfMaximized() { + if (isMaximized) { + final pos = bind.getLocalFlutterOption(k: kWindowPrefix + type.name); + var lpos = LastWindowPosition.loadFromString(pos); + position = Offset( + lpos?.offsetWidth ?? position.dx, lpos?.offsetHeight ?? position.dy); + sz = Size(lpos?.width ?? sz.width, lpos?.height ?? sz.height); + } + } + switch (type) { case WindowType.Main: + isMaximized = await windowManager.isMaximized(); position = await windowManager.getPosition(); sz = await windowManager.getSize(); - isMaximized = await windowManager.isMaximized(); + setFrameIfMaximized(); break; default: final wc = WindowController.fromWindowId(windowId!); + isMaximized = await wc.isMaximized(); final Rect frame; try { frame = await wc.getFrame(); @@ -1411,7 +1423,7 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { } position = frame.topLeft; sz = frame.size; - isMaximized = await wc.isMaximized(); + setFrameIfMaximized(); break; } if (Platform.isWindows) { @@ -1429,24 +1441,43 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { final pos = LastWindowPosition( sz.width, sz.height, position.dx, position.dy, isMaximized); debugPrint( - "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}"); + "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}, isMaximized:${pos.isMaximized}"); await bind.setLocalFlutterOption( k: kWindowPrefix + type.name, v: pos.toString()); if (type == WindowType.RemoteDesktop && windowId != null) { - await _saveSessionWindowPosition(type, windowId, pos); + await _saveSessionWindowPosition(type, windowId, isMaximized, pos); } } -Future _saveSessionWindowPosition( - WindowType windowType, int windowId, LastWindowPosition pos) async { +Future _saveSessionWindowPosition(WindowType windowType, int windowId, + bool isMaximized, LastWindowPosition pos) async { final remoteList = await DesktopMultiWindow.invokeMethod( windowId, kWindowEventGetRemoteList, null); + getPeerPos(String peerId) { + if (isMaximized) { + final peerPos = bind.mainGetPeerFlutterOptionSync( + id: peerId, k: kWindowPrefix + windowType.name); + var lpos = LastWindowPosition.loadFromString(peerPos); + return LastWindowPosition( + lpos?.width ?? pos.offsetWidth, + lpos?.height ?? pos.offsetHeight, + lpos?.offsetWidth ?? pos.offsetWidth, + lpos?.offsetHeight ?? pos.offsetHeight, + isMaximized) + .toString(); + } else { + return pos.toString(); + } + } + if (remoteList != null) { for (final peerId in remoteList.split(',')) { bind.mainSetPeerFlutterOptionSync( - id: peerId, k: kWindowPrefix + windowType.name, v: pos.toString()); + id: peerId, + k: kWindowPrefix + windowType.name, + v: getPeerPos(peerId)); } } } @@ -1529,7 +1560,7 @@ Future _adjustRestoreMainWindowOffset( if ((left + minWidth) > frameRight! || (top + minWidth) > frameBottom! || (left + width - minWidth) < frameLeft || - (top - minWidth) < frameTop!) { + top < frameTop!) { return null; } else { return Offset(left, top); @@ -1554,7 +1585,7 @@ Future restoreWindowPosition(WindowType type, bool isRemotePeerPos = false; String? pos; // No need to check mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs) - // Though "open in tabs" is true and the new window restore peer position, it's ok. + // Though "open in tabs" is true and the new window restore peer position, it's ok. if (type == WindowType.RemoteDesktop && windowId != null && peerId != null) { // If the restore position is called by main window, and the peer id is not null // then we may need to get the position by reading the peer config. @@ -1586,42 +1617,36 @@ Future restoreWindowPosition(WindowType type, } } + final size = await _adjustRestoreMainWindowSize(lpos.width, lpos.height); + final offset = await _adjustRestoreMainWindowOffset( + lpos.offsetWidth, + lpos.offsetHeight, + size.width, + size.height, + ); + debugPrint( + "restore lpos: ${size.width}/${size.height}, offset:${offset?.dx}/${offset?.dy}"); + switch (type) { case WindowType.Main: - if (lpos.isMaximized == true) { - await windowManager.maximize(); - } else { - final size = - await _adjustRestoreMainWindowSize(lpos.width, lpos.height); - final offset = await _adjustRestoreMainWindowOffset( - lpos.offsetWidth, - lpos.offsetHeight, - size.width, - size.height, - ); - await windowManager.setSize(size); + restorePos() async { if (offset == null) { await windowManager.center(); } else { await windowManager.setPosition(offset); } } + if (lpos.isMaximized == true) { + await restorePos(); + await windowManager.maximize(); + } else { + await windowManager.setSize(size); + await restorePos(); + } return true; default: final wc = WindowController.fromWindowId(windowId!); - if (lpos.isMaximized == true) { - await wc.maximize(); - } else { - final size = - await _adjustRestoreMainWindowSize(lpos.width, lpos.height); - final offset = await _adjustRestoreMainWindowOffset( - lpos.offsetWidth, - lpos.offsetHeight, - size.width, - size.height, - ); - debugPrint( - "restore lpos: ${size.width}/${size.height}, offset:${offset?.dx}/${offset?.dy}"); + restoreFrame() async { if (offset == null) { await wc.center(); } else { @@ -1630,6 +1655,12 @@ Future restoreWindowPosition(WindowType type, await wc.setFrame(frame); } } + if (lpos.isMaximized == true) { + await restoreFrame(); + await wc.maximize(); + } else { + await restoreFrame(); + } break; } return false; From 14cbd842f5506776177c943c72387e1ed06ed225 Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 11 Aug 2023 15:01:42 +0800 Subject: [PATCH 402/612] fix https://github.com/rustdesk/rustdesk/issues/5340 Signed-off-by: dignow --- flutter/lib/common.dart | 16 +++++++++++++--- flutter/lib/desktop/widgets/tabbar_widget.dart | 1 - 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 9b7b69855..80af61bd8 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1699,7 +1699,7 @@ StreamSubscription? listenUniLinks({handleByFlutter = true}) { } final sub = uriLinkStream.listen((Uri? uri) { - debugPrint("A uri was received: $uri."); + debugPrint("A uri was received: $uri. handleByFlutter $handleByFlutter"); if (uri != null) { if (handleByFlutter) { handleUriLink(uri: uri); @@ -1742,7 +1742,14 @@ bool handleUriLink({List? cmdArgs, Uri? uri, String? uriString}) { args = urlLinkToCmdArgs(uri); } } - if (args == null) return false; + if (args == null) { + return false; + } + + if (args.isEmpty) { + windowOnTop(null); + return true; + } UriLinkType? type; String? id; @@ -1826,7 +1833,10 @@ bool handleUriLink({List? cmdArgs, Uri? uri, String? uriString}) { List? urlLinkToCmdArgs(Uri uri) { String? command; String? id; - if (uri.authority == "connection" && uri.path.startsWith("/new/")) { + if (uri.authority.isEmpty && + uri.path.split('').every((char) => char == '/')) { + return []; + } else if (uri.authority == "connection" && uri.path.startsWith("/new/")) { // For compatibility command = '--connect'; id = uri.path.substring("/new/".length); diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 2645ea0f2..727a28cb4 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -13,7 +13,6 @@ import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/main.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:flutter_hbb/models/state_model.dart'; -import 'package:flutter_hbb/models/desktop_render_texture.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:get/get_rx/src/rx_workers/utils/debouncer.dart'; From bea88f31e0c1986567971aaad697da69fcf2de4a Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 11 Aug 2023 15:27:50 +0800 Subject: [PATCH 403/612] use ab cache init show and show custom loading when ab not emtpy Signed-off-by: 21pages --- flutter/lib/common/widgets/address_book.dart | 31 +++++++-- .../common/widgets/loading_dot_widget.dart | 65 +++++++++++++++++++ flutter/lib/common/widgets/peer_card.dart | 2 +- flutter/lib/models/ab_model.dart | 53 +++++++++++---- libs/hbb_common/src/config.rs | 22 +++++++ src/flutter_ffi.rs | 4 ++ 6 files changed, 160 insertions(+), 17 deletions(-) create mode 100644 flutter/lib/common/widgets/loading_dot_widget.dart diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index fa7d15b73..f9ad6166e 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -10,6 +10,7 @@ import 'package:get/get.dart'; import '../../common.dart'; import 'dialog.dart'; +import 'loading_dot_widget.dart'; import 'login.dart'; final hideAbTagsPanel = false.obs; @@ -39,7 +40,7 @@ class _AddressBookState extends State { child: ElevatedButton( onPressed: loginDialog, child: Text(translate("Login")))); } else { - if (gFFI.abModel.abLoading.value) { + if (gFFI.abModel.abLoading.value && gFFI.abModel.emtpy) { return const Center( child: CircularProgressIndicator(), ); @@ -47,9 +48,15 @@ class _AddressBookState extends State { if (gFFI.abModel.abError.isNotEmpty) { return _buildShowError(gFFI.abModel.abError.value); } - return isDesktop - ? _buildAddressBookDesktop() - : _buildAddressBookMobile(); + return Column( + children: [ + _buildLoadingHavingPeers(), + Expanded( + child: isDesktop + ? _buildAddressBookDesktop() + : _buildAddressBookMobile()) + ], + ); } }); @@ -68,6 +75,22 @@ class _AddressBookState extends State { )); } + Widget _buildLoadingHavingPeers() { + double size = 15; + return Obx(() => Offstage( + offstage: !(gFFI.abModel.abLoading.value && !gFFI.abModel.emtpy), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SizedBox( + height: size, + child: Center(child: LoadingDotWidget(size: size))) + .marginSymmetric(vertical: 10) + ], + ), + )); + } + Widget _buildAddressBookDesktop() { return Row( children: [ diff --git a/flutter/lib/common/widgets/loading_dot_widget.dart b/flutter/lib/common/widgets/loading_dot_widget.dart new file mode 100644 index 000000000..6f8ca4425 --- /dev/null +++ b/flutter/lib/common/widgets/loading_dot_widget.dart @@ -0,0 +1,65 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class LoadingDotWidget extends StatefulWidget { + final int count; + final double size; + final int duration; + LoadingDotWidget( + {Key? key, required this.size, this.count = 3, this.duration = 200}) + : super(key: key); + + @override + State createState() => _LoadingDotWidgetState(); +} + +class _LoadingDotWidgetState extends State { + int counter = 0; + Timer? timer; + + @override + void initState() { + super.initState(); + startAnimation(); + } + + @override + void dispose() { + timer?.cancel(); + super.dispose(); + } + + void startAnimation() { + timer = Timer.periodic(Duration(milliseconds: widget.duration), (timer) { + if (mounted) { + setState(() { + counter = (counter + 1) % widget.count; + }); + } + }); + } + + @override + Widget build(BuildContext context) { + getChild(int index) { + return AnimatedContainer( + duration: Duration(milliseconds: widget.duration), + width: counter == index ? widget.size : widget.size / 2, + height: counter == index ? widget.size : widget.size / 2, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.grey, + ), + ).marginSymmetric(horizontal: widget.size); + } + + return Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: List.generate(widget.count, (e) => e) + .map((e) => getChild(e)) + .toList()), + ); + } +} diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 4d49bd496..f71588b7d 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -987,7 +987,7 @@ class AddressBookPeerCard extends BasePeerCard { @protected @override - void _update() => gFFI.abModel.pullAb(); + void _update() => gFFI.abModel.pullAb(quiet: true); @protected MenuEntryBase _editTagAction(String id) { diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index cd9a41252..9a7a42d31 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -28,6 +28,7 @@ class AbModel { final tags = [].obs; final peers = List.empty(growable: true).obs; final sortTags = shouldSortTags().obs; + bool get emtpy => peers.isEmpty && tags.isEmpty; final selectedTags = List.empty(growable: true).obs; var initialized = false; @@ -46,10 +47,13 @@ class AbModel { } Future pullAb({force = true, quiet = false}) async { - debugPrint("pullAb, force:$force, quite:$quiet"); + debugPrint("pullAb, force:$force, quiet:$quiet"); if (gFFI.userModel.userName.isEmpty) return; if (abLoading.value) return; if (!force && initialized) return; + if (!initialized) { + await _loadCache(); + } if (!quiet) { abLoading.value = true; abError.value = ""; @@ -92,14 +96,21 @@ class AbModel { peers.add(Peer.fromJson(peer)); } } - save(); // save on success + _saveCache(); // save on success } } } } catch (err) { abError.value = err.toString(); } finally { - abLoading.value = false; + if (initialized) { + // make loading effect obvious + Future.delayed(Duration(milliseconds: 300), () { + abLoading.value = false; + }); + } else { + abLoading.value = false; + } initialized = true; sync_all_from_recent = true; _timerCounter = 0; @@ -197,7 +208,7 @@ class AbModel { try { await http.Client().send(request); // await pullAb(quiet: true); - save(); // save on success + _saveCache(); // save on success } catch (e) { BotToast.showText(contentColor: Colors.red, text: e.toString()); } finally { @@ -369,21 +380,39 @@ class AbModel { } } - save() { + _saveCache() { try { - final infos = peers - .map((e) => ({ - "id": e.id, - "hash": e.hash, - })) - .toList(); + final peersJsonData = peers.map((e) => e.toAbUploadJson()).toList(); final m = { "access_token": bind.mainGetLocalOption(key: 'access_token'), - "peers": infos, + "peers": peersJsonData, + "tags": tags.map((e) => e.toString()).toList(), }; bind.mainSaveAb(json: jsonEncode(m)); } catch (e) { debugPrint('ab save:$e'); } } + + _loadCache() async { + try { + final access_token = bind.mainGetLocalOption(key: 'access_token'); + if (access_token.isEmpty) return; + final cache = await bind.mainLoadAb(); + final data = jsonDecode(cache); + if (data == null || data['access_token'] != access_token) return; + tags.clear(); + peers.clear(); + if (data['tags'] is List) { + tags.value = data['tags']; + } + if (data['peers'] is List) { + for (final peer in data['peers']) { + peers.add(Peer.fromJson(peer)); + } + } + } catch (e) { + debugPrint("load ab cache: $e"); + } + } } diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index c3aa2cfd9..cd114619f 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -1481,6 +1481,26 @@ pub struct AbPeer { skip_serializing_if = "String::is_empty" )] pub hash: String, + #[serde( + default, + deserialize_with = "deserialize_string", + skip_serializing_if = "String::is_empty" + )] + pub username: String, + #[serde( + default, + deserialize_with = "deserialize_string", + skip_serializing_if = "String::is_empty" + )] + pub hostname: String, + #[serde( + default, + deserialize_with = "deserialize_string", + skip_serializing_if = "String::is_empty" + )] + pub platform: String, + #[serde(default, deserialize_with = "deserialize_vec_string")] + pub tags: Vec, } #[derive(Debug, Default, Serialize, Deserialize, Clone)] @@ -1493,6 +1513,8 @@ pub struct Ab { pub access_token: String, #[serde(default, deserialize_with = "deserialize_vec_abpeer")] pub peers: Vec, + #[serde(default, deserialize_with = "deserialize_vec_string")] + pub tags: Vec, } impl Ab { diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 7f7af71b4..ab7acc104 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1165,6 +1165,10 @@ pub fn main_clear_ab() { config::Ab::remove(); } +pub fn main_load_ab() -> String { + serde_json::to_string(&config::Ab::load()).unwrap_or_default() +} + pub fn session_send_pointer(session_id: SessionID, msg: String) { if let Ok(m) = serde_json::from_str::>(&msg) { let alt = m.get("alt").is_some(); From d66b10b508e02c4cf139fbe823e003eba4f94e6a Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 11 Aug 2023 15:53:47 +0800 Subject: [PATCH 404/612] fix windowOnTop, maxmized state Signed-off-by: dignow --- flutter/lib/common.dart | 13 ++++++++----- flutter/lib/consts.dart | 2 +- flutter/lib/desktop/widgets/remote_toolbar.dart | 10 ++++------ flutter/lib/desktop/widgets/tabbar_widget.dart | 14 ++++++++++---- flutter/lib/models/state_model.dart | 17 ++++++++++------- 5 files changed, 33 insertions(+), 23 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 80af61bd8..00a6dd99f 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -16,6 +16,7 @@ import 'package:flutter_hbb/desktop/widgets/refresh_wrapper.dart'; import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/main.dart'; import 'package:flutter_hbb/models/peer_model.dart'; +import 'package:flutter_hbb/models/state_model.dart'; import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:flutter_hbb/utils/platform_channel.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -558,13 +559,15 @@ void windowOnTop(int? id) async { if (!isDesktop) { return; } + print("Bring window '$id' on top"); if (id == null) { - print("Bring window on top"); // main window - windowManager.restore(); - windowManager.show(); - windowManager.focus(); - rustDeskWinManager.registerActiveWindow(kWindowMainId); + if (stateGlobal.minimized) { + await windowManager.restore(); + } + await windowManager.show(); + await windowManager.focus(); + await rustDeskWinManager.registerActiveWindow(kWindowMainId); } else { WindowController.fromWindowId(id) ..focus() diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 5376196e4..15616602f 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -77,7 +77,7 @@ const double kDesktopFileTransferHeaderHeight = 25.0; EdgeInsets get kDragToResizeAreaPadding => !kUseCompatibleUiMode && Platform.isLinux - ? stateGlobal.fullscreen || stateGlobal.maximize + ? stateGlobal.fullscreen || stateGlobal.maximized ? EdgeInsets.zero : EdgeInsets.all(5.0) : EdgeInsets.zero; diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 7136efc71..6a72fc3a1 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -1610,12 +1610,10 @@ class _IconMenuButtonState extends State<_IconMenuButton> { ).marginSymmetric( horizontal: widget.hMargin ?? _ToolbarTheme.buttonHMargin, vertical: widget.vMargin ?? _ToolbarTheme.buttonVMargin); - if (widget.tooltip != null) { - button = Tooltip( - message: widget.tooltip!, - child: button, - ); - } + button = Tooltip( + message: widget.tooltip, + child: button, + ); if (widget.topLevel) { return MenuBar(children: [button]); } else { diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 727a28cb4..4178ad5c2 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -521,19 +521,25 @@ class WindowActionPanelState extends State super.dispose(); } - void _setMaximize(bool maximize) { - stateGlobal.setMaximize(maximize); + void _setMaximized(bool maximize) { + stateGlobal.setMaximized(maximize); _saveFrameDebounce.call(_saveFrame); setState(() {}); } + @override + void onWindowMinimize() { + stateGlobal.setMaximized(true); + super.onWindowMinimize(); + } + @override void onWindowMaximize() { // catch maximize from system if (!widget.isMaximized.value) { widget.isMaximized.value = true; } - _setMaximize(true); + _setMaximized(true); super.onWindowMaximize(); } @@ -543,7 +549,7 @@ class WindowActionPanelState extends State if (widget.isMaximized.value) { widget.isMaximized.value = false; } - _setMaximize(false); + _setMaximized(false); super.onWindowUnmaximize(); } diff --git a/flutter/lib/models/state_model.dart b/flutter/lib/models/state_model.dart index 94f9cc234..f35056a84 100644 --- a/flutter/lib/models/state_model.dart +++ b/flutter/lib/models/state_model.dart @@ -11,7 +11,8 @@ enum SvcStatus { notReady, connecting, ready } class StateGlobal { int _windowId = -1; bool _fullscreen = false; - bool _maximize = false; + bool _maximized = false; + bool _minimized = false; bool grabKeyboard = false; final RxBool _showTabBar = true.obs; final RxDouble _resizeEdgeSize = RxDouble(kWindowEdgeSize); @@ -25,7 +26,8 @@ class StateGlobal { int get windowId => _windowId; bool get fullscreen => _fullscreen; - bool get maximize => _maximize; + bool get maximized => _maximized; + bool get minimized => _minimized; double get tabBarHeight => fullscreen ? 0 : kDesktopRemoteTabBarHeight; RxBool get showTabBar => _showTabBar; RxDouble get resizeEdgeSize => _resizeEdgeSize; @@ -48,12 +50,13 @@ class StateGlobal { } setWindowId(int id) => _windowId = id; - setMaximize(bool v) { - if (_maximize != v && !_fullscreen) { - _maximize = v; - _resizeEdgeSize.value = _maximize ? kMaximizeEdgeSize : kWindowEdgeSize; + setMaximized(bool v) { + if (_maximized != v && !_fullscreen) { + _maximized = v; + _resizeEdgeSize.value = _maximized ? kMaximizeEdgeSize : kWindowEdgeSize; } } + setMinimized(bool v) => _minimized = v; setFullscreen(bool v) { if (_fullscreen != v) { @@ -61,7 +64,7 @@ class StateGlobal { _showTabBar.value = !_fullscreen; _resizeEdgeSize.value = fullscreen ? kFullScreenEdgeSize - : _maximize + : _maximized ? kMaximizeEdgeSize : kWindowEdgeSize; print( From e85c0d16b624ef6c9d3487f44b6f258fa7295355 Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 11 Aug 2023 16:08:47 +0800 Subject: [PATCH 405/612] fix set minimized state Signed-off-by: dignow --- flutter/lib/desktop/widgets/tabbar_widget.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 4178ad5c2..e5e0cd533 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -529,7 +529,8 @@ class WindowActionPanelState extends State @override void onWindowMinimize() { - stateGlobal.setMaximized(true); + stateGlobal.setMinimized(true); + stateGlobal.setMaximized(false); super.onWindowMinimize(); } @@ -539,6 +540,7 @@ class WindowActionPanelState extends State if (!widget.isMaximized.value) { widget.isMaximized.value = true; } + stateGlobal.setMinimized(false); _setMaximized(true); super.onWindowMaximize(); } @@ -549,6 +551,7 @@ class WindowActionPanelState extends State if (widget.isMaximized.value) { widget.isMaximized.value = false; } + stateGlobal.setMinimized(false); _setMaximized(false); super.onWindowUnmaximize(); } From f9f06e91f5a380d6f63bd24545994b0377a3b512 Mon Sep 17 00:00:00 2001 From: Andrzej Rudnik Date: Fri, 11 Aug 2023 12:31:52 +0200 Subject: [PATCH 406/612] Update pl.rs --- src/lang/pl.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/pl.rs b/src/lang/pl.rs index cdab09c7c..25f109a33 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -524,9 +524,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Przekroczona maks. liczba urządzeń"), ("Sync with recent sessions", "Synchronizacja z ostatnimi sesjami"), ("Sort tags", "Znaczniki sortowania"), - ("Open connection in new tab", ""), + ("Open connection in new tab", "Otwórz połączenie w nowej zakładce"), ("Move tab to new window", "Przenieś zakładkę do nowego okna"), - ("Can not be empty", ""), - ("Already exists", ""), + ("Can not be empty", "Nie może być puste"), + ("Already exists", "Już istnieje"), ].iter().cloned().collect(); } From f5493ab0c48d3542a2c04eb45683de3d4bf699b1 Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 11 Aug 2023 19:03:09 +0800 Subject: [PATCH 407/612] fix, window maximized state Signed-off-by: dignow --- flutter/lib/common.dart | 2 +- flutter/lib/consts.dart | 2 +- .../lib/desktop/widgets/tabbar_widget.dart | 5 ++--- flutter/lib/models/state_model.dart | 19 +++++++++---------- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 00a6dd99f..296170858 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -562,7 +562,7 @@ void windowOnTop(int? id) async { print("Bring window '$id' on top"); if (id == null) { // main window - if (stateGlobal.minimized) { + if (stateGlobal.isMinimized) { await windowManager.restore(); } await windowManager.show(); diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 15616602f..b3ec3aa9d 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -77,7 +77,7 @@ const double kDesktopFileTransferHeaderHeight = 25.0; EdgeInsets get kDragToResizeAreaPadding => !kUseCompatibleUiMode && Platform.isLinux - ? stateGlobal.fullscreen || stateGlobal.maximized + ? stateGlobal.fullscreen || stateGlobal.isMaximized.value ? EdgeInsets.zero : EdgeInsets.all(5.0) : EdgeInsets.zero; diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index e5e0cd533..0eb59f51b 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -237,7 +237,6 @@ class DesktopTab extends StatelessWidget { final DesktopTabController controller; Rx get state => controller.state; - final isMaximized = false.obs; final _scrollDebounce = Debouncer(delay: Duration(milliseconds: 50)); late final DesktopTabType tabType; @@ -373,7 +372,7 @@ class DesktopTab extends StatelessWidget { if (elapsed < bind.getDoubleClickTime()) { // onDoubleTap toggleMaximize(isMainWindow) - .then((value) => isMaximized.value = value); + .then((value) => stateGlobal.setMaximized(value)); } } : null, @@ -441,7 +440,7 @@ class DesktopTab extends StatelessWidget { tabType: tabType, state: state, tail: tail, - isMaximized: isMaximized, + isMaximized: stateGlobal.isMaximized, showMinimize: showMinimize, showMaximize: showMaximize, showClose: showClose, diff --git a/flutter/lib/models/state_model.dart b/flutter/lib/models/state_model.dart index f35056a84..ccaad43d6 100644 --- a/flutter/lib/models/state_model.dart +++ b/flutter/lib/models/state_model.dart @@ -10,10 +10,10 @@ enum SvcStatus { notReady, connecting, ready } class StateGlobal { int _windowId = -1; - bool _fullscreen = false; - bool _maximized = false; - bool _minimized = false; bool grabKeyboard = false; + bool _fullscreen = false; + bool _isMinimized = false; + final RxBool isMaximized = false.obs; final RxBool _showTabBar = true.obs; final RxDouble _resizeEdgeSize = RxDouble(kWindowEdgeSize); final RxDouble _windowBorderWidth = RxDouble(kWindowBorderWidth); @@ -26,8 +26,7 @@ class StateGlobal { int get windowId => _windowId; bool get fullscreen => _fullscreen; - bool get maximized => _maximized; - bool get minimized => _minimized; + bool get isMinimized => _isMinimized; double get tabBarHeight => fullscreen ? 0 : kDesktopRemoteTabBarHeight; RxBool get showTabBar => _showTabBar; RxDouble get resizeEdgeSize => _resizeEdgeSize; @@ -51,12 +50,12 @@ class StateGlobal { setWindowId(int id) => _windowId = id; setMaximized(bool v) { - if (_maximized != v && !_fullscreen) { - _maximized = v; - _resizeEdgeSize.value = _maximized ? kMaximizeEdgeSize : kWindowEdgeSize; + if (isMaximized.value != v && !_fullscreen) { + isMaximized.value = v; + _resizeEdgeSize.value = isMaximized.isTrue ? kMaximizeEdgeSize : kWindowEdgeSize; } } - setMinimized(bool v) => _minimized = v; + setMinimized(bool v) => _isMinimized = v; setFullscreen(bool v) { if (_fullscreen != v) { @@ -64,7 +63,7 @@ class StateGlobal { _showTabBar.value = !_fullscreen; _resizeEdgeSize.value = fullscreen ? kFullScreenEdgeSize - : _maximized + : isMaximized.isTrue ? kMaximizeEdgeSize : kWindowEdgeSize; print( From 6608bf882f3a804304b09d622bb06d456cd146a9 Mon Sep 17 00:00:00 2001 From: dignow Date: Fri, 11 Aug 2023 19:28:25 +0800 Subject: [PATCH 408/612] refactor, remove login device info in sciter Signed-off-by: dignow --- src/ui.rs | 6 +++--- src/ui/index.tis | 15 +-------------- src/ui_interface.rs | 6 +----- 3 files changed, 5 insertions(+), 22 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 309d0aa6b..27793b31f 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -595,8 +595,8 @@ impl UI { handle_relay_id(id) } - fn get_hostname(&self) -> String { - get_hostname() + fn get_login_device_info(&self) -> String { + get_login_device_info_json() } } @@ -682,7 +682,7 @@ impl sciter::EventHandler for UI { fn get_langs(); fn default_video_save_directory(); fn handle_relay_id(String); - fn get_hostname(); + fn get_login_device_info(); } } diff --git a/src/ui/index.tis b/src/ui/index.tis index c6286e903..9d09dd7a7 100644 --- a/src/ui/index.tis +++ b/src/ui/index.tis @@ -1323,18 +1323,5 @@ function getHttpHeaders() { } function getDeviceInfo() { - var os; - if (is_win) { - os = 'windows'; - } else if (is_linux) { - os = 'linux'; - } else if (is_osx) { - os = 'macos'; - } - - return { - os: os, - type: 'client', - name: handler.get_hostname() - }; + return JSON.parse(handler.get_login_device_info()); } diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 51f848457..f6791de0b 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -974,10 +974,6 @@ pub fn get_fingerprint() -> String { return ipc::get_fingerprint(); } -pub fn get_hostname() -> String { - crate::common::hostname() -} - #[inline] pub fn get_login_device_info() -> LoginDeviceInfo { LoginDeviceInfo { @@ -990,7 +986,7 @@ pub fn get_login_device_info() -> LoginDeviceInfo { #[inline] pub fn get_login_device_info_json() -> String { - serde_json::to_string(&get_login_device_info()).unwrap_or_default() + serde_json::to_string(&get_login_device_info()).unwrap_or("{}".to_string()) } // notice: avoiding create ipc connection repeatedly, From 098df8175410f6f2d463868ef56952758c595351 Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sat, 12 Aug 2023 02:24:24 +0800 Subject: [PATCH 409/612] Optimize PNG images losslessly using zopflipng 59 PNG images recompressed as below: fastlane/metadata/android/en-US/images/phoneScreenshots/1.png | Bin 27006 -> 26922 bytes fastlane/metadata/android/en-US/images/phoneScreenshots/2.png | Bin 326177 -> 325660 bytes fastlane/metadata/android/en-US/images/phoneScreenshots/3.png | Bin 431697 -> 428945 bytes fastlane/metadata/android/en-US/images/sevenInchScreenshots/6.png | Bin 462394 -> 461442 bytes fastlane/metadata/android/en-US/images/sevenInchScreenshots/7.png | Bin 388078 -> 387416 bytes fastlane/metadata/android/en-US/images/sevenInchScreenshots/8.png | Bin 273393 -> 272856 bytes flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3990 -> 3479 bytes flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png | Bin 7492 -> 6026 bytes flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png | Bin 6161 -> 5107 bytes flutter/android/app/src/main/res/mipmap-hdpi/ic_stat_logo.png | Bin 1028 -> 487 bytes flutter/android/app/src/main/res/mipmap-ldpi/ic_launcher.png | Bin 1667 -> 1524 bytes flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2207 -> 1987 bytes flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png | Bin 4348 -> 3641 bytes flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png | Bin 3525 -> 3017 bytes flutter/android/app/src/main/res/mipmap-mdpi/ic_stat_logo.png | Bin 715 -> 383 bytes flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4827 -> 4237 bytes flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png | Bin 9515 -> 7659 bytes flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png | Bin 7604 -> 6202 bytes flutter/android/app/src/main/res/mipmap-xhdpi/ic_stat_logo.png | Bin 1524 -> 719 bytes flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 9171 -> 7498 bytes flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png | Bin 33762 -> 22530 bytes flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png | Bin 13879 -> 10713 bytes flutter/android/app/src/main/res/mipmap-xxhdpi/ic_stat_logo.png | Bin 2091 -> 884 bytes flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 9893 -> 7409 bytes flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 41583 -> 31138 bytes flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 16113 -> 11189 bytes flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_stat_logo.png | Bin 3162 -> 1389 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png | Bin 49903 -> 32239 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 669 -> 511 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1344 -> 989 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2049 -> 1545 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 969 -> 755 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1948 -> 1510 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3139 -> 2299 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1344 -> 989 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 2846 -> 2086 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 4240 -> 3087 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 4240 -> 3087 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 6893 -> 4914 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 2594 -> 1964 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 5794 -> 4152 bytes flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png | Bin 6468 -> 4494 bytes flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png | Bin 37517 -> 35842 bytes flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png | Bin 448 -> 420 bytes flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png | Bin 6198 -> 6071 bytes flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png | Bin 875 -> 827 bytes flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png | Bin 13870 -> 13288 bytes flutter/web/icons/Icon-192.png | Bin 8908 -> 6339 bytes flutter/web/icons/Icon-512.png | Bin 25973 -> 17282 bytes flutter/web/icons/Icon-maskable-192.png | Bin 8908 -> 6339 bytes flutter/web/icons/Icon-maskable-512.png | Bin 25973 -> 17282 bytes libs/clipboard/docs/assets/scene3.png | Bin 5480 -> 5475 bytes libs/clipboard/docs/assets/win_A_B.png | Bin 43658 -> 43619 bytes libs/clipboard/docs/assets/win_B_A.png | Bin 43515 -> 43447 bytes res/128x128@2x.png | Bin 10623 -> 7689 bytes res/icon.png | Bin 60426 -> 40256 bytes res/mac-icon.png | Bin 37517 -> 35842 bytes res/mac-tray-dark-x2.png | Bin 703 -> 651 bytes res/mac-tray-light-x2.png | Bin 728 -> 586 bytes --- .../en-US/images/phoneScreenshots/1.png | Bin 27006 -> 26922 bytes .../en-US/images/phoneScreenshots/2.png | Bin 326177 -> 325660 bytes .../en-US/images/phoneScreenshots/3.png | Bin 431697 -> 428945 bytes .../en-US/images/sevenInchScreenshots/6.png | Bin 462394 -> 461442 bytes .../en-US/images/sevenInchScreenshots/7.png | Bin 388078 -> 387416 bytes .../en-US/images/sevenInchScreenshots/8.png | Bin 273393 -> 272856 bytes .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3990 -> 3479 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 7492 -> 6026 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 6161 -> 5107 bytes .../src/main/res/mipmap-hdpi/ic_stat_logo.png | Bin 1028 -> 487 bytes .../src/main/res/mipmap-ldpi/ic_launcher.png | Bin 1667 -> 1524 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2207 -> 1987 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 4348 -> 3641 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 3525 -> 3017 bytes .../src/main/res/mipmap-mdpi/ic_stat_logo.png | Bin 715 -> 383 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4827 -> 4237 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 9515 -> 7659 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 7604 -> 6202 bytes .../main/res/mipmap-xhdpi/ic_stat_logo.png | Bin 1524 -> 719 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 9171 -> 7498 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 33762 -> 22530 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 13879 -> 10713 bytes .../main/res/mipmap-xxhdpi/ic_stat_logo.png | Bin 2091 -> 884 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 9893 -> 7409 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 41583 -> 31138 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 16113 -> 11189 bytes .../main/res/mipmap-xxxhdpi/ic_stat_logo.png | Bin 3162 -> 1389 bytes .../Icon-App-1024x1024@1x.png | Bin 49903 -> 32239 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 669 -> 511 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1344 -> 989 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 2049 -> 1545 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 969 -> 755 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1948 -> 1510 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 3139 -> 2299 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1344 -> 989 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 2846 -> 2086 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 4240 -> 3087 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 4240 -> 3087 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 6893 -> 4914 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 2594 -> 1964 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 5794 -> 4152 bytes .../Icon-App-83.5x83.5@2x.png | Bin 6468 -> 4494 bytes .../AppIcon.appiconset/app_icon_1024.png | Bin 37517 -> 35842 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 448 -> 420 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 6198 -> 6071 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 875 -> 827 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 13870 -> 13288 bytes flutter/web/icons/Icon-192.png | Bin 8908 -> 6339 bytes flutter/web/icons/Icon-512.png | Bin 25973 -> 17282 bytes flutter/web/icons/Icon-maskable-192.png | Bin 8908 -> 6339 bytes flutter/web/icons/Icon-maskable-512.png | Bin 25973 -> 17282 bytes libs/clipboard/docs/assets/scene3.png | Bin 5480 -> 5475 bytes libs/clipboard/docs/assets/win_A_B.png | Bin 43658 -> 43619 bytes libs/clipboard/docs/assets/win_B_A.png | Bin 43515 -> 43447 bytes res/128x128@2x.png | Bin 10623 -> 7689 bytes res/icon.png | Bin 60426 -> 40256 bytes res/mac-icon.png | Bin 37517 -> 35842 bytes res/mac-tray-dark-x2.png | Bin 703 -> 651 bytes res/mac-tray-light-x2.png | Bin 728 -> 586 bytes 59 files changed, 0 insertions(+), 0 deletions(-) diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png index e84ed4d21476ec59d1aee00da62b37f43ca26f1a..9b0125f217c3b540e50bad3fbcd3e6616912285d 100644 GIT binary patch literal 26922 zcmbq)cUY58*Jc1gkS2&oQIOudgx-6XUP4o9fCsQp1O+VgDqX2U=tYDOx_}4>NDKW5 zAiekA+4y_k_xpCQYj^+H%^%NX&fIg(%$aj$ay@e={IRYY=`Ffj5D0`+LtWVb0=WS~ zAh&`D@vsuzz!D?`f_wH@+en2ed7mM4lIB@0mCa`=i+Dgww3?EKl@-qzOE+S)oeIM~zEGcqzVJUl!;K90d)#>U2`rlv5HQ`6JaGcz-Db90M} ziwg@2D=RC@%gd{)t7~g(>+9>Ao10r(Tl@R_M@L7;$0rx(7khhq2L}f`J3FT*r*-v> z4Gj(7zkk2Hylif6Sy^4}>l-*bJL~Hoi0L~>MIR2YofVHCWey+3^dF9{pPyV_PaIr^ zO`W)p9zX6ql=*eQ)3#6EunR%$&@}BScOO^`9F?t{q4zJ6W=};s_8+$F5!LN#^c>g^ z9ZeryZk%0tj~};hUj$)JzAT>kfycjhFRIthn>NoEPp;zo4||u-TINpte(i_}S@mX72$Hm3Dxw-lJ`tH6R z*$Wvv%$W@i4!&GE-j4<|Gcym8r;aNYPY+Jchj&kQk5Ah-u8uEb3Jzln4~rU4hNjMw z%Z}>0PNxVXw-dAJ@u)rq-%`!)ju zgXq-)D+J=OuA!`8ii3kq63D}uYlnLzg}B(*{(t?ax*+^)M`pCooG(f@f5X?5OqnqlsLVRMH><7FH(NrhrMLX)sA{x-MH)89|jXdPbZ z=hH=fGfhPn@>-1-tCL=-WOUyvq>-|#bR3@hnEh#RmO0GtY_9SS^l21a)U4j=X5Owg zhYi(J(-=}6KWX$})D5}BTplReHVU|{9K-NTKSc@;>mA1xRu<@ zsY7aLEf`#c6Y|4F_m@J`0_QBh(RDp3`B z#F(#=>Xq|RYMNJ1@5CwU+q>7stZ4oLg_MXwW}CMXtB;-$fg9pF0bEBx>>p)M;q=bW zgN{QftH>67^kCK>g;6mKD-k`3t)jWYYNiCy{+iu%G|nP7hYgCS5M^?>V(=2@_}26H zKT4xinF5dt!8^1a;~)7aTW2yQ!~2E9T|W=yz&CM|;63 z4n&nb;tkzocgJ&7=h}4vALjjJh|_v|j%@cnbG~qTF64;6OL*_SScgm}%@Ci?^Y@+F z-zz+fnt1@aIMJ(l5b^@9WNI#T<0StpLDiXkMd@*;c*ppQd}d~z-7@M|81d&iX^|kN zK|ZNfpny+ucpP62xD(BTL-7$mn_Eq}+?b9$?~zLdu3f2nq1@c>``q;=4@mlAWJE=G zdWg}S+&*bgJ)bL->q?rTZ_5EaL$y$ci@u$KT8w*L;nCH4%@DO0<44p^BM~^5q-bZN zn`>=H+>wfW)T!wkAOXy=p!4%R{P(D|w!zTxAR))+eyn1Fsi-zJL>WTB*n~m2X6JL^ zPGt?5-Nx{MUGM5Pn);10$o$!eNL4aNEmBt{0S6}7L0}=gGki3Sba>S5ZkRHss+rJj zi?xyy8SpE@ZDmz)w+eNf52U`!^RN-8nbG2l{!E7v>|o6}bcm{|-B{J0+eRmEhy%oH zTu)x`I`%MvB-Z7jcJ83{Borw&EB&*Vy{`gvnKOQ4wa=TjewU?GrOPdFan+7cI zSm()(nQrdMrh{En66LXdc(YcT;J6cryDVqfkTR9e_iEcEQ7B)Dw(GGSLDt1LK7dx| zM&FvJkpQ21Y_h6xbZl!XQA|RMEuvX&ZTXMvJ^N%;C~-wtzbmZbHI;);4XLTrwbO^b zH`C?h9q;B-Y%e>V67xJvo_zG_cGpU)zT#@|*T%>v{F0)a{ESH<17rE=?K&CP>#J5X_4h^Yz%$U~?-ogirZd^s1 z_-oVOy4I{nWPiUKK(bkF3Pt;pcZdUF58k{GlI}TeieNKCF9JeI`h!fqN$;r{k z3O6huki3)nQ>GVf>&Bx?FRA5(YHOz0u9dM~dsDF4(KVPs;&ju`AEcQ_GJTs~T_X$6=ZsQb3Jwxf_>c`cuC4Rm+E;Hj;h~=-C@B74cj5o^n{oR8*~=l2 zhdpyopImd- zy_Z1QsxF{x?^SQ)wCh(`_HDbvzsGQWrxc{?{0>ehfsbKe`c;*WT0@bG0wiQv<%Y}6 zyA%){WBuDjF2JAbSAEZtMPpjr2OYO>EH}6+ek_sWP0hQO23E}Dp-jXE&pbfI^B!SK zD}#iqUSxYnd~m`&a)Hqp#HQ{Zoq{@;?CFp?_vz~15cEk(lJyxKYdq>^*G_00^4pCs z*LrAGRf){ScvNWDuktt~1!EWcsTiC^>)u@*^bwDJZc-eQO@x(fQlW;$u1Mnj%^?C* zq`is!#4mJ|^YnX*raDI&4{tp*J7zu@vHA2JD{ec{FY0pIRt-iPsjM%Rk-a7J%dOXr z>Wx9Hi^yk=QvggL{mYy#_quDazclgd-h!X?ae84KqzQSTrkWCAmwq~U*ffeA7X-?KMxJJTA8 zmZVdPx(uACsdjqTO>+1;qTc|@#0pTv!*h`iW=F+xaZti;9<*~b+pA|8-}#ek_1}Qc zSp~2lFbj2CW0)0yX1A!f(lQJk zgXlx=D0_nhly>)#bQ_~08f9EJ5lx2xV(bkpb?1tPrz9>EpuUtXDO6p)KLv2-aTDK5 z!UR85*}vu3Dij6?;?25`NLU&a(MN9=9?&6r<)7}x>oacaVHou4#ZnqLXP$Pa^!dR{ zW*=wRlxV_O9sDz+O%&1Ig!<1uBYK_0%zpmT4IxJWQLH#@PUL;+6!TpXfj@5(4p!bN zULUoDxbLWdaX+;N#%c~ z(1n}imt_T*-{8;mDpSQSp>p$QXx3$DucD8M+wgLw(jFtCSD&%b-SNwm7^pdZ`rt6vM&1rE3h;=Q3uVQDFC?Af6m+Vq~+{cZuiLB%#e|U z88g5uO&N%dMtOjP0_3WiF^Y-MJT78c1EU-o0)I~;P%rQWdJ>I1+_fLWp=1e{kUd|j zJ#nb%&jobA7>3CFxG};xTJ&fQgsyulYU8}nq-uAT3F*W?pt9YNl?H=70uH*rwFIv5ARilSg zOMM!@(a6R_>AP-n@{g|nQ0d=hzGqeq$G9mV-~7#?R;q9x=S(PCgu0Pudgd*1QC-_Q zFO_&MLCBI;C4t2nCglZhJAveE{>>x4S1R#SNl*jviE|PG*)2WTa#G;d_pW)NH=hW6 zcO`3eFfX^5yA;Au3COo^?L`XJ)9}ZhXF_$eI((NVGf;$GnI3@7Y-dOhex{B&xUx-> zLFIqARpmOj>pL(Wa6e%i#MMUQwbu8j1tH&q9h z78Twwb`6Gz|E88FC6p2(Cz}(mBmrCu<`8YN+qkf@ z0)h&{TH~9PRVa5K7T#}~gr+ZR^ubYrNlAp+>>d7eQWF}EYB(O_U3yUSdxU{Hc=BL8 zG5V>X>Z@Gig{R>}+M}$1-A!(Lvv}{I+pZyOkvG zkH-^>?>}$u9xa5~K)2}<+06gsHb{vT>843Vnw}1C$;_=8@l24$h>==&JHHh*BuYxGB#Ql6zI={tEKwsr3CA)l1juc*x4JoiKx5XicL7 zj$qWpYhl_y+Fv^$D*nm5)RC}BVVtnV=g-Pu?2vC3)4Z9Z8KuD(g-{&wv zHWX5gQ%L%l{{K{S!TX=vurv18H=9pr_pu432H?HmT z>djj?_+BUt|qB58mzR)Co1pc--@Tk?RFKIB0m zzVQ(zJs}U7}ovO=vRE$E zn$xF>p1UE28RB}ly8Z(;S=OnPv5b}l_81H-U)o|v|3qCvft8kuH<;xnvuQkzH$K-T zUd47oe9Yrl4UW7HgA{DBcgdOevnBOHkx!JmDIU<+@d7V2qtLB(?U#jln=IMtam{z# z`lbT8%!q2_bYWM~NuFa&Kp3apKl-CN1**dh^SQX(lb|8|+XM_eJc-kWqxR>F`J3Ga zs+!L>;!wacmw{bWUT@z0hcpJ04)M|riO=HrAvwCr+C`(8`#l_WNK zKxH)ot0o$ik`ry8y@V=hepLc*$CKDb!TZtFrlLRI&Mn6MWHA>v2H&wj3e>vq?^zh# zgFU{u@tlaOU(QUCE{^xeSpIaH30Qp7x=o9nO*pGZ2@jXh4ZHXW3ge~PVzl==Tb13< zd}|56r}e?dnRM_3E528{^3MmD02$4ge!-6MQ9}0@k6eBAV4s!Z9*1!1aNg!%oA8Kw zB02;u8e7#wZ^xl{7V)h9`s(t2UYu}UQM^xC?`lqzE6%$Ot~S4r)a*~Ff-~crtdV5! z^#tv~PeL7^rS00`We1Ik%-iV#m65EW(b);_b$S;)I$@Q+=b)Yci7SWwK^a)k=C6( zaf~sxdgQBLYK<;TJAB|TR6@=cjG^s%X#;!isbZCee88#y0`8cET1qmqDCo_-z_I(y z(apZxsYOqaSO69#{gD8470~U`dcrq8!|Cr|EAT=+2`Wa|-8QEk$v;}a%Bd9mMSB>KiLtty` zV+5XM{4RKtPzL}~vzCJu8IBTomj4yyLv6b-!vwWJ3<%L3Q2~Om6<(h-5K_}?NZ*oI zUr6eSNvy`XUmS@Q6_J{)K(Sg4=>^m5um%Ok_Ya${u?lTVo6p`Bl8%2xMSww0fZ0ck|h@lMAYnd66mZO{NSdev42fy!|l!1uCn56%0ia zxJ2ganw|x;rOjt)8pv=rayGI`GdJ=!a!ND#{s{eGdPC3G*jMKyYzMiMvvc;q?|TMNXoS^0~JcbYGAnrjCRk#adG4-?BfLv4tjL8fFl334oF7S z@QD&$l7&j0%8wmnQ)$tijmZ|>Az3}V^_?B4k#&9d0Bs@$u#B?GP`U(;+3IEB`|hhT zSSO+I*MH!kO#}d?Q8tN;J5_yD!^T0!)hbw>!sRTzA5oHUp4ylXeP;CKts8}D5RZwe zeNj05a~T#ynJTyx;!2ASSNc_b@@9>>Ws30f;4^ZH!1AtYN$t2j5wSuHauu#+c8g=s zm$Je(nbns_>*^7GbV5*YR6U_*?nqcHr6{0Ou6`?)fyUmlS_K?N0=3)|$1BaNd(|_yj?@HF2faXWU^FWQhk+uK1)3TgYSgI|qKY8=!@0bustNE$H3RU->u_>=qse^#N78Bg|S+6N^O~ zMpFAG@eoc}&k&UQ+9wgY=tj%cIe!Pyn}IUIAk8b->ZN66o#)quh=MAsr2v0fx`a$r zJRhC|7r!!?4u@5;tqc|^*wcPwGi)>db)pdZMu7`ff@Y6J;@@Ng_O2tp7`mdEfIcKC z{e9WA;vpRYqnHca?$K!^aLUQf2h2$!Uake{!!D6J50q@9`>7>)3<$ijwx9qW3w6gZ zvOO}FA_M%^t_E7d*XcV|gV^J;gbGYbU(?G^fS*xZe}rDJ0f)cGg;lVCG|^PSqjBM9 z_t#sW(!Vz6f)Niv6KGvCQBiy>h~6Y@Aywbqs0u=z`t|U-N6(N`A+I?$n}y)S69&vc zIWq4x)j)>zx9*MvI5PSeub%a*(8OdVpgf>qW6(X?fs9^wHn;?joS>vcFR7>bxNl{8 z+(9AI()&bS+q*<%OEBR)MkVJ1{Kx&D3;4*#DVeZ3ALwRjte4?Z|E@*6Fn9x%dID1) zP_WVO9_>czEPO;Q!Rf1j8BKaL%1-M^lY~kHL&+iU*GDrEK{v1y{De|;?-$j>!~wK* z=n&-Q;(l(MYx!j4IHk17yv(+8P^H&HAU60222RHzHzyp)`jAXOFwLy{Nlx~FoGKz? zwm3c8?t5`!Sq2=|mGQd+4!h}wiDLoO)4~k1Zh3R5|BBu_*V{&@uK z5A1$lw;^t(3}AV!d{Xw%a8GL1>PPg$A=MxLAN~-F;SvSjwg(poyyWrP_*+|=%HfVV zZbVwH|LB1IlKGGihlRKilWT%;sIXXr&y{K0Tw`(33ni0zGB|&|-n+n{IE3UgJiS)e zz)sv&tK)Ojhr|+e@7t>$p8W1~)a8t;=7hy(s6bNN+Yoqy1ATll6u~$9f_*o@Q{)f% zon+0!HQ#xG1&24uv{;QtNMPZl_z6hBWLm1OgWdCH4JYESJj9lY!#)V{?e_rYKKm(&YT4D|^<+vrtqD?peTGLM%&-ulexEw?E4|j5y zRw4>A?>MY$g6yw3UY9-t?I-fzD1vJUpvPD!<1@EM0 ztix-Xd&Y3}YQbNRuzno1Tqpv^?C4KC0vcMriLGg4{V^XQkx_+S_n|)*cKdex(4WB6 z!mA1B*LT9cTf6@r`VqCe@wU=^LRb-WDcEc&^{}O`zVaQ@r`)?{EkR3(WjvsG`4tQI zK|}4dJR|zm6Mf#SgeBo((RJe>1u@~x4ShViR)V12p@Q0UJQ33M^c7)Fd=a$ zS2VQzBT8Wt$#q_`B=oMldXopC1Rhkje?VF#p_pLr=yFj}<##NbA|XM@Bpi&k0$Cu{ z73+ohN#u^{Z0wKzV3>jyrff%ScKb)qk0vzA5ms(Pfnu`CWS2j8 zA@BqP_e3Z{$84u4NH6$iyk5rk}d1y2azZZv(^dgqEsn$P*qwf-!{ta-4u0FfT?cD>T_{f^fY3-bKIxskJ( z42nTWnUNT*Y320~{lp=N+6T03(k~BcYg7fPkt2G&U{n={^572uFOe?}<%xkf z5F_{|q4E>BaN-)$$0$qix5j>p+oLSh)%`^Q0>Mm~bZ97A+LNZYplmz$!U57Tecgv_ zlD^8R#feheUPUg>6A;2=0fBRGPDtR7Cm8?h0>tJbDjIhuG-`9y=86{XUpG}FM20^j zCK>f@%EnwPpO5@u78C-fOAe;)rO{ippu(tq0j?@cHuy}US3Ho7l-x5c5X zy4no1XtF$elNb)^XcFkLaE(NijqE??!GWB^>qe>7VI^98OpxXIS7k#(qibkQl9n@X z^YsN}b$uxtq3x@NQotQtJ2Z=jklDnffR6cPWt~ppxXz5RW0FEZS>_*2nwHS7Js^8N zAXCOhGIKKPTfUDr`RY+aNiguI*~%p?1=W+1g+;~w39uf8!(F{jeL0^%Lbq++e;|Ux zQpnlJWccuU$ zNaLVzJZz+4QyMA{BBE`^8?d+RqjFL6V*3r$`5nn8H9RD~araGZnfn$xHgcqGWx}Rb zEM`3ppnZ`~ZXN|I9}%vn?Yu_&A4-wCy{#u1QdQQb$3F7y!0Ew4_I%nwWzmGs+3W~f zG@(9+AfSy=-?SP+j=T{WQvHd%j41&Yl189sN66@rW;-wpZU;WH1pca^reQR*w8&(v z)V2mpDoiigmsQbd?LrR+FW}91yt@(>lKjifh$I}d+{+vAtE@xY3MfiS-%qpDj9{0| z>LiC@o~-i!L<#{?zJnb6Z4$#9N1y6Ig6D-3uzM**ye>zke5=fV+pn|DL6aGj^PEfC zdyIj+%M!7tM3~mt!~AHt)&lmnMTtWGiIbo({rz9^Tt}a4Kw0W9_xS?|j~+NYer8l7 z8Tt5mPuoY^{%1Jd8uIn{Lf9#C1yw~Qqb6h^FkNMnFAE0wWvJa3kb5$^%SVt6Jq_cR z_qxTjtbg)nEKc10JLM3Z4R$>w62Kj&qv)hed^Kc(Aquk8zCX(cp)CSKo;zw7^Ag+2 zv0A-Nh34}G;AGn%k>(N*#&)K+#1Psx6AVqzrT*n=tFxE)mTAvYm^DN^xm+IWA=IrI z`2%DyWFsH>zEA=Syc@(;War>YE_n}!it=nQ{zvIcoTp$ac6hb|qj4w&CxnEoLO6Xj zm;;G;Qgp8{?w%9GTUi;F!=tz$mf!pR`?pJ-G%q4sUAiG}PybpjFI5Otsf*!nGk_82 z{;z&FNa~#w0OB+!!koXUtGsoogJBNRme+&bc>#f@9Z@GD(wdkH|$Ug6#e4nPZg$TO-LA0wn-pOP==PW2YLm`)Q;cfh1q% zB2PYq!5gU6y84ka5Z^dzG&Bw0)1ix8gXSA}265}Gf_OKV0kW1~a>RL!g)S4P%&70C z&5<+b_fo5YM?%27%EJ_ACcuQC#oDZx*|8M$3gU{9pEcCve#hZy<>N(QigB#;{l3!;keyI#5i=g z(7&(z`W}ZR5}+ z>0*~j(_njRy8J`g0WW|5ScWd9jzDwQ@{_mCr2p?v7HfN6* zUuHRragnXxk{^vnv0w)}*Lv)O&2M4{lbZ6ch3?c`#TXXIfOGmPM;oBD2cgZ zac;W{yAOt_$5mCPfw~bSylS%yJ`|g+nUoaz{2L7lw<}Z0h}UK8J9X^2(&+Dj=Q!QZ z$=ls zx0JA5wZxD0f*KAfwaaI4W{G3Z*X_)e>-jJ zHr8IvW7`^wJ|ckmzb9uJbEY)rUpOhg>3@3Ef|);a(OGd&<~befKVu($)GuH$P(1 zQM@zqQC-rr zeAFdtep%hR*tNYS@bPhmdV>k3dv~|~!r(-_`4LM%s+{a}B8pB@RyIcK=Ix=S)A$>h zIHU?P=`ge$mHRrtJOD0~)!%QdB_t>)$Q+G(xkk^tXR>B$5s#uXYCdibmJEg)qBra9 z(wu8S$#fK3Qs|<^V&8Yo_qNuwYu}OB3Hmng-ZV|4C;`+LpG?B__CJ)p^uYdP;CU4& z-aX>@!zH2F&k4Z~l;oVJua5rhkSLRaUCyA9{A#sN)ViG_QZZb z&v>7-LnVbUy6~%Bbt;rcQbL+43ST+pmL5rr&Kv6Jqmr{EtR<=jqwjSn`sT_~RZG`e z@XBG?+Q`tf3KG-&+b`KurW1r0i~=LmBcIFKRd>1?@4c0y=KMm3$NYFl-!YN3BpmAH zI3xJ{`}NY(XB>aHQy8_71Ta{fS$hk$$7>G#7c^Q%427EGhc|*ov{*D?d5btRPW0dM zHkc|4{BNz(K#jAha?1n{AUo{GIpM~)2rgGl$g|6y2|HlUq}>QBe2{{(Z*2&s+n)-OtH~12% z!AOuZq2*hXi0YsZ5~GW<4ALUthWG7pmNO4t`iSyRZgO+&BouDNg@Z@-FWdk-IRM`mP#{yZQx5TJaQC)JQljBC0g@IZ0gmO2v|pwbrgLVka1ZL_ z^eCSy`^Xvb-fcGGp2pv`2q*IXtP3NeQ8#Nd2CpCyl%wyA?F4}Mx4|q5k}RZIDzBLagdA%#6NRbh9; zwXz3euZUlerUodbRfo78+&VFeM@}5qnFQAEyuJO2dO$o1nqiRkmj1h(AKN#yt|;<> zc?h%@`;wcY499-Rxxx57WuVeopL<^b$a*iJagMH#-PwP|-x){vPHJ~6a#MSPK$3aS z$#dG>ulUQRuLu(E=(=C_bG;|w5xDg>Jq#K#cvJ*1VEzo4_`Dx$vP)G@M@`;Bz2OhJ zB>co*JNj3}DXv?{sgl#6w;t9!{2%kf$~-uAS=MnVl^3!~Apcue4OA8s-lnZg$3QiY zeWz7_8d|^?DRY4P`R33Oy)y^osO`_Z!PC497iXzT65#U$$QgM=W*LkmW#zty9>r13 z5w-JRNoUl=ulCR4@y>>&4qgKh&-74La5>?q3il%aBoI7rN#9pyaeI`B<;NGI?hC)h@@b_UTeAQOo*k6lCUi zeD({-#UQ=lFCJiztmXOezAZR@%B`8-#s#U;r2~X{$75Zl9T z1=FB=?$$~{dt`vYg}qcjKfW*V!>Ep|zEK8wjIIPWEpPnYmUfxJbdenE7nBawMC&8X zX!d(wZ}4r++dK@Ir4S8BHUc$+&Ks4|qaZofG=n zTOl)ZdM5^u;3o!ok%cj;F(+% zy|&6|FfhIuMegTi7*1|+eN|Bq`n1U4kJN(k>6aHPMeMx;-rBU_RlBYg{Wz&I4#dsT zRsZGACxym%384{Rl~0ltZ#;58F%t~uL#y9{*ym%|D;K=#A{`(bT3tl?FYzry`a)89 z0P>eYbo<|B5QzIv9b4l3l?P!-NYs%3P>fKJzjcCal>EO+EIA4Pzeq}akbiM-_-_B3 ziz5#_`G>rORXtm6TqGF8U5}bSHlk^1*a2npen9q^QK%)0f*%mw{x8*wODMfy99|pU z!`mj9^z-v4+A27Y);IHL3u?iTGh~^80%XMHTl29*ISTIPjxogLbZ!Wc9Wu z!_ffu|NWelB=20J5OnM*%z4Mkn(!wV0;@N zBKRrB!MiptWD``2qJtnU5?X6#A~N zRxS;Ns}NA72HeB4zy4u_{olA?S0KnOpR-jxLWhyWVYNsJvp63yu`>s&mhm4B?iT=7 zEG`A$QrfVj<5i#DO?40)y?KP!}V%F8 zq`YsQQnU(1w;zeVD=(!Bvmd4IF_Xj-CvhEa1lMF$R!MASV_*v-)R-N_OM(Fg^1t$A z?BCpITh?oq;d&)y9WNWXGjJ?rr2Amj!1+tgDV#~!C>ZOgH#hd1M3mN3pbGqVj1c`N zR$R0o{|ZYj{Qra}4EMjnlk(r;N%>#lnf%}3dE?*Vsrr)#Y4bc z5BAJvo0VL$I=laB7vZU7f+?OpUtCwap$_X98uckG8N1Zhs6P4;Z3cWbk^`>7eo102 z-om8S`%V3k&^M|dlll}`U+R3$UW%G~I)yxCVcu7#httdHBT=j6=Nu8!zd@;7j)*-m z+v-gX&}Ij|uco~85sDuDUcPd;xwzmZ*Tl5?OO~5K(?avwWjz@QtyxDe#fJT60T6)R zU`LbfR(&AzYK3#w0fTyX!JFz{22B@{6lkDw5Yj;oaE*@%{p}|6Z0gT++{-`3M{F4g zEJVu>kOdB73FA;v1;BEQRoxbbmG9cc_?1e{P!o7YjyQy8K?8pxA?h%RX%o6cRCTlY z!q;=L_@mN}_evUNMb<#DoyKu*K`-OC2?*LmHk#W5_M7)Z2LcG}Ub8x8(|BOws)9~1 z`ikm|r+%k}8DW89Uo>|w4pmikW3qlL_Q|?vgYQNfwhHc&nwL4n#|&L$$#sY!qOp{z z2EU)|Si^1>ix+cFC8}i#@O?@-*^LCGeuc%GcrwL^Ar#wc-YL>bhIzml(YuN4c5t&0 z{7M9OO){$dz@?%R>6g(cGD9LUrCTzz*!X-;_wXiTXYfk|=|f=AM~5dX`P#Y8l8`!& z3CM^~=KWIWyr%^EQHq^z{p?LbMw764e9uIE|Jf^+S60gj99g^=B8Wphmzb84YCf@x z44#~TOE~Eo4jq}Hli8#nKS~8hj#Sa~t`;EH5iw7P-c1yw2M^}~FmynM=}K_}IO*ov z;j;cGkvg(hon9V%isnuUboq9>m`TeC%+!*sM0jaTHFvqJpKpzr_%apse*OpzLVhwQ z^fs;~vWW}P(ZJ)f0s_AVeAoHgJsp|9`2}%D>%@4_S<)0US&tOb1m(f+QOHZ?)p5%F zyLX4`KoeGg9*ze;7edatu$>DV+ji!1?|`aVvq z{t^{Xl8ukLwAg0Q-p`aC-Zq8}Txi|ucbjUCBKuWK;ATut?|bKTN!9kSCqM?=M=M7JT*);Ngh?exiH(Xc%IWp`JCq5#2Lyx96ii>l5 z_xfr@R!JnR`hs5c2sxpdfD=b7LWhytZ%WGbMH!pQIeCB}5Kw(sXABjOYdj4>>KJ=q z=Y$7m0idXSAE=!4fO{*t63jOPPV})|&98HcsUsYV%mKr2?6u=Ic6UhY{cbsWGtZ=C z&L5DU|AT zhzb~F#0-!=fe1$+ah&PU-rf(6E6>#F<1`U`mbr@?$VtlYAxIoVbXFWL)|;dd?9d?C ztpE>enjV5C2*SD_f*l#o|I+y1096os?eiZPsXP>mrd0+ZkM3Y;VMv?_MQnCebuVUF z@P4pd8lrY&5Ak!4?!Eh)-u$K|(n#qv*Z`mC%h#tO!lfdN-}uY${)@;-1_y+t}OsHgq$EO1&J+GFHP zA^t)Hrw@O!`i=46QMvGo4xi+l&E}(6omjG$HO>8#L$v2^GtbcbCwtf0^l?Op-dCoz z-HYx0)b75ZAL?ll7;&UQvp#8M0d7~XzwFS13WOV-c6g;V;4Rd|%6YIqL z#6?#2Mavrf>tlk}peSY_pe@6A`pSsZGGb^+X@uf87qWc{>TpP9nw)InMEdIydWpl* z=oMx!(0j|4tG@}+d9x#fG~Q5b4~W*__KOi&f1qlhRM;9kjgp1NcLoZ_rC`>w5B0wwm^ zON@$z$I=D&945?ho5oV2v3zKqNmYH4sNA|2U0BMveuD^s@8Cwd9Atj$YU`3J?1EQI zpGro7vbXx>P(Dn=N12^W_ep-Uv3=JRN#@#9ELFK_TS##nuihL;w@}`#Ji*;q%Gj@O zx$3t2u#Qv2@u>}G!A~@G_0Q_B_)+MREVhF=$nf@S%tE6q>%I6Qykm=I*(lTevSKlO zF6j+Mu}QL`{9X;(u5Gfn<&7d(rfxD+E;yjD#1EIP>*7XnrKdiB%B3-!XEni{NuoE) z=Y778pCT&NDB7pT(AS} z2zOOji;TbJ$^T;PPT2Z7np%YDaKp&sDkQ%QNmZG#`TGr)#a)GLl2^O6EN>i$We^5? zI;4;gAI#rk@a+NdW!2N@?D7mLzYpIkK`u0ok9-#ZO-_{)Ht$X_eHjO3mTXIPu-x$is)fJn(cQ zq+Z&mBo{i~veWy^bLV@&f{1Bsmw12+ujK{+@dWJ~8IQAcOA83gc|QmUo@)ICl_55% zoxAD8S|*B-o2^b=_aP1Dm>5-F0tJ@=AN$#!^ZtK1BFSqO_pbRoiTD6gh*JNa;ERL6 zZzo<=7>)7Owu(_{-<c_5p zD>w#jk+{G9czMItByI?9(%;v4Ai4({o4SIZ0c?rkaXQ61v>dZyg(qQny00hWdZaei5qu693#Jod88zHt2Gs_03T&nU|QHKFo|Vg#o(T~2`ZBjBu3 z^THeRniuFOb%JA3ZMJ0Y!V@Y$CNZg5+74Ts6j;gww%P7d%y4g?)lySzI*RKGyBwO=jnyzUp9Z>#Mb8K3cuI^jqnE$}zuAFPNE;LgDbeE%Rirc9vizUzb|+ewa@ z6X8lf6i*zJ2S|vuSbiuHwf;~%`J*w&0ORRD6wyIHb?z1csRASx>P5gVuPNE8ygX20 z>;%~nfCBg`?Np*A&qz!_y>2SeGYYf4;v-GAeD z=yUgPteNO!@Rh|n%NmN@h`Dbw-<(4{i^Rx5F62$u`+{*eX5S}wk)lC%KN<$06Yfk@BTCQ67C zNY~+)p;OxFlP530+kz~N2%;bU{?o_bkB+AcoU@}7sq$MSO1Zb+6b|ZHo$DNVYs(X^ zB$EAhKgqY`AzEy+f=-Fl5Z5%ISvsD6!l--DbVv13v<#6+3S9Ic0ujJTstS9<1nYV!a;uj|^^ZI)->d^kebFSh z{Q&maP=rp&$%{Q3TcTE2HXBd_O3K(d8d{M0cqoxcAPVT%o6=!v3C4Z71N*#1@gwlU zFCULYiSrMB3Sm4E{nfxbPZ)Sx{^|>gr;?87C*Rp9iz#T!`g_&=!i_f4B3~$-@~+nI zC`UX6Nh(o2yWL31U$$8WhONgH&jXx*8E!QnDfvmaw*pb-F6;+V$+Y1^TVBKi&Zs*_ zhh!j`%8W$|j=Tyg6FozFjWy(FOQcENpYfX8wwzl&J)EyO#0aZYwld?cOwPL|eb#z)AysYY%Sm0bW}?=ddM0B~4RKHyr~SgWeedJ*sVri%*&u4%1m> zXqZFeM;#*s@A}Vo{)T;Nc$qB8lqbzm$)fcWB7|W zWrxQMazfIoH)I#qR$N~uckP+RK$=lWt=@1L9}smYkAh8?l!dn-9#)ISHoc)q6^?5% z4i2geZ=$!hA&nn<1>3+%ot$NtZ-5!MT?MXkCZnrJ7Ua68M=)FP5tP$H0P-X?1+$#y zJ8@NGtc1j^2Tc-8&!aJOD5Vo!`1~OxzGRxJ<+e2Ni(i~9vD(1az)iP9W;-n=J}Pfj zY?9F#X~c@q86TCl3&Hbz4R_DD=oTf33Q7ZsG!XBQz^OV0h}wt`*1#u-4@i}`9fEb{ zstA&241SRW4MxaCot#$X)Gt;3?c~`L@mJemJw#7t$YddRUBrP90cB?_vlDr<0w8{t zwkpWN!wy?)9YVU-r5GIHuylGFDM^IfY!D8Qa1jAEZ_1~jhxj3F@~DJ&FKPDrM-*>u zcZ0J_tMs+om8B)}1(G5IhRLDX7(@#eUQ@SQ3uPp;WTK1Y8Ym(5aEQkY6M6QY_LO&r zVV=Y(UY<2(QK0`yWp^7d=j5?sHBN*iU4WBZ4zo)#;>j zjZ>Em)$rvGnEU75U&~0x>mpYN(Q1L2wYk$vl_r)N?kH^sT`;kwV00ugBs)pL;=}Kuj4}wCsrk>$-uCnyp;W2dbn@SA@jl?ST zu-z>}2Z~k3Hc2vwkn8*^fTH-~C@^3itpJKW6OjJ4mSY{pR=)|TD;fLZPCoS4ek!h1 z0FYBwMu{F+S@k6ZpIBe!lt&fvj;Y7wHWxo$>^<4UaM#h@t?PNDsDaflU2yJ4;Wt2Q zgao@KkdtKhqDbgccp@t+>TjV%JK_}O)BE;sgfEwB;Y199`#i+<8v{}mi4w`=F+nq7 zNYW6d8QzBd*C;qCihh>w+ zGon;Eh(Zc!*feKB0q8gIiHcJ&@$WH-1L+Z0be`XjslA^^8oxG}MuKIJsm067pZYc; z5J<8*m_`L{iPqQ3A$jp_Mn17p>`*#F9}E`aY@%e726jAzYMlG6F-yk~;+@P1L}{K-VXz^LH$O-AE3-HlFE-VJ7Xj-RHBU*$x5ExU z_DQY|I(ssgr8$dt8RQHVtQaZz1{AC`X864NZ3)h!Zt;?-sJDmIP<5jvQuoCBl0$E~ zRZ)IJ;6|Tgt^kSL)w`DftwQA??hC|eN1=Ou^kzS;fMYg^v}Z2lX;y3zRR7^=N3CvU zHH5ILn?q#;7$CD~adOTa%?iH)%9%#)Y^C0bqiS2Kuc*LI|EJECt7z0`v}UyzV>BApVW1uQ^__ZWgY=K?|+Mb z$8ELkfftfs0y5)LiQC(e+E*_FLVoaOYB8{Fas(2mH3;?T<{6Hg6n*;&We{w5*`MnJ`WGiXO7cWsjA^!aN4j5C^0&}hy@Ee() z75ren(?r}i+T`_J7|U6wnS@|5U|=~DJqqzp50brG4SW4)#S@{AmBKK}-7YS-YATo8 zYzK>#q-?!Gwx{h#d(|8a;WJ=zM4M++wj0n1aW$XFFXqUiUOZzpyDw;K zMnf^AQ@8H_(N|^h;EK@dG!M8a9QMv#dbDkLk!^C1^n))Z;MyLI;Ah|I?KJe}ekOF^ z34v#r{~#a#E;?EuMn-vAic$UuK}cZSOaQX~$>p%xhyLk$4~pk4RQffeXVF=4YJ zryxfe#6(k7pr!)MF_g7)>dgx3jkT^5D%W4R6mpXLOdLf;ymJ4IHOgxq@x(l@DCv@& zSKI>utL?c=@s{p46tXexuTu`A9iOYSMZ>)gFfuNu_Fmk;I=TtI|H$UI;8=CapoZm6 z&_^D?>Aj+ZYy-8fRTuY7`=k<~MAJ&>lXu&f@f!K>=)#%14K41`?vV36x!~w`eWn7> z`sy<$48D=>d`L8GZGl}@9Y%EzZqdQoWV%_Y9DH0!ZfFggKSm3ZN#ht_3G%>4J;z+d(PFdDw3GNHeG{ zSA^DqvvRve&JsQJ^>0D#l?Qwt5+>_R&FFqMu!o7)(xlL+YZ8B@{Ntr14OQ% z7VZ~LyZCoikpi2rQhUCMCxR4fmR%nbtIsvOO;oVkWABl#&_|#dx{}7jr<$5HLU)j@ zvfN`4LDW2eP0136#?tK*8-d$1j4dyk>`*IBU4vVv5KxJ(`=mL>$(rKy6 zYk2mW8IibLD=(Y%I_qhEo1~%+1q={G_ibg`hbJ(p9gLhvuO>!@A5;utFu;EK z!o9@>le>Upbbcxtojt8V!ES{TSvU+>R(%GJwXP=5J@{4^k-4Z?Gd1p2HT`RPd8ros^I@P{kIbx7>GHiN>8&P9 z8v9khx+g5u@73yI52*B%hjiCZYz#26lx9}pqa^XteY|77*NPI0gj5Qx-ThynO;s@g zw`Sx_+_Xk&{fFn@Z8ByHE#{O5Xm>_goYRJ{>l?Zkk57jFx?kUX7;wnFTG3?jF=sJ> zp#aaRHoW@ohTW)Cqa-VHa+F03iE2mXFa0j~7P1@CTL5j>mX;@bYih}ZCHgcixWa1F zQt5}uaU``&aI<-o6H5&(yROw-1gl5Lg`iQM9dirpYnrjAb}!9xP^l56wce_etV&gj zv-+oW9xfH0H`5(J+-lz6+4$6ae$6rk$wp@L)(}U2=x%_mZXKD_oN`a}XUTpU-pH>~ zA`z-x1=YT7$pt)B%YVAEjx^4MLupRu31y%!cGL6yuIjVrid`Dmg^me9`V~We%aq*K zIPI!QQf*J7Wt&7B_CtY zmafWz_~5tHPlXB8?J&&Hl)!F9LIe7+Sa04>TueLUc|_5fWT-YSPZX^n1#rZVU=Zlu z7RI+yM$kx79Pf^OEb^+gg7o>hU2Sf_L0%L<0RBsr3Iz=T?>AoMG7M2g$BM5DL<{*m zY?Gx;hDPcExQy=4`y^~WcIVGzVCi70cb6Fasvc$JpnF{k^*Mxj0M;yosJDt(WJ@QL z$$Nfeckn{;ctp?y4<4E1LHUqvO7U%G^;B^5D1Nb-& z_f`+i7IqnkjV`QRr>8%frUcF*52PM8?0EIMOh~5&>gZt}OpB)oS6$-8GM*gu?I%jfWfjh5b{QR(D{bYGC+=iuVLbv{ko&Kv!j9S?$YY=@Pi0b zTk!AFWO6o1VQ?WZYRg?VGTo1ph>~@7()$=pStt~$Zo}HUg|DH!bKyB&c_ni+#{dxKqyNONL%cQB25fMRGhN+4^2<=7ES^){gv)~bqxAk?cDxs$Wu+X0u19?uQjn|uZ|)OoP==e{3iKX&Tv+C(Y|~gqY$kl=`gR^N zf#yPTRUmaemRCt}tl&X$am-_5fMv+RwINs0h3aS;(~M}m?Jk~s9rY~FL+hMRRQ&YK zPf}8VR{T7(#ADrh*>ifSyM7b#EZo)U%V57BNUd>{MP<^tMWluaIz=Uu37^|JV*35Z zJW6Wbs%|B@Mbaa5tm`!le6`HI$g`!sIU3yqdOio0lXQTwRJ>6}+Fm;ND zpGBMcC~2(4831Fc1=K?pk=froNw2i`5~Z5a#1-NVef`6|4Ui*UInpBdw7vs33~lsg7~k-i?sZR9S(Yk$zE{Dlj*YWnxz=Z^=G*!)RA6-mQlI z-LyLKcSh%Dz6D|w>lEXWPpeeCGgwg?uq3-K01fnO;|@HT_% zZW8##2Lo$s@qNbf0J>mBDQ$R|>rs8gOGhP%E_Y1@)9;?*0(mswsV^Kq*ey&y$q6i% zf6!xAM}C&;8T}#q>i&a5L*{Wz->~>0Bl}6OfgUqxfFHz%U5H!UM1AE0rYK@gY`lAw zD?e-WShuJ!eIP?Y$=UiyuXl}H8u<*6AVeX?nf(+*K7`f~7flR#yQB^ULf`R2R-b9z z!w;pVKS28`-NGDgmnMl)GT=2b|T# zx$UAG2Tws7yPF~#nVs{HbwE#~o*-mZg`+ug0-0h>ia}#b1d}=E!6y2x!y=5wzQj$O z7?>L^^orw2P<`HbvWW#UpU&HG(B5hTZSyd%L)M|4c6l3b#}S9;xYK9(VyN;3;U-wK z20d$s>RCSnb)uG=Z+q(T6VGD{dP8xef%r)o4&V6h>oZD`*j59d*jENgy<)+>VH>x`WYR6 zgcJe#)2O2!2oa&d|Gx)wKtbr3|FFUTT_FC|nM8vLixbROB+9P!pF}PviNqY|m48kk z`w^@Jo(9=i1c)%q{;h(pSm>B`2BzxcH43h6g7y2ih;aS>Q)b?OtYiPJqU6SZH-kTR zsQ>P4U?lv5y(yfMFiR3{#sqf{VDcb9g!$$#XP=DYJI8<9{r_Lw0tsUDFMIQ^Z<68G zZjmlUG$)RJ6ol{DvYb~bD{}*euuq50Q0S*9)4xZSR)jJ_DKlMZi~LjWz7L`lmh0lwK_isN;PTT`LAK`)3;(3>9C0Onp8bCGe~aEXUx6%e>?HIFEb$(#8Etg~ KwQ?1^i2nh3zD;dfWV++B}Wk?4oQ$Oz*3MXS&^XR90m}PAUO?#1PLM_ z8D@xU01*Tv=bY~N?!C{s_x!le_uN0<{OIXbRb5?OU0vN>wbna5T{Q|aCNc;FLZP9q ztPg=)0U;2wU{XRnL^r4e1%VKp=xIMu;YitK4WD9k`$B7#L2H&ktshFI<$Eh+^rmME zgL66kvs@;hZxr&+uHA!Es<_e^MX@Jtu*EHtaNZ*%zKUnX8aYqIbo=UUWoEywE41tc z6tuSj`^ZFfg^+t6FekokN2saOx$X1gv&+4ci_6Q)*10q1`orHl=jPQ1Asxrh(1%I= z#|GsGkw1=4FD|!^E_xQv)(Utek(DK0QCb?EiCmczOx@xR*C}=>GNS{Ni$D|6DPDA6z@zKe_n1c{aR!GBh+a zFfh>9*VoS%y}hli zt>dHP`i7>)#>VF6=JWIOmX_8(%gX};LnkLE1A{{`1AA$h{gIWE;)#Rok%O4Q{jt^4 zqw~wjz4M6aqvvCXdj0!yKlTLMcPSgUA?Pi}uRF>;duBriWq(dEyJyM2jwL&H*;{w6 z)^BU{?mfdE%p9Drom_ZL9CmD;1>=rBE}Zy+hke^;wJWDz*H0IYE)oX!`)zn z?ch-q3ia{h$Fj0AG#Z_kmseO=SYKc7=jZ3<=2lr*X=i80$;oMKZ0zajsiLBin3$NH zoUE&>tEQ$VDJeNPI4CD47aktY$Hx~E5>i}Tj6@=XgM-u3(jp@xg@uJJEiL2X;#^!@ ze0+SiUytsDjqm6F3JncCUp(B62D7uX_fn=0D;JLUj!s9mkG2nwJJv1^&tnSrV?XZ~ zH63B6PgBYc>bsAp7tT5`Cqp#@^TTr+bL+dSJ3o7;hfo6(En~RvlbG6}Kj6|x17^Al zM@2=&%E~Hv@tYe0u~*Pge(=NxTx)%eH)lw2&Uq0-(cjwt>(733BZKDq$9qwi95>hr zxPNcaA76ZMXAmlT{9O}pU>Mvij=&-ZWOX13FRni1pd5biUbK~Fj@$6z55B7(G2F!P zmr0LP80?DM7*DSz(kJJOpl|DkY<@O4CcND_kXCxL_6wgQy~h!?vRr`cECofTf*2Xx7LdSOsJN)L#hon#BFpPB+K&2eB;r2M#@MDrbw_90lrvYlrGc)3A z?YiO~Kk&;JyxV|r679@3WJnpC$n6YJ6R>ltOxMUy5G znZNVf8ziy#m_#7MAtan%cAX|fWWfx4m@#o%(@-q@E|IMZmfzNb&el{YpTPRNBJ;Ix z5Iw(}=uyI9eK3#brGUH&R$b@-ky$HI{Z8s_Nh>1`)??y8M9-to3N;u~4NYG}T|H#=&(4&zAhKHRKTwT52Ze4qx9?8Nx>Rs zWw?Kp4eY)qPxq)GS`20$3dlVtq*oW%ZbxMWb+g84y~d$Byrd;ABN81NN6CGB{#jwJ@7C>x zCoIDpI7tb2GVip&_Iy~UiSSA+8)x0th2wg_Y8{r|^F=&* z>x>HZi9ED3H&gX1v8@X^0`V?+>+B`?9iFG7%0ku!Jf zX=ucHw{9onb6QOoBW`wND4>6N6GQ)11?0?la#dA2*Dq05B@r4`B}{B4-UI_=oq8RU zEDG;*Bq#AEL-D<+SesLeY;p=33%LFrSOs7;<7J{~!9Si1C z?^?9r)#IqLlER4lcbIKks#iQkTs5@aWM(%pMk|Nf%w|job5eyK`d~4%#e!qJhRQX!b^3_zpP9Z>t@CH{oL^ zf#tC+9K4%BnmPLGvn4W)RXDnsDe5Z)%`LvyZR&&JC)<-^aFO z6X?6MRYhYV-BwpE^(L>sXLp9wPZyc1vGhoRyiY&qG$c_bbs)GZbrzML-MmMfUCUCY zH>9fKIy3Avh*0|V;%W-!ndnUakfom;7e%LK2sUhDxUXZYbW@4xM<(oto#>`g!xHKj z_mf}|I-L{kOlirX^j7W-L_D!A+zlKum9AlFR%^03^eOVrK-=-DN!`t4`Llqqjlza~ z_eG{E&}#`8g!F6Q&X=7l!-RduBtN*c0U75}9Qlt=rgF6Y+l7z{*hNTbG3(M15GPUey99n)#db0(RIeuL&Iwc{D8!BVJhDit(~+d@2^Kr} zK+9J|{ZL+mG?`b7(e}kAo7b%3KW_KOW$g|8M)CjK@AlgCW3LQ7s^DLfq`}YhZa}H@ z=nUhFJ3TH}5ns(I2#3PHCuYz2zW}IwPAFT=?V`jwCoVM}2aAnq(@9ug-cZ@RsrqQC zL2T>~QH8ekW$Xnc^Z^^=Y1~IM`{-F@QBqm-eV|nRW{!kja8;~pWzW7pNpt*bJ5|xE zlDf=^9!=QSRbGfsO@Dso>%89=D~z_--zq1Gs?}kZWck)UnLR5}5dG2tk_jtd^l{*C zHNl}C@5;+&y#JP)fadMxD2#RkCzP;ZZaah6ukaoFk6hbPKWxK(M3|(g!2NpgwDXJGEKJ^v! zq62+oB4o;fGJhZUgXA-(fI6nylD6Z}_?(rZi2SP;lz=eL#Rr4)1@aAHgFY zj_?97&6&H}<05I1$s&2e+}?Q}3aYMc%rqNeetj0a%?cFHnGXdKpTZfVUVC0h63nB@ z9=n2h06RS8g=frSM*wBkPxMaEtp~?`pwML2p=)r2l9kEOC;sKlg?j z#FP*r15dkCGK?nl&qu^=H=hf&v;c0YiwBv1W^3{+BBmmxNWU%M+v3t1b~T#~XKnX@ zHbpYMh+pD}-iJc(g8YSnbbrhvbZPF=_NS&vf22eKg`qVI>!h9R*#l#1RbeczX@yDk zty*39{+AbV?p5hf?|_zDb*)a?xC=;WBY7EPVf6Jwza=yx@#G}ItAja^18;Y{W%}Ag z+oM;=I*0e(sK^uw0E{1Adj`Ccok#JA@VnshqI)veS8r|3$bWz>gt8uvEN-Wv!7Dz8 zcZCW8v}^aZTehX`2tt<7^GaTTo;F_sNPW9bVOdkH(UdEjwUgNiw3#X63A?r`_L)^MA#D6SPnw>@;z}s){6g zh1;;LguR!|K;M4VC3Wlq7A#o#TK*b!BL%MQ?oN#g#j^EAk=R;CdCCGkR|U&%j+%F~ z#Bc-sgmn+@11nt^beU`^^TzK~G!W#?U!fofYZ4V!v(6ygS22YXF0n!BT5k{YUfhOB1Ua9fG8H3CvAjU-`_3Bu(p%q-6+Bf0&X^hh1DR@{Q!Ed>&ME zV;1g{0`)52u+HOYTLG#EG72@cVn9=YGM&Vr3l~u2K%j?6iv-FGx zY2t&H`CpU=kpYe91ornI`9EI?Pp{{=yyC^UR@kaV# zZ1=~*@4U_W-mPfW`EAl1$HOR!aItzc0J1@T564dWzbs)^WSutYv)?`bogo#>&6{X) zhrVP|_yxqY&*rP?9R{hA5+cRnY@W#V1A3`oZJRor8s9xYN8G$BWs z^K3Asu+4^7L!40g@}NhbI}i z;v^Vcxm!C;MCHX+vHlqHG$$%~wFw4O}z@bc-FRZv>!IWu}T?edU7c(Z()ra3d zxVOYFfGI>Y=IU98ut;Fgqpb1N5BY&yv(rEqr}7#X9Su_pGRlb$TGf*ol?j5^`1kFLzyLCxM7s^z^3NPof@k6n{}xB z;RR1WUFb$}HJ-Z&U{aypH#*>QrW~GB@%aIYgG>mTC4#qc3ZGDR(FXnd1G8%>m`nR5l|f zltRF967n}@jfv4`&`1MUj7(k~r-e}>YPKy4GSNZ|g%3%GMVM{mzSHSn_F7jfDlZ1@ z9JT2209RkS$MKEE3|4@@l}__tf}Fo)+28(2jV>WcLn|57$R-qti^-v{VlD!iu3wSawOwFIr-Od&lGcFu+U);sM4FwTapI5ebQTO7cs5x=E6udZGB zmB0Qi4!8d(ad8@2x4Q3Jn1J@$7f&IHjjg#9cv-VSsNj*Gf!<=XRK;H@bv~1%!btN- zBt%}(e4>$n^?T(dp&9R^Nj6N_Q-ejH8`GK@{cH*0+QD<_#e561gK#KUxK#VPB6=BL zCMOAw$6{;w(AV-&wG_55dKW&&UD5>n-f^q^A`GKd$VHJczU)%S>-YRZ0AC}0OT~h_ z)$%z!1r6gqsKE`sXZf7J-l{ienPV96YPXBlPAjV=+PV-wT{ORp_lGb>4VY7~M{uUn zTTh!g^S3c0OU`^ZB1G@~;;j*E=h-zb=A^dfpFbAr*w`v*ae#6JA68`<+AKpI4XzvuwLI8JB6iP3-X)v(}zum1sg)D=;9);g^Vltw0nwPBy#t4` z^6diM0=4cqsoAymXf<7A2&X^k4b7VxKkgTL1R?!qi5?GSWIMo{TCkSuR|+mE3{^(8 zX6?4F_z=x5wGiLhLTuf3ZFQdY+%nzL*`oHD52Fgu!`Q!I#xBZ!Lx}+~Q)VrE-%-<@ zvFYeHZLSj8U$Togbwh?rgLJ_(v?$r!cLPZcS*vTQm~XeuNDRgeB%5U{nu0hY5c3u| zYm@4D-`=tkm6>~An=SD4ZPLS>-VB;t11>J8*1k{45meaDDzu5#m_Fb8+V@wD*0G(a zbw0BWxd_8ATeWW{Evl|)GdrkvR4X3f5$xL&T;4jPvs|L&BW5f;;_Gs9W`eI-?@w}z zYt2faWif#9S}%^SdyxSv0P?W81D_D2b74gyy5Khy$vFF^}<1px${gWYAH;XkkRylnF1H(3b_A-~L z#S6=f$Zkw%8hx_csUL@Eqc49;IsWdCUw*ZP7nu7kCrT1X1RrGnddG*c3i%oQ^Nrw^ z%$CKL+Yn(3w1tGS)w`9Ul?@Wef<5YD?(n(UzfG(^BDmMRsx|W^(8S{f*)Z+xr;~SN zfG+diGm-<;&43@?SMD`0UfD<3f~qMus-EoH7qZzEq9tFXQ&~^mkp*mzW~%al{QF$J zJ4avS0d2Sq5|!?(>w0o=2VJ01b{XQ8*E)`C@vKrZ=J)elsD4Lr zJ3OT@CfojW=QOa$g&`AWj#*?8Mzn7-aM>~Um*_BKVY0T{lOrczmXA_+TE16XJO{l* zBZ(0umx`QrU18pUHuEBaz3fW{S296wG)t8W0}}oE^=mO_F!xxAO91B_15bq&l)bR# z%%PwR>P#vd-T6t?>s5q6u29f`82fNr0Na2!jv8@RM!yX4BGa+E&?z>0NS{!GhMS6>jI+l+Qr-lg_G|Vj~}w^&FfD}$Dyy@LC7co zw*AZ_c(cc)s(!oPY;?7p>1%H!vDxfZyxQ+#Q|9)jjuFh?h$B4lI=_B&@u#vs-tPei z+?e9v6$3{~86l!^XSWe0mw;lC7`)|-U)1@o;fd5sEhegqFS1&N7qxx7) z3-5z+D(?ct`{rFQuT7HHy;LLNNLio5!b0x9t-+$Tw@!cHR}D~ppS;$TR2{`X$-2Oz zYc|>a7rDH*H2_^54ZF+*0{;7@vN`PQFo4dAIT7{XY4=!iXU!_fekZXj7}oj zt94E>+;~$c_eeB^)vocTACr-BQ9!L?9dJ1=shMb6`YV~KFd^JjyeghunAxn1e#+!^ z8aZ7QNZl=J$Y>Evr8|Dpdv=C&eukFz*3BOX+x+`Oyun0I;*h z+fJt!9p|JC-#1D+xY~yrw%X*4I7db{3}hB}O~&gTf(K0=e1LfWb`R>I%j9aiS85l^ zbWl}~?nycJiPODap)4Tf_~CPzi@O9kJn3DazoWkgoeaZ^*-3$cIcCCo&x-4*SJGab znXIM3{3baO$@sbdeBUyp5gm$}ugz9rw*jkdCbe%%UO+FdUJzYSTo7JB14+tX3j^b` zEwe$hbgm^RfXU?za~n`KYN~dRMhq}PhoH3a+b3gx_nLTK5$Z0YvFpwaY|734-Ma|9 z)1bi7Obq_UO`QZt>%9FDgOH)^UEItMz*{CQ?4Z)3Y_v$ni$<-dQ#gD%A`L$QiqGR= z1^wHAmcv}4w`GjO@!H2}`6Oj+<`iMm9sutmx(8nRv^Chf>Ezt!rLEj^sq<9Uh69sR z$rGZ0l#}k%Zffm#PpMNgqf%qJxk;Lm$1jA8YVBBtcPMUTP0l-b2E2GPd_ZS~1*LO$UYhTw=O}pVcE?D>aluBMS z5;=OCD!1zc4BuB`UrkDXyb~qwSoQsf9!r1Oz)p*-e;~Ux&g;jR$cCr!D^#fk%0@_V zYb$6=$NKavyp?7aN1tX1{dtA0nZq!~Rt|WXB#qEvI1izkZbt>oH{7G1P|%3M(fgA;h(IVCRD>8;9x9LHNT`u=~sWb@F;sPP0BpNiND+w z1(Xk`#l5r9h3WW#{c-a+lc|lnP z5xe#JYm|zbe(-P&!jCq1T8;qGYpDU22p;S z%czBUVp6y~5HvYf1UaL`Hth4gS{-z^P=g*l>hxV7+#UO{>I?5mBWqQVh_0F`Kd+yW zZgq}_DT0tZivJV{!Z;Y@zlzzG#Q%EwZ<;)c|D6U;{XbF85I^$5vQgg*sF$au6Cj*| zHX2+CWG1p!n;%;`9&Av-jIAK>!w+7+XXQkmS2kKt9~_7Mg&LX0j;&1LwY#%^R)IS> z*z85q2Im~(ULj5k$}F!Fu_I1i-Wx|dfZ$6X+ThOz+pa}21!beyIs&SLU#m?h7A*Q! zDgl+(k?XzDbBvM5&vGL6(w0lFa-ap3)pDi}`4)I_vD>tUmuD%~07{AsJll<{go7!^ zO3;YY<@R4FTQKGW*?%Hd(0_-luKafp>wki%{vGMU$F%-K^?w1i#{AV(AjR!g@&wo{ zkp}ZtMjpkFL>OL!Iv`$;mPx4dftdiue2T8ew}R4t*0>hi*AbHrzd$#eF-Ub;c8LADdXi195ghU6@7?2^Y~ORdkkRm(VD9_0Ts02m=vF*5 zp!^YKUjKQoHuG>x8mt`M>|g}H{8YoVpilLs;PAz#XhBT99kL-zzV!FD)>Dq6RVQSc$i2(%$tZq(1C_Jt z26~3vy1zRD3tidVFkG=;wIsWwZ2J7elsR>5ysQ(N{u&2{6-%Ef;=>Q@ZeKdQ*9mC4MwfuOv`{)IJ; zIKPSkP>n2zBMlFr3RMh0qrVT0!@AT`OjNBHZ?fJ>e!nejJn8a@4{{Ky{z4nBNDpy| z%s?{+M_*lFcY07W>UG`P$UMq_U3KYNu)dj`nLZN(XPFq##wbe+OY}snzEsWlM3a(a zR07bp>Y7h+!iw$@RNmq2q0VB+trPm}24Zp(yvcZ+p~ZEHQB z94y+V2#Tb2F$HsRkln<333E#QDgcNT@8ss`EMzL8*Mzy4p8!12qts{s241rd9>&axyzMcLKJzIHUH z@-J&p+wECD6&Ch|kQO7Nj*KU)yqQ}3mbC;RYn@}#Tgjw???JLx%VTB{I1^U7$cMDo z3)XdSrE+9fI|~syCN5!9-_ZZp~n6p{|-V&5TY+>G^vNy2y z@8?Ty+JGsLwH|T|tYk`sZq&9`xD74M&bfgGc=C&h(3oF^i|F)Q!K2?x#mL4ZrKfftTcWy4GKsyyAHGuniSp&_k~ajzQMC zcM+#oddv9O@uc<>`kt|G1KC?BvS#ZRp2iD8xsm&L0s={`-7ktq*Ud5 z$B=C;MQgQTP_Ct=Qxw{L0`IM(SME1H#>-)heBv*qq=j@h^^cTAqVMd}lHuOb<1H1o z{inv6;YQt_y8CWp#6%}FNuK<%V;XFpbBaWAC4|RYuLjEgp@zF7zvYTGjw;-1JdX8! zmuN7H66^5VlsS(RX+gh7bNSKsC-d`-{%MQJi(^sDLE4uQWvMkrfBFtSVIyQ_gYLd7 z3$5@ETYF~jPW*w;e#Sr1syW$N0WlMhTD(T7gE=UNuuE|if5y+))m9DkhU0Tx)_CyB zkjP)hm)x;_(ury}YG#N%jZ`gMH-YvJR4rs3_T=p*jX1l4mS4cT@RfP`n|u)alFeHV z4h}feedXpi9Lf}}sL>$D>B}#vzJqt9t{RnZh(0{I*80+nRrK=@{u4TcimF&1qrvAF z%;PoJvh(xpiE5Q{Y*$QQbUzHyo#3$npa1S?Mphuv?=q>cD4fGvnJQqWZ+TK*elYhxJB@}t3*Y>H z{Oiy25Z2P@2!wb?>Whjr^baN%m5Tb*0-baq2npLKEq-!S#YESBPL&(mM2?GkxxP9O z2=8NDO&4sdX1kG_BL);4y?oJZ1BPwKN%k8dpQSu@GbhOD>@^7)_f?J{=t2e1C)d~(`{alDTYVc~Nr z6ytD$6s(*1`&^V-yrKZhU~vECtrhEl3Sl0~AKEjl3uB8Q&BGB=ZKOb8ns0$l>ZocS z{&*xLZ?3HnS`w|!ppE<5GpHvIlu)Q$MgG_(*_m6jHN#N^^Eh?Y`+7lCNJ`ioTH#&Q&*@#qqxsw``Fcyg)5 zjNjU9oIb!fZ9o^(?O$CA@qer39kG#@cL3$@B$5fGMSfre{@ngf5mcIBVW z`bv-73Quq7<2ySWgw=2$wD{%uX9R8DqimkU>udAdy#LHu=Cg50Q$(FRBnlM!Sv^uM zRs*Rw9zpYTj>!WG`%izqQ{i?FBI5w!xlc7HZNWPiCnEDsTHnp7AC#ew&(C>Y>HD|b zli_`u2L7~)SKMFQ+$?2bU}0)Y=30h8S4>UU;5-s^imWrz_Q8Zqk|26iirQ(>`|}(Aayy?)7f~n6l^rB z;lK0dQGuZ_L6DGW-i+duk*i;Va5*2J2KEVz(LM7LVrC(01r5w}90{4=DAfw?4#0?BT5a(5DY|<8^uc_>kcB zNHK9MAvCJ)g$S>;%@kW>qGC2rk2fN46B5>`y z2zio<=iMvT`@`=rMoxWOW_ejd1#6hP!gJy=4woK94rO?`RJ${*DNfPom)p>(*DG=` z^Xm=d7|BzviVRAZ3|eId^Zg2}{aw`gE9#y#&lCe}<17PD{qr4nH%+y{^P8f*9avteA-b%uZy%);^w$%n?Khr_wZ;cgPhLto*0oIh zvE{*feF3#6S<9iFg}F`yQK!?$8;W&wEi1Yhyp+p*_Nw|FY`LOoh1QmoM zFIo%Bd`Y|)TA?96;FOH|J1aJ(TtuVg0~}fAiGA(o)%U(=7pS|;Ygk=H8LhJw&7#n+ z2U(QHewDX*%A6ceFA?G>izYpJjA@=to=e`mdSQGFryW;Ti(Yda<&z&JxO(BxD}IUE z@Yl1)dE#TJuLL`}POUxf@^$n@y%(yqW`z{t3tL-yS9uND%dAx8Xbg$@d563ny871< z*0sFVJZ3hipsr+SDgLNq=O~V%dvkelAN;nvAPG=x*GP-jQ6roQ?6$R>!IPoXIHvGz z)crarA##XD2cB1-G3QH1YiJg&%9W~!3-sx^wPpF$IOtjAPs>m7zFvk($kdPhLq-$B z7I0M$omtLzFy|}eT4!YP0NqzMeafMjLY)TDCo*|rO+ne{7~i0`P?=Tsu=pdVgcH!)9TZ|HTXJ+S5f9a7 z;(x9KcNR|`Fl#lVsOP)7Z0H>iOZ=$g;05UZ4#8eea4dnI-jH~HcKPiINmTa7elsOd zfiRHkF}N0~JzpSY1tCi(o^??}X6sA6uJR4oGqE8rZ}@~tzXnLxIKwsBN!0m^ESU#p0HOB?+|tTIC6guQ?hXf;QhzM>5YD$ zy%c$eCTHh*eZm2OK5Ff0iQ#rhP&j{t&A@a%585%G=`cQ=HmWvjS&NaWn zm3#>H+VI!1bF!aepfl)VO%3&NA1rEieZ*kqS%~=STI|Q^_dY|DzL$KuN^ZdiGj<3A z%b3~fJJBc&wv4#}4jvA$_?Mb#G2u%^Cui^(Q+9PH*T{fobV;PCr}4izjL|E2lQ~a% z(D=>-&S4M6!Zpu}OaHWiUu%<5#Pjo{Fnb-jiW?bQ}8zML5$JvagSl zOHXR(4Y#!@iHp(kp>`-#@|?y+}6(3WCnB-4W`akjkmB<){(>7Mhc0$#^NUY&VvjWSD$$X zO^L{U>}Mh_KsB0`k9pK2um){(mj26*+WN|)9~ba&;_uh9`|T@)qNT4CScLIgd-npF zqo2{Fn!$;|*LO0+M$42l9LKeb9NB0lOBTV0NQu|YY9_V!o}q?Fnh5EOioG8>l@3Z- z5pv0BBA?JJ;{0xv43Ug^xe}gK9o&<@^}X!hcDvinrWA}@eik#{od45(q4v*DsDMiTl@b5M5;rGJn@c7+QVB%bTqQ7jNW@C6$-Oo;9{_NO3sfkjbD-J_n zet;<Th8xdh*sQ%R@gQ0wpG(WQf^A^)QZ$D%C*{5(4B*+ zn!azxee|d`3i`8F`SwCk@3JszB<>PE+x&VqDjKiOu|-(f#hMdnvMIhIeQMQ@;N;8gO4aN&8viY019| zZ4Y7nkn%0W=!4bT$z3acL)&oKJC+yLg)smG@|r!YzyCl;(KC2YdXhY^SK8>R366h^ zc+4Ka7e+t8R*=k;*#yqvOz15546p`5ODRgr;_$&zs0nlM-(oBKzp8OHFo-i@B`g^F zxBREdZU;cdh^+w#;XmcyLa_&glv1>U5Y>OmzeRB7fAMe~{5Q6g;;8fARam3vQ=$9U zt|&^}?3nvzhf3jwW1?bi+MH=vj4q10kBCH+!ye(NAgz#D zWiy-+(mMRKE&`GAJQbF1U_MO<`Es+RO!shV1q3wb-<}o)ELJ=e z%Es3fZ=|a|;j#>4m3uRiYPJtTPjwcyjSd<*@AfhmJ--{Ab z;Dy}Zk+n2HV4|^OhEBSNKKI!mtz*X$mTcImJY->63F>}f*Etyky%8&sd>drJ97Mr| zZ$e6w>)$zgtK$;is}n-toVj450hmn->D%XPM?r&IT3`SKADhI7?05bHndtCsI0r1N#0Uf~66 zE6GHDRsx^AzXEa9H=vVzgw))CLZ*J$(o5q{iTCj;hsnSHYyqO|u0m#A-WR>M0Q2N6@!+w+SWf&z9G{3of@@+$#;5u) z1qt(i=hQXIpjHdsYYTyRuZkIpY2$bx!HxZC_U$O0R0w1vu*!gh8$zH++tD-8b76f= z$^YJLRcIO*91lW9h;#nF0w(jXx4So=5bGsV4sXg*VX`S(BmbunE4 zPy3fJIP3plvM#d+dEi9&W`y`k5e2C}GgTgpT^&%21B2OXq5mMfHqIyOo%g@I=6^rG znXq|)Flf+^(7r34cYiFu&}JRe^m85K05iLS~YwkdttlR z>#(S#tk)N#gHz^Zc9uPlP~NZw%b(jYi=E~u-8`$^yYo426c+nt#UNJww|v3+ikbIg z-%Yh0e)NLjcPDt5E>fQJv5GZVE@VQ9M-*PS{%wW6cCzX4wAA<;K2m9f5cE^#JQM?r zN39$u9)8|9mthRIrCyZ_{$kiy;N!=MUA=~*8LQk2&^9kA}5GM z=P#U`-;=}Yi!cQ->U*1o_*CzksvQiC=jKo7L{^-FnHS`!yaHYIrByN)QxN+v5;&yt zCl6=j*jF|y=$0lm4szYx3SfhlzSqRdI(&&wQvtS`BVQScprSIjud;Q1!IhK&Bqq1U z{t<)-OP~IzODYK+N-VbbRpCk{kBa3cfzQUC6ZrwTmO-HoTRcBrrykF41=VwLW_#mv zhO7xM59KLybl>+weU|o|{K(noi%`j|@%)n7a9WmtbKkRt@(5#|mT7HJR=|5R{HcdV z6(!`r;^GI}xnQei#pi#BiL{XjaJz2vkoz6jpQlq}6)-_&%@b#`O}XxKy%3;K)b#*0 zW7Rz()6o3SK}xK|qa+E;!7W8gAth1X?~afC^OctMGm@4xKUJ3=Y3{s_J#URh;qT#( zr%-?ReYp({v-!fv5hWy|Tq#!>Ls~FnE^>j1`$>6ag}s3Ty6}?yOhJGKt2n{AT!0UG zL~`zSjKBEFHhrUFW%cnB9x-Fg0ex$RiDmmA53gDlf_q6L7`!E^gdsBccK95!-4Sq- zN{dAXi4+UK37uaBf)A~IIsXxW7ty7_icDYR;cyoRK0wyq0XGz}Wu@pb@(MINd5$VZ zo%sfq-ncJO-;(Dne1sh8ajyZCCp1a)_}hcPM!`BoFkw~Hw?CflwK{hQ1ixxCXT{(R zycoI`X~)?47FhyZZ*33-Jf!h)3Fj-7e>AGRAitdXjNyX8(*gz21AoKu=b|Th6Izg0 zZf>*qW`F7Lo0 zfUA%q4o#@3hzCb$f-7+|E~%finc0C?iU!8{-9hoNIG9LYFiHat!Vs$?QBVx;-}jlJ z8q8F2|6l(^VTj)QM)=H*V1A%~mW03(%pcsDKOgN_SjWnqdj+7|bqFpFSuoX)6~^!9 z!<@jyn$(54uAMy&;J($`R(3EcUy9bGKP(g}Ay8*quwK5}UGp?_R=8zhA%M z&o{aYRDE{+*%g|&ExjM4jboZMT8Igu*GrhxZk1FPsKp?(KKyD9I6jden+n2z(&KZ^ z{>13|H^TIejc+PCN&12x&}&>%6R8!CcnRHN=K@78)2x`FYsc9eaDCrOM-igoI z*X2cPc>YcyXHm1S^sT%@X_0`|6R15w_&I7IN_@F9Qog%zv$r$b2x10xBZ? zb?Ma%-IW;=CElsu!+mSi%Q!Y`+90DOKV3Cf!yEZY1?z5gH!|smqMU4#zV_Kvk^JV( zDv^A>pN=C{TY4+`&Lzve#4zmf+2+y9N47WJ*)$QL1d!S)sKo08kY4B3hYrl0)IJpz z2l9_NW!^^aXB98gbRxtbHoP3CAEM14;VRU@+J_E#Ju9YGwB+2Z4ndHFK5WZKM*I60 z(vZq)Z+L5G!Vqmm&kPlWZ8wwzbdUvQ*U}R1g^+W}Tcyd2kA=j#v47}Q7S_frK2*7T zD@fqqGEk5TYtX(9xGB@{I?&D%Jej(;J%jMyUgZXk{W#$8fvIr)444j_(qChpF#m|~ zTPJ$A3q`TqsnQfvA;gW439-;v&s4%u=Z}2Ci#SGdB9P$udHu%K>E5qD3;GE}0)fX` z1%2GWR~d55r{;kG{@P3w0*neK8GH6^Lv%r|&Y`gX-Un9NyAE{;D2vvQ+%c*54?iXq z=wM;mDkRQ#4Xsw)R~sb!9)Jr|>DOQDCBjAKP^Lqv%5I2%M&R*48e$b#Vd-)W@@B3N zRoj|vPQ1ozoX6D|y{F1?%_%p@Ods@M=8*XPD2kGW-NQb=KUD6W&#X-M^y&7UHv$H_ zl+R}(^_>I|SX36oGku=ast5u6`5Lkg$@!__r!JPIIG> zxDl(Ga}ZV4Gq{jE%hFkJEzF~5Kf0vP7Ch+Btf#~q1@J(o)%PIWXu9G1`|{N>-j$L-J|%q5a9@&7($7E>-85GGv~e#c%2YVV@TGF5@5QY* zEbo$nOLVk4i&$F6Dd>NX-!PK_Pa!tuTwb&tKc59q&$ZcftYKS?P79^Zey z{>)P4mE2A_bl|7m0mGk$=*2(8e}acuZ% zUo^1)tDWl(YpQAX0RfRFC?XJ0x}ah~3{8p@A<|T&Mnq{6;LxOqND+`Gy(xrl2)$_t zMJWQ(Bp?Yjp(7wAARry&20vfqz0bYh-}ipc``4M-GG}*oclPX@-;R(fKRX+_py*Bf zs&Smr(`%z2pQe-(v#PXV9&_?hVwbrA*P)ZfgdR%GI)EPZ`ubIKouFXzCs4)|a_W zCwD8;YIJ7FAXb7REp3Cev8W5HMt`a{GMS@PxJ-QYDo^PO>KPm{_Ju3{)lVYz%>=B; zeXNAb$;T+sPlZE87m5-=w-h|LHm$1*6EACW;31iPy;~EXR=TC-lBj)bEsr*lNS|jv zmDoDACSpXwJgZ9?+s>e^w) z$I1XYAxgt~fjcxjMLUJLhKiX6rr$)SN=g0+G;%s`t0E z-$uJuE~6CT>Sk*KAXbN(X}V;q6Yp6;bR0y!smMkzI?$(vr_J6^pUs(qgtO%_qBaCv zAC*tEWuRq{AwJ%8SrWv0m6UjSLIcJ%Lmm#)yjklj3@d^iL}#-`VqeY_W$KP0r{gWU z$wl0rkR^M#x>_~Ho&!W6h`k|pEwR6X0&III(#k)($Tr|_f@`}g=fzM3gEZum@UPkO z*F+)ne~}00%%MNi=Pyz$dLQ8PSB?K(8FQ4HdV~rJcJM_qN?ym&B=Nw{p>`BE6_;OR znPgXg@#OVP|5>*!tZcjjED)dXq0?O!8;P_RsjOcoaOF%{uqy zTS_y@dJ`HXXXlZ;w|9k?KXO=d4XeO(pTavR=Y|lK<`rZI{uRwM!sZew-(w*Ir5dka z*1I)U9(}bx6+4j{hT?7TPJlp(t@Ns_0VRx6-H(i~mIC!}Hfz|xa(6SOO{F1#aR z#IGG4I6b4YI`nmibmL7KZ^Ld3xp{M5or{xiQZP>vOgz^rXHggz@rDiOWtSe`*~QNp zW*k6-q^rrMQL@Kp`8FzlS_HDd)#>RH=^_&NB3nQ-dRmYvI)fUUHJ{MOS+0|EuohYX zhd65z|JJp!%-7}4N6>RipZwU3P#aA|ALfVA=>A86R%*$_Q52TDUGDrjD>(RR)5Qg( z!xnmQu@Xa-8g4lnywoQZgmO&5HIBI7cWzS(`mRQp)44?L>dazI7%H#l@G1L=CM}B0 zcq*uq&-h)ZI3EOY@&$O+f8d=_tcRQ~^X*_dnrbx`GspET|CJrx3)(Owsg5!&+cHUi`}1GOO!hM^LT(d zsFmpoU_U^W0N+X~bC`mIBdjDJrBsv8K%}QJA6-tBA5UWTjzW^CY7MsxxfL3jE&_4X z_o6V}w~ObK2?0+Y9xg21c-0~IA`)#3`fkD@d&q%&gNXG9+P%nirAyB#+~x$My3P^y zClA$5-?R3TKEzum1bjyj-)9swnJiXU#QfP;&OO^s@T}Z4{aO3=Ok84T5 z#M_Djw@snWt@fBZ+k%Gy`+{48_DFjwMSm5XD^n6derJ{Rb*}N_U`1aT{*4-OG zSt-YJSwHPDKbfybSeT$NZZ!mdqOWvyum%v!2lg9g9-e5XoIUqeavM^$bc99BaQoru zWl#C@X+Oz7Bztray5@9V^xHVfz9*fFOoZ1q}P zgB`{2U8I7Z=zMzp%=gvE_^{%o8D@G#{~IXG=Hi+-L2TYP^1d1|dUd@DU2=rvNWLkt zK_@J({W2WBpqF^UYIBgCj^$Va;ZAJ=BP#qt$3<4}Qp9_3a~Gta09pwCt{z{uIj+v> zwQ*^f>pCrzDDpiS?}`iR=XGfG9?6)+V~`O*x)$){Bbezy${Q~grD(VNjP*@p!|fA1 z%4!0@83pWQth+Y2Dmn-I9q;Kpd}B1&0o&7gcd}h@M1++)hM7+w8pCOFMbdwB=vl5q zfBET&bPYgy-EbZte9#M9TJ*MRvW>QXqr}GXo47bUI~BW^JcRc0h=LDXFxML9qtHiq1pv%gf$m2!g#uNa5LslmPnYB2 zYKojwPz19gj%LK8$$ql;IQb1~g!U>^YEYNEHd2$87cN6-%{>hM`u60nTE@;lt1k>c z$KO}mtEG2{i8S603Y3l9dpA~Y>?JKXrC8M-rvVIYSY4`}dH(CwF73KmcmE|XFG1qR zx1Hm6$Q4NbC!MK^Nt^xshC5^IYAXr^f97b+n-PRp7v3uR98&QI1C(f?&_5DW=;pbX z2a&0-%B9X{dLGwe057k0bNiL}J|Lh=<&0ZzL8`D94*RPIbNuLG%?$!3+2++P(UFGv zv0tqSUML-0e&n;FnuU4I`%sN@k|7u*;%8wX)<#1sT@7dSr%gtZXlpYE z8Q8>nYm}xF7DPZ>9VpQp*<&>0o}=$C0F#S56J(L_Et)jTvcStpTqYvaT?=9WG=bp1 z{+O(4nRgp9ZeD}LMiZ-(CvbzZr7c}3Q#!@%GI$t*0`B8_e0593JRlJx6^o3>O(dX(I;sV2yBigyJ|;9lwO}=WMUGcFc1F5F<(c~ zc}Se$!f{3j!-vyh*PZF1h=Mbplbd3>V=+%_D6;XJ zD$xVg4x&Pm28?%C%d*Ilae^6VoewFCGeUZ6d~Ci3w|bukJ{PW#G))buI~fIlVUSCH ziO+&WmZrP9a$O3!i&tbIhviG5cXh4k_yI$7+ll7O6rG~xi>j@mgQJ=f>_y{jYc?@C zqzi4wJ3-s150AUP;AvKpg6NnB6>yXBt(BKd-O{HzsHE|FmQ_w0;<#S|MmbiWQg?Bo&qx~-ipSj+amoKSpM|eQfXPRmf$!$07jB0Ms zVb6D;nrM0L+vHSj%n7_~|2QsPuPja-QK}j%QKL!NKu|vzUHqpUNtK}hKt7Z-DI{7SwdNQSQ zNQJ<)JKx3jnFTnpWGC!8)ydjFm6g}87{>+Ewu`|u5m;mU`HUKM;VxR{v!xWxN545*_|V$h#WGO%(e(iiC|G70 zRqBkDoAm0Q-CordT@ja9h&CzrLu(#3xODBZ1{lTQ8NgBR&wK0v;gbF9u2>NnfZ}z| zCWiL>+_BCtI+By`l+heDDun!y-TLj!7=08F!E{Osm3DqdtS$_W80N_htvoDQenoO_L}y)KHq?+hW8M#nv4$FTT%#-LQtdqKF_R4F;8rai^tOcWYx6)~($ zEMHxh0_Zo*mVy^9L*3~MpS-Y=r-;A5EU3b`7~TOxhN(M8E+(hgp^7xXBy4TBJ3&%b z{AEDHsoN`!Xv3C3!Hi_d5ziH;%I<-kRi9O~BHEhbHIZi~a9uMR!~Bs)2X^()u+$KH zAL|ApuAK!qKg37ACS~6|_Fnl=xis*2eFCk*A0@n$ z@YCsed!(l*&0Y7|Y`7##C;qXXL{B#<&Ze9U& zw@nEeZ?>!aRwL!!qEpZKVyN6}sGn*55D9pg;m59gF$&FLZVguXZ0fOFD|B1sI=#j! z8+=^KL1O4a4`-nk@rx)P<^4VlecQrcdYuppcN_ZT zf}O$U*%LR{**xzCEzxCUsSy~&N=1F)#%hUgx*(lBSU6EI74XhldaxGcda?*g>=VVu z2Qjhs`1@K&~kJlbeLg3&t zd}YV-1`^~GAbB+!DQV~uk*OEl-AP&-#aI`Sp%6%j!Vh*R>{0^3a_3RR90!Y`1gcjbtS ztEVwdnM`;+9zJz&w%AVYd45b9;G~URoqS~8` zWMyhPn$WP`>v`-o1|(+~E?m1L2^a{TT|O46g@+)Mm*tiRyUkY9k}+Px16Qk5xyi8~ zW2@ef#udv#Hd2Bx_y;X?oi}G2`KYN`grJCl4St0$r*I?ain7|YxqO8GRlZ!K>X*TB zx9QcI-rgOW;Q{I!mT1)ws~Z!+>+kj`rrRo!AEPyoxs6&P!R^wT*vgJTiK0kK4RCZo?8A?dVr`tJ0q*q+ z+{1Bjr5`?Aais%nQjn?6*t0QaHI+|mCB%u-JU}p`Q>beaM)}1(>hiY@klyuf7JFlu zycDK~ZhPtJ84oo>3pULbZYQp)=Fu>?stYPIbXx`(7g8DyibIJv$)0HSPBxjOJFqQI>Kv2P}wW?-= z9hnBFe{T$y4=AYk8%z}cR8gwpMN_M4e`?e%7@18 zIh*n_#axwVF>W5YV5ohZPW0^R*G^k5`P(huG$_kn8LfXT|&^o9*g8%+LlhJB|= z`0e=gN!s_pMgH-0I{oo~a_o}|TKm4z=0AQ_sXrd9GyjS)M23RQ@$Qpc{J+WM!OG&O zQvsAb1EDr04!m4}8~yU**B$k*CrTGsoqNKD)o-xs!do(elr2l~lSAa^s-`SZ!vIni zavMZrvF0G2x2U^XFntbC(D{lAc&|F5O{oM73bJm$h;@2WfTlK7bu&5yV(CAh6KHq^ z*ut44QTPOfyh4EWk66Q(#Ue;m5+G*H6^Wep7QIm7W8w_*Ee$B6_*G5Ibfe}6Q^E&Z z9UXxdTM&=$^n{5M5V#SU_8P;}bPb}CkTt(fZdrE8aQMswzjnK;f$O3*+yhe}y)gaR z1axa2e@Ct_e&n+_TnV{M!k^XF$cK=&Hq2%ncxFW-PhRPwfT4Mpf(kNgWSH3 zevRHi?tnJQc?YC<+M@i~2M%mb|9&6!Y1l`dX8*GY0nqdT&HaaM>pt864E6pt z^Jl62-NOEzJ1`mk{WALV-F@I|`af%1SC?^nNK{~^x`hr(=&2LHV45ynxqa14kIR&{BNO*jaGB-SdxTJOr7ih+7nft5f17a0=8BCHVLi;; z)&o!jFT`zoYpG>2t`P>vseP3>=C(yFk&y7hDqfOCLl+qL0vT3yQQq5`e`aZ8%;tT` o+27~V{~ihDKs1&AEz3uK`t(Ma4PmNoFX}H;MN7F*@qzDu0b;#D_y7O^ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png index 5a83dc1f0d19b06b0311d74eec6efeba6f61cb17..caffe504bfca6c06815061d9a3ce343c0b9bb68d 100644 GIT binary patch delta 322861 zcmWKXg?{Y6lGyafP^We~5EPRuZ)bheUnh?ask;KBPwm3U!5cA{|d;5}PoFHBu z$0yzthXwkJx9xZFh1^|$i!K;aaV^nr*)pF+SKw^5Yv`6f_mi>wsS6GICUdpw+mApiy4%z)*d^A2S{N?(fNCCnBEnk1X+mkIW3DIOa7|w$*Ty2=7 zXq4qe(8>Yd6W8((lW!>`7%DmU$>tIqb3QM^bCj`^>#-0XSnmx=5o`$ilefVBj($ z6!bXoLRA3h-lQ0zYE>8+N0Z#tf@?~286-dhh&rszmDQ;%65U~ixyoN=rkoa72X=}QinL%*+eN&_ zIY-BnFF;UMY&baZ(s#@D9H^!YK?cUO2wLe}H9a2{Q6wd8zf-R_TzKbEeoWb zqe9ZPrf0o!_SQ@uEn1h;hr9Stx(7R>1nt z8KEp%QrYh{Dn_Ew{!c?4k_cK!#N(e(PPlXs-I8a$#n9b;Lhw^3OHiji*8D?8gzHa3 zLFq=j-K91kuA~X-{l_*KDSwp^zW~zmndf~2~ z-;iyY<$?h9I_e|Yv30tN=mKkPTT;nd^cSG|(GDscIT^oZ4%<-WF$wGA7CBF{{>^@w zhtJ>cZ(`{tYTF%m2{p4{dy{_YOIwM_*?+xY9pCkv7Zr85ikR!9-Mf-pNYZ#Nw{B=S zWqnbB?b@Z8`8n^K>WA(ICXRnXaCc4dB5!-`p<2z>lmq6ir{j6*`VQ|s=vmHTO#snE zgSYvpkkP`;3+fY;#OH==!I!jc9h7Sxj(~#7d$NdS)jX;(d?+NhxAUI8C5@m+j)4#T zoaOA*+iDT3CB~hqpRkgRQN^qZ#)$PiQEBV7A(^q8bF ze<+~4Ldy*E{s`X16kVWN@&P4WFUX#6WT8K0{cD<>p5^(Y9i3C=0am&wHEUfabOK3+ zvBv0{m3fM_LT%v+vbFveC5Dq&4~-uT35=Heir5omvnaRzax1RI7)*q0Hd*t|v8FVy zC4QFO`MnRo=icCgLg3=}>^+03*LnhrTSt0g15~zi`nn0_M{znw&?kwD)9`bLo z|JVo!%!a|g9|8(|WBh3lEP{@F%j~G{Dbwd}v(VYh`Jal#AL#{LiL3knYOf_}ew#|P z^C@Ku?4Ndm0o8q?xblpV*OPiv?(bDY$ySoun8bfsfA6c9K=A4>2Q6)(6dX8DP@Vh~ zmsH)l&~?3+sP1){7p-$efyMmIH@mMSmR5p8AFdn-e+>^YC>qZ60!#Koy_w#9z22dI z&Q0C*F3VX64g?#_ckd@tZWy$vwRCMiSLOcOh9r_w+ba2P{NQvwH#w*DeWR>Ebr2$N zL7?SLOs}$sl4HL(3|*hMKra>;;|iUcP>NkOLz8`te+CI?rhFDG5zyc{*g_0KL0a7_ z_VK}6fupSKft9cZhytx~BMP~*aApl8g!o7>^?B46yqAr!Y57o(ON+7ktrq;?^I-Nz zlR){_Suo4|%ziXAW-K}Tg*?v$QX^lNcq>@E;_cIc7ISMs zUEP`hBiM9DI4E5XOhy)H>jv=beV|nK1*N9@hv=U7`<>_0I*Fx;J8l!)Oi)2q7qD-( z@?oGvo8b^5QHJV7=LtcWPqWz$@6OQt05a}QVhON|x?(G)AlGqnq&7M{mrchZZ60_i>3A6-2G&9K8klGUcvu%nM^K@1l2{(h`O5ABbn#uQLmhF?+v$rp_XV*aVW2v0mC%in1v;fiwv+WsX$3w<*STZOH63sK;FY8(V9LAx+Qycrbe$_Qj+5ksoWpTp9wLeSj3;ay9vuwSz zvHks5wiMDy?%B7a8N_nh&rg)!Nj_@M_liK4(x8AHeq86+5RZZv%b9k1fw zjgPL;im;c4l8h){4b55?1bPI{Mb5;50=u4>CCP<8d-aOj&6m;;K?j{h{glEvoNP+F zABM(DimLMs->+5)hBDVSqv+YEDREi&EYd#XKB|oxQ);E_Vd&T0Yuext8T+?Y$5U%v zOt(=_DVVQKM*O@m^<7nSNo&oFvTg1KegG=)pCfp+g->3!Akfz%;T_7`W?Q8lpoIMf(f6IOVpLa321`mXH3 zcdf>2@0&!w_J{WmZ;qqFC2+1|G|bDDRsP-K+F3Vn!?~AJAhb<>j&P!~?KBW++fX#0 zj{mg7o?tI6#lzGrGWCpaV*Q1K4dUr6r(_nJ=v`9k62-|202Cd$_*_Z1?8yQq#80tW z7hx6sT15AHkIkG#4=(HCRMDSt@e!-onMW{l1y1z+5Hfk+1|J(IG4SZL8XKcp`l|pe zm(OO%a{{FYxv+2Nbw0WU4g%;~6W6Lxrd3XLN>I^7Oe0VX1!aINv3oWHjgO$frwm-nifyV2+=OaPSB|`>5?#!>HW05jsfn9g(ixA1 zgdRAoda{gEfiNR9OiN!ovdDT^il3blPPePpZ-CkPvKp4y0lF?HRqOIS+7qC!g4R}* zEuuSOYL?FnX!z#`!UJvY$?eAeDt2ks9_vW4Kh1zTm}j=R)tN?Imbd0D2`K!<%!as) z4C3SK?IPGqjmjh~pHJHdX#cxC<(amhnaM>m&xU8WN=H1ulOKFKUF_GaX*$D8a{7X5 zzmfNd!lBFNzA{z&0Z)S~Q#5aALEkNzNTA6qvn=25aTT*ckSPR`fpz6g#D2KYF49{r2#6Zsn z%s-Fdzon5>`RA2TZE>m|K}$VoER22x(XylWl({n#G+>_lR>Lg8FKU)rs=S|+hg6gT zQZvLJ9i7v8qxm&eIgs??JtN@NwC>B zM546aGn!H|&%MtBo8+31&L1ffgoXczi}H0)GJ0RR`VVJhf?|NwS!R0qDW&A81Mzr~ z4gl-!CVgS7cCy0p$;Nx{ChJEQJw9rpE3_|77BvhzBcnALeo~6^VmAH}@qaTuPL!BAB55p=5xS|$2W}cTaM^I0`e3m zXk<|(pq{N5A0c=`lt|sDPHfR}A_%&TAV2jh%9wMlq)gp-~W%~lzHf`1U7pG;V zUkDJ%T4ijhXTU^1wAgR|A~G&ptaUX3d~54^D@GSO{aduXc9}hLOB<1zCvC6O7W8Uu zXqV=$SX3fzfv;GVRVvO)f`Wa9n`Lj^28jfbqkP#4)ku~r$t=X1 zoAc?%YL~pz#$F@3z+Anolt&A}v=g$wM|+!ux$?3n%j4$%B2VQAV^eqdx*;=+i(gN<}CysIs+J-ldQ) zVR0!!P$t+`bPxe;Twy~^2BS+9yYNp>krd+LungNZ&e185saoNa=n~oUmH_FXTIT&> zq7){fJq!yLF;VKf!;(`zcO`IVwvZ+A$5N{Eol#&5R!!G4sUHkNGiYn7me|{B-IXEl za<=}SKNn&pu;|w$rnLsMk-Y4>)`Dp68Bv*A=sYl?98p& zWbjKQmv4sl%RiC@iht6=aRP(T+Gus1)Jg3xjk)@Z03Aj$_ka7RsZ{c-cKy-6K`I5_1R6W&k0gCr1C~m+c~fOSj5bF zznt3%T@{8-Y16V5U=8zudb%wVQomK0jYCpb;B24>mT8V&J$IdC8vLu$>^3B7k)*%}$Ig-=1_gUr4<750svk#pmz1Ny^9d4W;;6c> zAp|mqyz4@!7^^Ks3z7H9-XVUo-yDaK!yW{Eh7hP|T~6Iu&->qC;V{;ZLAO-SU^$rjsZH|+<(hSlZ zfmbyB!gOh)bCuX@ix1>^3&Yv2T{5C7)Fv+!C%Ytb)zi|hW-U@b(Gt`s%jJlgGegs* z5YkA3cO3nKdABZuaEQa>L_tW6%Pkzv%|i{@ZBrBZDhVA8u6|ar7R`QdrUdS}VKcGb z@;(iXCv95#Env-Fx~k+=~9douPa)V;z)zp*;c1S7m^KZz{tD^|1}eF=wWE?m-2LAK^4o;S#fjylGF2^p(20 z-B0U3Vsnx{-|S&cXE zzb@Hp=TkXg-a?Wa4B`t0x~hS60LF-=8{Vef5MT{ zdlq=XpHH|OQ@JW`y-$M=q21jSCv_$%>C}|;oHp-FIIEdh>4Z^+j{i4b}NApMk5-3nKu2G?) z9&q@6q^=(sat{Miy#&xopoX(~c)xV~|5d~7aGZ1ZiYg4&xF&CcGtKn= zCzsPNnLZQ}M;-LqS-(@P5~+|DBr~?QMkip7G<70_7NF0vnifXvJ^g3{x2FE`ROovM zWx%P;Nh3j=&=JF)QgYH2BRD4Ex=vO+yf*$6NEiL2%c`fCB7Z`B&P-`f?q~Xu`v*JT zrJ)HjI{6lwsnpSLo`(6E%-hA8+nx#b53P~4nQCSY0@$Y_8jvFdLEw2{Vja#8=h)}F zh@YT*U%$!$f>%Emozhp~xG!g_^n59ZGpm(CNGud&p-t||^Xi@)0c{8UJRB2nWy&71 zAo=7$UwVSA5-mcqh;zBPt{##WD~tInzsE>MgyvOl4pn)A`uWHP)@7`L z9A=&rdv!HkwxZz<)VrPc;dd0o9D)^KQKK8C0HtJLuAK|&U0kOIX+XNSlAZ4C%UJiz zmuX`d89`m$*pF}ceS3{*Z+{BapyTXurbCtNp_20TvL^f1b2^dbg9~wPE9AJ8IHObY z>ZvMNVprk&VRTK&E<|;A|032N8aO5Rx@a;ZS=w38Zx@GlY>lKU_(s#Se+p@8^{6-oI>mnOa`U}!SX4@EVRC;sFyfGx@(Y%{s zaEqqA3BE!Ude47SFz*#xDClW|M&Wn@v;U?#aS6qdLR4n zB0#_31#*c#V4c2QToFz%!B-7O8F*EFgWj>`px}fv5p)SUgc-%>E+M0nE{ad(l|RhV z-e7%k4ld?wpiiV= z_4ggNe~oE>BaIN+=4BWWE#O!lLfgSdS00YhpO;Yhf*^=LdNcZtGT~4!C8Li+ER-j6 z<9XF_NG>X;IsjD0QHng^eyUk&79?><;^}0v5W3X$9JWEV{bFFqY_0>4M2~_$v^O{DS!$$+pJuWxw#j)Y#6v>hg8!M;|EfAA!wmjvZcz8u`|}O zNZ~t5F7s6@k?-)-Skm2RaBJ%8L66OZ_Pg#)UHkR51l6pMV!Qeqj;r36LYZE=y%WTf!G^F27`BgOY zs2j{W;X6;##*QM?Y1gEc^^=IIy?`H`6H-kO(Nk=5u!V=Af)zM~QxhiO0s0NlIu7!I=@U9JWDp)Oj1OU~^f1Mtl3o481vXcbK z*{9Ccf=KJ^wEz9XLim*t{gBQGTZVr_ge`G03hj+KOGGS@{qqix(Dq8pQbJymgYfG1 z(l%<_9p-Lb4|@G41~Qhg`17Ru`tFVwb+sYCKHPkB&Ouf01a<4sU}Z?uPR;MVJg%-L zEoU!Pq`~*@iG(J9GQeJQHhIy|Ei~`T>(h4PfL;9^0 zp*0zlc6Cs(2gA9$>kNBCgj(4gz+OZSWn%aU0u>0)V_Fb&em+Hcz7bQ7X*|fB?mqb9 z1e|lQZ#tc`vk1p24~ZM`Zn4!PLtVpODAiYt0C0~VI&t^od?T&o z9X4utlkAsiO!6#TY+oM-N~j=xBasYjTIrh9bUrnd?HFA@G{hIwnK&~xihvx8m=q1m zn3Ke=s%%(KC{nuO_$24M)qw&R_==lA7JTWDD{8T$BrTw|5clT+IJb&I3+VQpA{>^F zrzQ&hxU48DQ^B1ANsF3Ofc{iwEK_hH8vi*dzoAD8XG8|n4Pa)k;&w-am%>5D3P*>@P-K|rj4+gw+?8u}EP+qS`Ot39DUkF-u?I$-s$ z&vS)ZoZW)wPD=hLlEz;yV8~Fx4T3Hubk$7ZG57MrSd9 zd&u10%`+|I)?10Al}EnE>LX3Zzb$p@i7!ZZF;CaIevyFM6NKQD&eH$8ml9h21z2qFwP=eIVm<{rsp4%|m4w zA+b}43a0MRT~<#iA$-K?zL)}m63k_;{@5$!I`L<)6&cf=;1?S~SPp6(kXrHeapih}{f!?tr>+__BLiE0dk$XhaxO-?awHq2QSI$L$!GkdO zUu8-Fsyq8{?pVvJn-Sg3;G`f~)_(Qrg>r7D$+QG7>8wej1E1*Lj4=L*7<;?AdorF` zF5{p1N43}62w0f1J}S$0uGUHEaYK+ElP!^EQI6zef#IabX``Wr^_Lyi+OQu9I#zS@ z$+>oQL<*YUPxAEhyz%}jWUO({VzbVA#4i;hHQ7Qrj%dxbgHRRD=Az$CFXGj|O^n1+xf5NC4 z^|@i7=MXlHm=^X)1W7k+uQ>=538oOK^ki=c+A7yj7hKUxKmQ?Nz&)t^vi%!E`_|a5 z;<-@wHIjn7!#T2(sTBCu68QNo_uT)uz!Akdb|Li!)-1sDdx26?{Sq)7S-$M=WiJCZ8_Nb_!0HS3GO48iUSM_lXs)(h zA_N01&@!ZGwO%vV?hCQ?(e!l-7tKe#hMb;bPo*3Q;|X%;yq!zBDrKc8oO?I-(LMKn zY#} zkD&#N_`7U*Y3je6!_~)bW(c%e&RBKoue1sUoqw=n3r~sc{G>%qpAIixsS=b*Pk~+l zy}$zyE}Grr5u&Zw0ErAE<_-3`R`{}Pt@~P z7=^GpWYsP%OWqKcd~dLrUIbf+aI#P}_<@(N?zhvmfbWDfA&@fVXXZXz?_SG0h~zIW zf=G*vIGL1{6_oAkhiY)(%9-y^_Mjm1AjSOpV}3We7JiQs04RfJ)bj{ov_&C%On${9 z=Cjgl#qr{+*3^+ej1_5eyT7mKnr4G+QHP35D*j+tDHQ_`u~}65D>q$w`KS8tvu1v4 zf8W;0*HlmUw{IaTsh2+}13ax5lAJX7?Updvn&w3WKI)It8ZA1?lNUQT}@`2Idit+feFVzB4_Br0Vr#Fo$A<)AI9{j zLn`jp?W38W5V+hJ#s(X~Ca4ru*C4l&nr~Gpw}SgnJF8!Xar_(pl_K)e#ftA1fQqkk zmIfKMOB4zf0lj4qa(iSjr`P7h%~(81H)frolm96(dyrtsW>4|@kV~oZt87~5W~Ws#o-xLgCwVyIh%8G}{LNb)&Bu#4o7-FR=fto88_LiZyjP$PHJ0ji#GlmV}NU@D|F zlx9#-orn=%>IZ)7>@SgPk=e;<>D(xJ&_>3FOsyvuyb}JU7FHuE&mN(7@6`&6y0Nuc zt39lIll+PBmen4;h$y@fTMS_$PkBSR?(;-zoWfIhvCbHs6Uab!cYvK7~ZC)lm}5{Xuz*Q$)FGGDEp=9B(e!svqdE# z)(Cy7o4Q%(=h)ROp6R=GV++;Ic6^ww5nd&%(iu`=hx4}Xu_m!_Fun$C5jI`BXt1K@ z4(aF^M+n-tTij~}PUuaN>`&?|NnYyz%L?*qWa1D$Q5|9okSgM04N&jGF zT3f)2IYJ3+WR?D6HgTYBMgo=AxKGU7K29tf8AIFlK}$*hzDLHGq!77%Tj)msG`M6A zQ90?x_wI&3rsoGkl0xr*q~>@2))P!27zoQT8e$0@gFbP%$9bBSAPX|e(=xn{8Y7fL zvoLAdnWE;C1+MkajN(tO$}$JB%>qIer|=s3ltGTqQwQo|!FmAYO;HnSLWOr}6B z1eJzu412gGXU9%>Dg}pw(aCz9I=p5Nl+q9TC2}+~uTT*b6W?~7v4J?PI2dhHuwnY< z`=1{@(N8l0*>^0*I(|wFD9lB`YGY+b0oWpU?PLrd=X7?Xq!l~OplSXS5(7q&X$oR^Lws)TWKd?jeVxA>}OFPq5dFvlJ~)nEK;0SxKevftPmFI=wknFcMe za&LdA1%^oV-%dfQj#R&h1NL1`8W>n!mj9vSaJ^2buY_=Y%c4hjbhz{nO|o=C@lbhB zSH7U(A5nK6KWhGE7jC{sxwd&P%(t|cs?ISES5dvu{Ipz3_Ee)&gW>qVfO2jqu`s|w zmGJut**u#FA|A}5#P%tKLu{Sm ze$N=M4Cs6O2#I==hu+m1-{SYH_eSq0A;I95#KwmCa(e2|b4cyD(Prc@+x3=7d?azM zR#{Y-f=NJSBOuA^Ca#7d!{g&f<9m9?Bh)AYi`260bw101GQGV*$5($rC}-4|y{4j` z&-9lv35AcSO)n}`S51f_Xx*0>7^ znBZFlWHRMGCA4F@u-IaRM!;vg zc=N^&{n-WI&Ft?+x89v1Ia;DwD0*k5 znic|)`7M;4U>pO+KQ8kN1eb+5&iu_;Yxlis@Gzc4oTg~KPo{(J7l5Vl(xtxCouxj} z0z%vE@);+1j!>MN;{mEIi__bgQZ(Wr>zg7*yC`-KNc1$!vyl0XUHLb1PY=kqtR+M& zNi?Gv$GL}=5z8vQX++*@^j|FFuz_zDiU(C^KHgspkojD8-1g3Qb|NG6y;B`xuNn6S z_e1Ue7VKns76hjzby}}bR;fp|?zne~Cid*4GJjDRF4stJTHhA#Wn#=j2j-OA`%3hbe%*5th1bt01ohEXXzS z!sZfr4MuS)i!pijAKKunsc1UXJ#q9C1J$s#a-Q*zhQE?iS?r!{&4_&O!bapewS5_~ z!gR#w)DbHCg_|K7F7E+3V3@9#2S1mo>X}aGG4UmQmNhmJ%_-`<@2xFO_|^7{vQxxz zxBbYdY44wmj;m`Ah#PB}t48R!eT@spJJgboz~&1#+r?vENbEeh(H2ytK;YD+T}!%D zs2N~0!O~IZ46!j_Sa9tz8fRtiaZ`N}DsS3r*?T6b*HagV`0H7lL<>5oC=x2j5N zHDE8{a39Z1aG*x5nd;<=EZ!g&?bhe>0$yiL`?`~?)v|S9!VMI&`U#3+t!w;>v~w!2 zM0#w1qUKCm?N9#H*V7|zVORMTS528{=J`;V%O9xETguDTJlXxC+K(L2Fh!Moi1O(Z z2=rPZk?R(D97mf7-E|{Lsg1MV|0|G7;Im!GZ-kz0S03F8U8=jR9OGpRv^d?qy!M1Z=a6xa4*+RCakv}waNt}^G6V|Pr&rYsA-rqK z@&Yvjb;NvhJm%;U7?^)<2atFdbSo{RCy1y1nM=RkOVKW~-Ou=?;-%BenPCHsV>y&Z z?v&9fZv9`tHoTneSp;W(_vHKs%Nk$m1-bENWEMFC4RW>(od3`ncBvaY;%*` z@e;BphrK00ATagz!{Gff*#;EQNc8`SW?CC5|J@Q__d-ykidglPy}Y~3fwYEUx`t&> zEw|z&NGv$VOyuWtY{U_&zNFFRqA#9rvzQ`*mVq+gtVM;YMF^wjFdLp!@B-4HNX97=AyuG;wE}5U!r{Hcz&Zey+Y)&B=sAi!_cZ1)?%hzJ*>v*UF zsvOyx51c_R+s%kx1i;}@-Yo*v2uK79vVhq;Hn3brvz^@{+*~Uwnq^m)>*c?Hx*Eg3 zOgR2_GLOpcu$CqypviWsIF*von!JYNWbl@(#k>L4Jmss$6UPaa46 zChCa;k74>$zYx{{c|0pZWpYC4JhFxD%MYM8rby~ ze;BHg-NM`>kl(#x!4SI@QR~X68m^AMR_u@3ai`D>h|d@TKu=Hzxz=^GZ6QIIm-(l| z(naSZAV6WJ#P7bX#o!UkbNeg{$K_c1U0@G=AyBmjFUG38-2zjyu6z@9Y8TEIEk=xc zKOMsV>H7#NtnplWENhJLOVp1>CO?hX|HIDv>jE@Yp7zwcKVd%I))ofTYh1-1`055k zLtpLXV<8_5Xw^h4B`!W$T1F1-@=fPDfeU;|2YxcSHf*Bq1l3(24T_`5K*#yQeAc&V z7vPx*iuEy#({DdDxHlb0U(X~W*<)MthbxJ=qllwFG$G2MSIM3b$^u}>pYmdtmkkr! z(6SUER1j^(xWck3u32VK)xa}-z-A~4DiI2!MKMxo+j)yE#)jJuA#NmZFhK&7SCq8V zk4uYqOLsRWs1VL|+UrAjse>DBRt(8V0Yp^g^+=00Y)`aiv{S_T9S+aD#~@jK-3%Ol zi`^IHVOqiC`fVx?f@?Jin-%#PnKmt|GS|YjKW+^f@b8v*$7HBM>3nby>Ii6)PTh!M%afqtH-0kN|s3_)ZRTXqg0~kayl4OK# zCleLQeebAzORB-@`wWd&KyV`9mA;SjVxMNLNv312`VE7}mx@}KNIkvcQPK)$NDNVS zc^D2`u#LqvHEu~MhDyO2D8K!fr&yCuzJSNglpfxz*VGzd9(d`@k4>|ngU0pfuX7;N znL4d{I`LjG0D_A9(d504s&s-ZND7QN)dAABTS$Ee9Gn;_Nh!f1~_q8`k+Qpb~X5{$nu_D;$o_;r4xq zIrO%e;i~BrJE`AFiMr2=R!Bs+MTFDV6`* z>3^XPfAXm<9z9NSu#HTy*lpAl>QnP@5no_L$2Vh&j38ezsK1P-k7o@7bzDX|7RRP( zy#5ZR&nAkXJE-iKf2*$&DdddLRDCLvKQleGy#H${^-0BlOk1SF1y3PW+ZB(qw$M}= zcVMSQET)sy5*7rpfWk}k>*1Ce8yl;(D1*q@W8ebdiA5NLb)PzPO3{l}NI|^Yvac{q zz&3TwbPNZf^a)S%cB&cs1DBP`{*)Y9{XV;-e7+3ykKq$bmi1I^i7OUj*adlm%lmM8 z`fzZIndtDYdH{ec>+8oUf&Y~yWG(4lhz^^+^NqpFMy@F0NJJL_htZ0aLsc;gwww}c zUvy;jGwYZ>#S46vL+v71lt<+sdk~PV@#cBS>pH@p$QPVN4_AG!c>)FTuH05*uS|gp zzFjbA*BR#;vI?;&`@iEjsJ{7@n0GJC6{+=HEc<%m#xm!Gv=8n$QsU4Pe4MhYw7;B| zkEY)t<0-kIRbv&$iH@E6e7F;R@|a;>V2=I>dHVzm!WuIxqP7gL9Yo=zLTKl?H6jU5 z3$$Gzov@j@7AkB&EUcpt=qQLmHO@)4{e*gOZjow06HcGgthi=?uwwbx)0px*GW1~$mHgY2Wd;ZQ__y1<4@DVAHEKG?GF7} zaMI9`C7O*02m8S7Er{W=(itr4s082C04%&Y8nli_s-bb6rec0SVyHS5LP9(Ji$}VC zh&sa%?Skdd;De|a-ACFcqp?D@;)kNPX#Y75FL&TrXC#n+ z??s4Kn7~__g%Fl_VNz|`8|xSl>TeAr?d_C&3*aXvv=U-QdLhCmrM0CG{rk)zck;Uj z__GV-%>GU6)dEK3^RIV;%GTpwqrXHD^jyJ~TE`jzZem-NujW5^Rw#oE(~r&TDhF2^ zshtlJgR+@14F#9ETq^QxR#*uLZ0C%X^t(!uz!hVD#>36H#{TuC9i`Vy=^{butocE5 zsz09yUzfK`@PK5^Q6q!zp$XjR?bYhbM^)OQiNj*(+Y^OSS)NGRCswg8E;6k}G0o>s z;^+sz_0@0?v>+!vCXR_1KyEn8>*=^_$p2lJ1zS(~N-dZ8duD^DK@mSWJ^f1T{8O$M z{k?k*EsYr;`wVQ_X=d~e5qYxkiO%ybncgqg?m0}7-|h+9?go=(p*PPlCK@OMJx>E%AgK>tA6+|NP~_$JpcW`f=B^s*|53Afa#K#|YdG$yUjkt{KjJFZwg zaN@^uHoL_Xq3gMZ?Ew-o+X7FG@;*i;w3qnel?VzQcKWH}B)?EL3_EHla8IWBOGZ4o z%_w&I=a9fr_>Y>UB+Y-J#LW7#iMcNZ8g2Ub#Oev`D|O6)P?2|uruwd~p5Y-|oVKzjv4U?RigICJL!squCDTvqFBXW#oZIHwH8Sys? z9)<)dc6`*y=1E9V-40}ZgK&m6iYER%IFGb3uH6qID}3toG4>kx*nZYD zO$l%14&ntR^gUCljlO~_pFM4z4aI6vGp!>Qbe`u;$C1ofdE{$N8lymfuw3ECOY+75 zKLQrGV=jZ~*c&46hyqLgWhU*OfCP$7V zwm+8+lV8{C+75L|y$X1sF#Qy*<^h@T_QvDAomzhJF0><{5-t_?={qztlPABztKla& z5Q6T}o~gu?qEk@y!8W9;^>8V+JP7q@nJw55eI>{U_JI6sc$^=Ddy_<(&a!d+AM{<@h>ebzY}S_I;L=$M{xMn!1CtJE3#rqL<{%j zHy2A@yRRa0R}oX!b>8L5O-KuXeaR`Dr|-i((yTu<5uyPC3S~8w6?fguhFwJL~RR!M{OzFR&(YB$LN=2~@a5 zIK+0WuOArrHfOm&z8Ba1NFipaFB0bvAw(XaMq|uB9puB#Nv>Ug-$ZM5^%Ruf$w286 zBW+J|ZMIu|r3@^~OA{4%HYiZ1c@X?H!QfjVSF|)R};sHdZ^s$fU z|0X_HHFWs%coINp(O%45DwvpK5Q`u!gZ;~_U!XN5zIkt16}$aLy|snIzax!+O&MMT zrKN~GssdH3^Yu^68qTsx7`Yl-G}JmlfBu8iSA2ivLRUzH#f|}OZwWila2N3+|2X*D zbzJfN>U{onqW8(mII}k+Kz+4SEZ)?_wFf0>`akAIPa!ObSML@P%4KhUBwgy=jB9G^ z312Jxme$B6@(wx{mV1Wz^Rj*Bp!#nOXJwTvw)5)YPo^D8iP>I;hjal9N)Bp`U0=Zp zf$d=SRNU855{45^YQ@@>clU1>bf|6Du113@V}=47;15?8k0BxpSNH!v$>LLB zBV)l_$;%}dlaOhIbJY6Q)Nj-x>_?!3u%IR++6hwLVN7V1bLO)K#Vg<9*+b37M_~W| z${Zz7n%j>sq6HIcczD-mnu{_aAZRJCKzqFg6B)%1h3#jnjZq5>J$2(H-VcTzB^UHY z6!xQV)~OK4;nX~I!DoH1?BWm2={XbmM{7wDXXOrtdVLeA17#$5rE0{1Z09vqy;V!Q zHQY~g;J(#*l3ERVF4$NoE^3wSb0NKFS#?&K%{p`V^;Q{;bcwDE3PSYPZgh}wzSYa$ zobyU1yGP_CwQoOK!lVmw6FQBwF6yqaST9j#KP zBnvuCdxsu(6Ay%QP+c0&nwoc<3v;CNdfmb+q_!4m8u^blCt@kI1Bu+N7K%G%zjTLK z0ji6r-*d3X#|EQ}PqVrpt%!htg{&2k6)c*!72c;U_&M^_PV+C81;T0|wMJWXNq-_K z_N*IWC9k25`u13}x=s*w2@NZ3z|H`IurI~hNLfVGrGGq8Pdc3&XuTZp!(O>V_@5-= za;l>31l>WOR%Ybi+k^AsiTshNs5S0H(N(={jh^1YK6^B zck7%x^$~Tn{x=6udwRtroo+BgTu;}GyegQZw}upj8wokElyoS>16fI7p029d|1oqP zjBK@00RCuon6-Bmt=eiuwf5edB4(`+*WOBOwP&@2+MCo!Vvo|=Y72?IM^S1kKEL6; z?|IKX=XuVFgAUqUz_Owz2K;nQu?W1^(*;(;9HhE(t@KFL7$}J>5=wd(9QEJjuyeCo zq`Ufm_-ZB}lF*-=ml6FuJ3GEpUtUAmjL}X1Ib@gI&i6E;)i_-OY&cV(KRiH#2a-zr zxrK)I_jet2}40&^<;do$U|FEmBD7E!l&>T`Wgp(1tZ7#jK(6f-fzd zy9@GX%XJz~4*F<|SN?-OU4|!57kv+Q)+vtbsBSNO3&)AbY=q()7k`9LLp~%@uo?6!ilTFv=|#|_-4dKkPK3@k6dLDN552l@t8}J6 z;DgO~I=kzgjpy87JOz7aLW#UYW-bY~Zw%AZj5nqrtGF&2PpyAPn(Cjq&sFtw_j`=H zQzXCb^?h$k{#K!;;iC1p8 z&G4xb9{|xa3-Kyghr*}dkBi?_)E7@AR^B)^NOW<9j*cyml#rJiOU7Gt?6 zKrx!l$kT{6O#s=YjrM5w+9XJbWJR_VZ@T(vUj7H~^u{Bs(X}xfVWXYK*6WEXl-y`m z5`MHQ-SE2KJuUr>bVj0}W*H6Jd+}{L@$a=6wMDY&CmlX&q(qX=z!tM!HkKCS1K!(8 zXnu12+!Oe_{1X)1_fjr<7b^okzy@2$f(LCN;HA@F!9sV%NwX)>dD33Cv{86TF$_FsxWkj>1r!wKYgb8nAtcgmJb$Xs_TN^%emre z0&G5cW79r7O*0Z@xNFX6UrVDI+hdK^G}KM^c2r!Y<*&XIbJ%eeqnvt}4dMG`;Dm4w zt8aVw82jo*5DD}y_sie=0;ODPr84&gn&Y0;$fCm?GC6}Deh=0<$@{Ojlch^E;3tVW zF1-=`g5L`e409BogQ3>|lK<3yiWO1) z>80)s!M5LA?nb)Iw@t0La~|ufkhow+zGZ z&kyo(shjy#sK~stM;Oa&ye>0|&HB9A1fmX3JhmO$A>D{#@BN6G{MQw#Js{4mJI3f( zgiW+ySJ8-PppSa3Dqqh3gC24Zy1!()f!*iDQ!;?Vl4p%tfmEocoOY`ETBLyT1VMT7 zg!0Pl2j-t9p%V0Nmb)d@7QeBbPc&9_3I;9IUyI|eV?PhW-Yo10-=WxEIcpoora!>3@4kQ*G!QRy_iIw>gHB z1U+`GUS<5M`2pnoB+8I9@{4KqGWMLg-7lmiChI@YLe_%;38C3$lbf$uZJBL3zbIrC ztB2^if1nI=PTIna=)H{v;$^TjyJ%#E?z#tT<(X%36%%G_b69}h-oOm}CKR69lJjQk z@p-t%GNpa<@JA0VT#Lu^HX;6EI_3%x>vJvHsEs zn_C0XDH{lY0M{8*q;DX^0He3|N>79GJ0CuvA5k@m-mh_nB1meerAa$huo8dbC1AHO z+t%t{tvmlnhh)47bI#5E7)Rm0|9iKSJSt%>vOvr#d)iuw--jB=F{SuLXSDa5{^c^G zH$(|Xi1Dk|4MSh$u4A8Pf(n7Gg@!&eT;75@*QFbv9;%1oz|rVFZ&H4Zj0q4i>hxLG z!co83z#8#e#EEL|#J(*arIEFP$%^Hba7~7L$o9i-9^d@{=qq3{4p5=Z#nn+030x1$ zHa*du{Fr}l$lqnhilf7y#y2JQI|icfI^AZ(S#lK1Gl+*wI)w}FIozE_+RY&Oy(A{! zJ(%b*22Em?HZTj}IT#c~&hsdWfzi~+?;tYL?G~;z3KB!g`dXb5njM(j#Pre8>m6)r zqv_A#LEZYoMuG}|-e@>fYGp!)&l|XJ*&{mBbBc{k3MpR&_Fu}7=8e5{_he`zo#zgD zO`Zd_Auj)w;=MXJHa|DIZu&k?XxJy+$t-BaFkN{;?lCsF^(^PUYMH-4O?f22HZP!C zE5fGb++yRtsHrKYL=Dp=;4>2*DS-ZcVtbFHMzCcDt-1OZAQu_;Mvx$K_ON}{{twkc zt$AYoay#!~n`vk6H$^y;L;DQUT4!MzzfqwkH7JTVfl!Q*G&@GA7Hs_~e=~UWzEa(b zcM5xQwkxhW%JN@&%k$sqR$P_!?I-&{gl7hdN>oNS{>ab)Z(!x~~LVe<)K%x{q`>kr`UAO{~GSpdDEmT~~D8PdpEH8E~v3(8kpB1z#1O zOF%qPM~bB@wI7=!3-@Dts)Fu{H#4g+c7ZUX{n34|c?s7gquN%@nJ zvJ3n10V(YQEDQ=AYXY5O)i$uipcmck^nlc!;35>d9M6ppKKylHfH4EBw9l7VG|wRO zStl}bI{2`OmSR)TA3@!!^51LAS4}GFETh>z+pYR^q3E59m2nkNp7y%;vj$-jCs{pX zmn&GN8cv$e4?>Qg@G)a$c@vGYs2!CI=|fCfPb*=ew81J-ri>IA^dpQtwWIU{q_~EV z>T1ypI&SfE^ig|c-7%3~9u4YtM(;C0`L=y%)A{Y6r!!)nuNY&pdQD3B{@eTM4TqKf zmJf4M@#GFZY~w979pemBELq0>t8GN*v0{3z$0g`TCf_hvybhQu%FnM1iF0LMDwD&S zY;(i1#{=q}POC-Ph5~F^N!P<%(!IXIyr;hqKll82E3WTR2cOC+Ca#DmF?39NZ6o=gw&zgYV#TZsA6~kv-Tc znG(kx74#NC5>w2BAZai6$lY*YaL@9HG={b8JQBr|_f=~Gb3E1lKD_+BC+Yh(cimJ< z$^>(YS5&4|m*SepEKso~4b1;(i zN0!-X(`N7p{g1EW^qsVb9hu(wp%KSTH*uh^`I0ePJ-X~?~~)ZzPUc15(8qGvIUe8bxdi!d0Gl!m-zIJ@afT*`D^e= zuL@=EocGc#>4Qv18mi+wx#G%bQlx(>@v#KAow5^^II|$h?P=pWk55o>%3a8QjeD2M+cIOKK}kBhrn2!IMmc z&;(49rEV57iW<=iwW#k1l93H7%?hy#M(90=_$!xh%h>b=AE4o#b#5>j?`r&0cl}AE zXXL;Wtcb_N%10>CD`6dTPkxh_r~s93O&rxAO_jg@H7q2_3irv9ugM2T4b&evPZcoA zbyho23y)3vK7OU>h zuXpm0UcFap>5B5`2C9U3#T`>p*|#9}eBrw}$%#r85o{@&zA$#*ab3dt#CVXu;(?-} zLye=}+vnn16{Okz{>xZX{jv!MluMNIXEL z-00|FU^wa$CbQxck4_YGHrL;J((DQTD07#xurO)K9c=oH6v}nl zjINYdG~Ugax*W)Z{^jvB&utBV=Fa&(Zh>8&RCoOCRV1%@#fs-90gG6fTJIAwV(V9G z21aG$R-b8ZdN-3jMmVak(0+-tar`Q`&-7~65ql2X`@cp^RpsEWMq0AJ|1rS~&)P^;^Q0T>E~YO?6>FO(hDnWj0d$h4=^f5Sxie*tGVSQ zs&&t=&uX9(5&lV{iVC>4(UQ+F^g2X75BLP!2&Ys#7yH6Lf_jw>_bs6M_0EBrxp-*C6rUzSm-E}0!R>Y~uOA{UT$pwG0F+Ks4uvx}7?KG8HrYxy z6W_wV&vDJu#S?URB$Qe|uH)XgA|TgCO6||O-fl#^b;Rt4?lE1~OM!iSS4WUX;J!9R zFjECftGt_BI6NkZDLMO?)QC1jQ#;n}rP>8{{6rC;+o0h!B?|Wt!+w=cDX%a;i_t&; z9_F-)^K%ngXboFdkkDcfg;$XkrG@wMff?9-^it7&X%>6h+M**|=>A%P<0cR32AC6z zMXCHAwEf-msMnE65T-e2q0!MYn`hTmm(UEFIn^C2Z*k?uOfz)M_ogjhtKWAnPyNv6(Bg9uFDhgM3OlZffFMGawa7RfBA+K`} zrxD*#1V~9fk+f&oJnSSjT-8x%atvrH*e(WkzvL6uk0l0l!idMR@Hf_Zw(1tsTvdH& zVrE~jCkE8W!26gg{A`>cUMefFuCrIT(`bB?U1GO9T4+dDuy{@1rF`J^S21%^<;1Zj ztD)m92{LHIMB$@KiA&cdY?y;SzSsjZT=dQ7D}1b9-1$Hu-oKJKv8k}%ot>G1kw={{ zG;5Byg4tD{|AyT}n%ogGnlYc}-BJDMoFdi30P}5br#B7?9`aG)f>`gzKP`n+m@rzgcG)jdqw zA<+f$@9pjEEE#HvAlA;7KI<8??cT6vmfl>RA`9PSiF8P7P5nj&WO(N2kCZo2yyWQ`Nz)I9ge>^Xf2IU=PdRxyKvGfUebFSezocP0(%IS#gEZdi zU1K|DyToF+%4)kF(ZNQfgdN7dP47nFO{69cS!s@w3Yal!MqAxQo@p~iXW==u7w`vN zbc#wbq)5T*2a{AFAiCWRcrkZld)5x9wT=AdRZioNP0rH*avONvrMW`4R8FDRV}@LDKq^ zM|BaT8WTu;9TKGCW2B}s&K7t42qcj2)AF>2nVVuib-|#G!tVa;lL$>5Z!YUzRC4I4 zvZFC^`S8#9?qJttWAI7cqX&cBiwus~*>*=Fr_UV~=5eUsv9LF6%IrZg^aqxyUEv8T z$FuX6{=$akf(I=ZYRASSW8z7vRs^C%-v4R~X^KQ!ht1)iI_*|7T0m(e7^6JCHFlNlvYnRpU0zY91jh~GRw>{O5FDNju~Rz=|PPR@?qJZetp`R57IPlI9Rl7gb|MV z1dXR?xJ&FOU2#43`t#yhrUkpD>hoGQB?=;43*zp6UD%p%QGCYi>9AEHmC1gyXwR2s zy*+OH1o^Pi zgR*=PYSWqt*`G+|%<7;6mW2+vQO?app?|&wNew;_^38x&wx1I?4VQ{<{LJ_d{M`Ia znvOC~tPsXW4pan&5$lezQtPdIyVj70f>s`WH;6*7{`E{m|Kn#r^2vlC`F@eoOtS}|QAwjHoLvlIjj{Mix*IYZ&KK)0hpA6Hy|2$PB-aMjFI86?2XmMZY9vJN} zJ+^0x0Wl?|bSBKCk#G6lX;x9h=(zC+p9G2hTykE~hofeIj*M8fDjC&>hA#6)E zHnv5~i(eeWB&%sErZn-ulV^{$ZpsAGx?aP`jxs17gg|kACFEWKfgk9Fvr_h1vo3?e zhSwHS!{kHJ*93q7xe`uGjvo7!euIu*oXK_W`$Q5^Ec5AG#By7RD~@{gO!=9D|ne=Jhgf5Rh=n~)PZ$zVi!wi*jVMf$Qa?De3H@9%dAI-(#guTGGp5nc4ZYs7 z-!LZ277ntu-nmkHAw?Oi|KTyLeSu#6s>6nXbST4)F=p08{oE*gpJXTxO8A0LkRp+L`aj2)4SkC+>u53_O zG39c9hDr9};^eD@t@JneiV6QAJ?#SZRRWK&W2GSI-2>jj*ffcUpU&3Z;ow3&-gbf2_z&tkM`_INR_2kbP|f5Aop|ob;4zli3rZA`JK!m11 z^~>|~7&G`4HDWk%(+OjrSF2@MVcZ05F>g0`w=vwRE`LzB2U|W_$4vPfIN#Ju!bf#I z_)CA@6<)bdG(7+XTjiV@n)mo8QL4Dyh@ddN2D$_!C``Df;ZV-j;6G#n}+u;hR|Zg^Vs_ms9EfkxJTz*6Z# zyLkkbIsG~I^AvMTd0O+6-(R3*Bk_&sRRxq(L8e@KoINh8em6j=oqO08`rzf_OR6}B zoeMloAFq1h$0fL*D3f80S62I2!aQ;Y<5OsPma`xUYzoQriB3g{adKt3S)mBOQTJMi zM-5JxuSk6x>L0i`Ve^BZEq{+o9;Z%()ey5uSV=N5-g|HMu&%kacd1eH?eqD)2y`Ra z+2*#xu^i5Zkm9GFgWpB!DnRJ8mP3H(Mtot5zwuR%0r!rSYvACF)xt-`i=U zPs^v=H92KX&rGR&{(MI#gB&Wy6_8D)1=ptyLc?Xs27|e37u-SJ+-3FyCK*i=?WH@O zPov3<;tE_D{?Q#+YrZ3I-=^nu{X=p93Ot*+hFy2C+%n(d>$1!FZjpbg9A`uhryi)! z$1*F^DJga_Mn(~*Xhg;O$<{9^O(?g0#BiT%o5XLZIJ@eQ*+Hl(o9OzKrlR+sFa+iC zahqqo^-byi;`1zXN+2_SRYSX}4mc1{aV&v9>Y)?lC;?Az=P{|}rgp1quRp=Qg4R?g z!18Rr6N?|leRcFsJUt*lhH}n}sl6%TlNW8Rrtu_!7M`r1Z?D4s16Tt_dnS?-&{w@y zU^d23g2Ya;m)8X-$T@Y2*&OYfRKhR+`qDA)%MCao>MZnS+po(*h+re$irz0RhtkrfF3~Ah90|QSk`Pu z;?R&l`3_&;%ma{p-Ga7EYU!Ng7wSYqLvcL{e|uNxl}~bS>i`=g!ko4MMsFCOv+G@n zVS(4DVTd@^KG|0IK6VYO6NP?y59Qk2)LNp6ASuvo6WZe)8*Wedp80iyFFqbLh}d%} zhVpFN-*a%hk{#4_^7;q}zS&+eZxfMCm4(g|jIb#pkF7DkeoSXoke%zYI(lPz(3}J_ zPH12m=y)2af2!7Uy3y?%4jc99mEI19)mbr|IOP3$ljjw`^i)zp@&_UNafHwK;99i! zMilhQFGy8_d&#Kh8TS@wa6#d%-qdWiE+I}S!);ezcAHR-tA`A7m zVn;}KkI!I5NVN=nnWLZ|MdFRwXnD%cE@82XJ$lwQY*mj|hI@04Mtyzyyl{^;kpu|B z&*xG~=(XI5eKJNP5*sFy0HQ%?dOzPAN#0W3)pvqVjf_oiLe$6e>OTbImGq;`!-)IV zL%i=nnqmsoC+_@n2)m0CF6OztbD-ie{fq>@Ti;@ld$W2hBMM_4cBZ`NrQfnU+2P`M}r7cBz#T#ou(_rSf=TD31Qt*K350s{Noy>$ng% z^Ky1A5@u#5sLiIXEPW7nsMgF$Ld8&FY23eEy9V?9v*5pXn1&T@BWa;J=9={W^q#`a zx#Zn9^P@<-_=qd0EPr?p-ZAtpbzE2nDNjEGI?XqH&oSIw>HdcSMQ)Jz zyMZ2Sg`0rQBNX5U%D7!G^*O3<4@XbEV6>3c5XJ%BH?Ljv-u-oU5x;T47=s4i`dvAA z1MH51#g1abLQ--9YOa_Ka;h|ftRD~SU9qvY-4&2PzEO@7({#cVcKJ?@zMZVs3_pox z$a#|}+kP+5`HIJX9zFGu#CDqY*~UGY-9S_~ZgRtNbYK6>;!N4oaR zK$pV8WW_06C_SYf*U@Xa8o{~j?TL8IY&Jm+;bs_@3sKU3cxHGy)Oa+vLf#}~9-EYa!P zkBfiZbdY{y2gVqkxeSdn2IcrN^#gfExy&%>1P4YlqClls=u;geBHb~rNY{MQ5td88 z_ZXo5`$09DMaI3(D~^a_j(5~P;msUJ(RP^SkJpQWv*<^E0oz#B6u80za6sy6Or@B% zH2V{L{*h2nxeWa0f>$wA_!ob;0huj#K0Z)-Z-)}wPUK?2!BKZDEU#;-WV$U#Uk*bn zkccdF1e_zZQktRcn16JykCoyCCQebN;pn)d>hx6S7g$goa67WlbW*nGY$Blvmr%?S zqh09_d-y=7lDgpe;w^j_v7YM`SjlMvdDB0ZjT-bmBoMllzqOzGiSAopAkp=V^=Fsj zi61B+CSXe@XsnIi%hhRpEFop}7B*?9vy9MQevBu!Zre}fpBDpdsj-~M2nEW)AJLcx zcbZP6luUM{OtfSDXv_nXtA@xMh!QHE@hu}n*bYsR2mHL>zAc>?WWBq5{VYZ=vr=N-`9i|t+|1P5(m>f@I?OTN&k(N+CS|!>_RXa7 z)Ad<|sb(9jA-zzF;(2?2-^A+mqwzjyc$W(Uw@e;N-$W`PraofQhUV~N_%{6aIr;A- zkz&PLUx4vUr=rVzBlIGF0}A>Qu8~1uJLo+~zqPVOFc%`4W2G!Y+7tN5nX)4O@$ugU zo^@&aw&wlhcdA)Gqz{T>VG?PM5locZrxR2h*7Uh)P@Y>>UOegl{Kg(`u7Bwuv9P{j z(Yz%#7?YmhzwAPM7>;q_?5d|eqaL$={IK`Igx8KPEiE!rk`rRXkWTGM27Ujjwx8+l124A;HPW+BEMC|$DP^_##)w3=1A*r)%67Ap^P4-L& z0ZK)T=Xsw|6Z$_;tkqnf!yWJr*_F$Jzuu~Rv!-AEOyA82n0@{6pLOK(y1rjKDN@;b zE8og}*+D@}N)zZN=so95Yqbo)_?|tu5^2np;EP}P#p;}4gQGsqEof_S6I$dw(Cv&* zCCU{Ia8&D?+$Q_`}G6D={r5>4F}&}Y)wjW)e9qZYIY z!jUweuCd&a-L(l6#~}X~0o2}5EHJ&AZD=}bGpxM6VK!uUJ{MIx@*U*9_z1stdP)!7 zbz#o$ehllZxMy4}^%q4Bf{eTB{*qC`?87czqg#WEx)16Gp8vgYp^DaA zC%kD><+(-)3J<&&-7CCH_!-YUeE!|C;qH0*Ip21w3o+B{yMF69!eb^6ce?{*>{aw# zbxV|m54)JjxcRXlHPB^=f5eaKqmmgtB$q;x=kqlE1y5lIUxdCS(q9?afR)egTbt3|b{pH+B z5&}z&$h9ew{4T@`?)hZ;re;ja7wAJ!VW^By`py1Gf*dyN@8@xZfC~;3!;r!Ei5OwN zhIRWCFsHomi#^@{s7QD3^YyEDiJ(at_3jY+SLQgr zgNYO*0m0zU!hFv>yL1pK(A31#w@|BaQ{MRx$fz&0J}1`H~rA^I{G&3kB)7* zsDiFt@usBhs>#RRA5wh;8C6pp!yNUE`?=@ED-PctT{@;8P^)g?yF>~lpc1r|VEFGJ z7kM{DrFId$uaaM_Mq+OkVtEfVYx)ydd%-?H=@zyt=g~moca&mP&ZFnOC6Xpm&1ac+ zhjLQrw)?f|_lH`2;YMJ(?Wbv_Wb-!xXrNUuS`OYrE;mYQMMSiCEd5fM8AxgZIjHTe z=xilbj9)~?=lVxaKAh%DA*f-6af>j859rPl6<7U@BsWSk{Z}TOIK6pYGua|THv#WT zO_Pc^y?0IO*{i_GukoS~SQUTVqQsizmF>#KN>$)ugGLg*=jNx}2%<6OQEVtN+QUA#D9IV~dHq53 zu7S+tGzoUwe$>QU$5Z)o8)kLmBM#@sPAzh3|p_uiobO~Cs#P9OoBH1 zF~TX>|G($IJfDm!X~f3b(->9s-BxsJf11E8a`85kQuZt{JS8#GDGm{AR!PzQoAo_I zXvT-!nVdy*H>`#)sxQ9M;`ZU#JwD2Z+=b0mki{@B{VA7sw}TA6t>A(Lkp#Coo#vy| z`&FOqt_W-ZJ{Yp?)*DH10vm5WL4|*D$itz%bsK^oL$01o4FgF- z7Ysq;?ZoDy;(1g3wW}~T<+Z^ z?lTCZP(877e66_+nzt%;2u9KJXHE9)*qlgxr8XcoKmtgw0b{dNCKH$@CBNWu=6$hN z=T7JtAfS$asfgahDV3Ysbotm!i;%vm#!U)w?Wh& z3C9r|P!gmF|G@e3VwLl$prY(|6qkF5VKeMUigcLb-SV+Qa)3r#3AZX-bYi7J(lj#Z z(MpZX%x?|@J&+>Y7O{V`iPfO2*)|(YlEV!id|ou4=5cFj`!VZo{VSIk6s{`+@V6&TAhCm+yD)R3%w4#mkzfK-)UeD z3Q}o>yIN$kgCeOzI`ej zcX!!_O*Ys4Lm0GhclHOE#W^Q!4_1YUBYS;MY{1`1Ns&MDneODcc=os#@S7@8R+I2c zlsor#%W;m}UZ8*vQ(_kJzSEsp=p`2!V%-cN1s#M&9ij(BPJ|JAL7`Cnwn)%pmYaTr z=G#vzvXvObFzA(is%6UvDrXJbrK)%rtU3_YfwM5^99YSmYSYr>d=&eDVVY zwngJ1MY#F{icUGY}E{OQIacMUCs`^M@0v~H8 zV#p_G=mumw@^vI@LCYgN#~&m1q$vTu37V9X++A$*1MKq>$C?dnpJPP@;cLppfuQaU zEW_O+;g&}EiqN9}AhmQ<>)Lul8e#@tEnLS+AmpNX4LVJCYGB%YoGTwGURdh(zf1AH z6iLy1|DW{c2L`&GM*U8bbb*C1J@c2eJrd7WpmkN1;IC6d~p=AFtB=GDH*zMeR6{|(Fk8S-{@Y<=xp-L0JnplYp z-nlJ?UQMN3TEaX_FV1{*D-Bx(8zq{5zAdtjeWYz4+8Xd)%ezkf?B^`4!H8xXf%p=+ zijiXZpNHZ!&A;ZlAx0mb;&l{xHGmQub;RE~Qsh4EO5J1Wha3FyKk;XO$xPk9(v|+) z&dmfL^X0JvEug4c5|=)*D*RGOC%2+)K<0%}f}vA}^I$J56uh-k7~wF;u=8;0@@-f} zXq8^|4_4Sg&nvprfwy1S=T{0nwh59L>NxJx|Af#qizakROO+n{gLbqgXs~x?eL>Hm zSbd)M&7568JQW8|G3M}$Csiaa&wYj~TSCzdA3;V7PE~go<>xHB$7qi%0P<>m2*_?! zs;LC6_oTxz2!f;8EWawj>vp@m7!udCNDgG2-Lc7e8Gb<-+gKl0ee6!H6mYk|ze^ zCM3x1!Q60=oBC6|#E&2zqSQDjdlR&t;V=aH)(w{W6J`$XFuASyfstB7F~{+o#prD^ zzG!$C3WBECO`vlN0Glyz9scl;`hq*y|J~gt7z>ahrO!SVsXJG`Yp&PR?9m?cD|rq& zwr3bU&|jst&Y>B~w<+SGXk%XpEu84Hjd3vH5})hLs{K8-EQq4B^ z5Oz;&KKiT1Koqjl48HZ?dHZI>S#3g9#xH0Sn!yEkBYXD?*s7HfrZez$7-Yt%p-*FZ zxX~stL=gtv0-?9&mMa|bdfpLyE?ks1Y7v7eEYS|8-h&Q|MzbCBc9~;;% z%Y6WTl<30y3OHvq;dyFy7h%*gCOjh`&G?O(5ifiJr>#{e#wT%%i?KVsUNfkJLmW}v zm#Jq@<{|g~Uh5HK8k@GCPkn<)0}s-1Wvb(iou)ZB=q%i6au#puzYM2TO!;>ZtUtlt z3s_)3;ksXG(g_*`l~O9y7xe*q^Fb8Yn;=Zj;Ed>`y&rf3n^CxD`&HAguKQS-tDEqN zmmIn>B7hwaXp;c%VK0*uYJnX$YD`I!&@6G|+O{A@DbhBZ)1qwkLOlD(hIfgaNm%#r zt64fzCi=%13GI3Pl!7S7V6aGjR?E=;`Pfq5;^eVnZ&ofZqwii2yK@F&FWtyUogN;>f;%3SAPconk(lp6rP_E z;Xtc=Z+YigK|{HHeUnF(tvg4C%Fs*vWsqg!u>Q00dmI53oP54E!ZFoYh-Pc5Il1+) zT%7Ki#(H6uj`~YF{~FtKuD6-VW-Wls&R6j>1Y!{sDxt89)NJ{Xx>-0E%|FZl1E9@mt= zZ52h&64FjV_RC2*I9} zm{8}OG@5Dg!y%g?{e|GiXaZz8ctiTxgL%g%{62k?`HT>pg|oUSHrRA1FX2~h9U<`V zZCOlR>fh-B0az2y@O^yq(J#+qCn&1SU8N>a)wBh`b*VYd5CQP%ykq&v%IZFhGQDe? zjHFY!hdr&kSm(n;1*{($mA+M)G2KZ8Xy}EaM16rryWI~ZpF#5U+{Uav`z@6Kr`QsT zre{ii-?SA%T?Zy9pNg-4!+(U;{4W}+o|hn16>(eN1>>%8vM7+zv8^w|Bf(NYgv*AS zK?ez02oDkrXnA1!0hV7AbE?lpF-+N7VGizOSSgb`aPLMf54LX7|8U{Oy~ik(YajrJ z0fJ5yE&;(i`v1mFL{er5NwDcK{43)`i^PahX+^|TA2QQ)TAGX@yB^iYO8$SHrw{2i3Yl2x za(vkc!9QN(W(d1)0|uu+oI`P-uiB*bu|HrUf|GToX)$%9x<6O?QJ>D9w*HNFJ1QDR zd4(j%F(xd>K){O=tme1si0U&N^L6aBo`X9jP?i9?KZCzLT0i=rm&5;ECc3C7JXO1-_)ZY6qWdBU(LtNGnpIymco=Pv3yoN9?7bWby#N7!>^-tq@1x&<`8q zkOFuq=5;&pSlwnA&AX`UU*>5F)u6_D2J+L$ycGqXZVD{qwG#uM2_WIdY#fXF0@job z>E)&%Zl9-!1TD2?tl@=x-2Rl6H3Fdf8iJ;257?zyQn!Y;Vdthm!(bM#g*<+i-_oYpB&K{ z_|YIu-p6dKRKs*#_p*pg>9wsiVljSAG9&yq5{G^UpFa&Qs0Hx}S5L>@&ehJFI9Jb< zVENnbazy42%XEYt(P?;LSB6-Z$9=Ut8dm#fJIM%MrLHzMnhMdpD5lSOu)*ptJ6gs> zsj>Z3_@4ymMCvk5GibJDeDXwpdt#+&fn7REYMD<1mL9-OzmuvKxY7P_d=^aho4#Kl z%{X6P0mpS&C;bs*+-3luM%t7y&ei~4+MhW^&A?38FVnhft^jSJW6PtT~NRU`y!FB%CQa6_T)|S;&aP;KME}HrZ>iDN{bf;+G~W8_02f5P1bNV_bz&Nr6hWIf{>b znsYigMx4xeeH|kX3>QSr8AFD^rXir7v&}IMjSV)QRJtFhKU$%IEcWJbiMw62-vtST z4V%!5-@t=pxK@%_eFer~^%pNcSX??`F} zfWT$h|J~gnvg|V6H-rEKAY9{UaqKKe?4z49#XeK9t($ccbogwTTP9Jipui>yeeLk5 zl|(HMpj!h=k)k;_Xc@D#F0cFP^{$3qwIFx??lt0FW%%4SuCH7i8ClR zr64mO%lQ72<%*LNozRJJ8Uf*jS8CX4^%9;ZMp;jM$HW{1{v?b6EpMi2U=)q$N@G~J ziLNj2#h_J{KPQ$b@4Wc(M6gsw_&38t&wG@m-PTqKQQ=zA-*Xa80`5$Se9{>ya^TKG zM!>2IUpKoWgYMEfxlYlrHpGd#77aMC7!u6#9rF>LqeuyC1t)5Dh7kF|F&|p8 zzQG(B{i;y$j$HT0!^h&uYQEt#u;OG{Q71cH#?KFlnjYDd^Smq5&3&j#ks@WQCzjXZ>t;86Bb<0VvgxBjT9LB!#lQmIM)XVLU6+3us6RBkLo5- z`Dbthi7YzX4bYasZAjHnBeL0fc?+QRY$3zNM1+}tEaB#~&5^-2&v&mj3Zb6py>Bg`%H;vxP~M^k_4qG` z7<=1Tc929O;oiT`$6;%fBrAfyn2j$E{UN(8d3Vp}l`X~yj+XkLqO0(0>h0o`Agu@} z4N8af5D|ZLj|RcfIT#n|5*#fdpwbMKZboe*MMAoBu+iNrAR(gf-hW`*XV1OooacPY zHRH~I22Lj0=QOTMCsQB)xijm(v@ z2+nOT(rfctXOr!3(*Ca2N~Nl->(nHDjXsqng3A3&To>~hJ;2k_5K}{9;OTd!^hx-; z?f({R*QaKP>kTtSJA&|-QW&DTHe42WF!WXJ!ZqYEZ3G!t-ql#yRcLv@r!3Yji5oj6 zc~`_b^W_KAe^ZeRKR-McLeip2)~=ujEw$~twq5|4)oDMecCGxx8ae_~)a!sMh{LRY z`WykO%TSRaNLKRw?tm59-rUA&Y{FlPSs|WlxkdS!Y+H|er7&OnB?@D`-#DB^QcWtE zKcOVWYT&D4$ZQ8lM{VNCaTAjt*W;lIlWeq5HYuFPDb*spRxfM`HKF)Qs~hFr?G@*XctMaZTT8bRP6mm{)19RQH1&DD+@MB zBP*i}ZR-4hLiU2&cNViS8vbt~2x&omB zMy^~pBa3~a>nq(6xo$<4MYOR-AEC?ko1rLL6s>_Kq?U>C7EqCdNov?>!}w35{S{YU za{z7AKOao;*Zs`D5BtbDayVdQiOzPw& z63$HGLN?D9Lyhx{fK+3ryQw?4yOAMtJ; z)r7_iQ~X_&8@U}ERY*9iahpXI{D&vnRUlk0fP3i(6zHCU_l6xzy~;hPoaO|?yfOgmOYdoLcJ=A8WJwMO+pC7>UIgMNqEOWQo-8hY^W)K;!oeu8>3_Z&m zBwh3y6(OWbTilyZ(;X!FFM~{$n67!W6;wfkVZvfe;H}%Zsq;ak*qP>nC8^M&z$>Ey z@a*S|KczyPLkg77b;or5CE`?E(V_HAf4kN|WT500nC~l>!gmZmJxP!6=vd(e{Iw$R zPCo)nRsNo-N}TA(nxguKn6KWp*V7{9;M_mBKwV58KWtk3( zdg7E23@>q~z^>N^cqhzAQLy>bQ*~Dn`Xp|m@V`p!=)WE;YfY*acOB(4nh4<721ZL znK7zSKNcRi()dr>PrD{*)p&t;G7X}vLR|E>2Hs24(Dfu2;ti~uIpxSLG&yCQtuiI> z^zY(g&#s`u-W{=^Ucxx@xNincEH{5H^%is%+r2@=rHODO2jVuE{bJwXz9LoFsITNc z$lR$luRKUrxx-j?H!WV$&OO)^Nqek50q(=uy<9j9H%?y45|w5>K3lxg=&6Kt7I;q& zH))VO91lVafPT7r{P0wg#d-YTKxO-Nmiuu4G{4NC(*isLUZP0A`S+3Ve)|Da9&uCj>WSU9-}}Siu3w{7AG|UIIdcR#Chkqd zvU>=L=v5R&Y=8Cx7Vp!KZ_b@Gpwr*LM;+x%rPY7l4=+uMg;kx)Bu7e0<*0vv{r+N) z+hh@S3wm~@BhIWHv1)*?OPBQ+(zDJKK8m%QHw+ctl%=#aEg#+ec*k(Kf;nq6e&}kp zG6VcKM)j`$ByV%g(oZxqhjAq|9Ckb7st_j2y)4Lq&=;<5*iD>My>xHWkNX}6|C;5D z1Q%2@%vT6PAl)9A~+@2izEG>tJxSYQ5ARS|_zbW*6M%P3ss2*v+b+_i2A z9Zo4YWG)0-C%Cp@JRhgEbYLdU|2dfosyBQgY$jjhUn0R%qwnqlYn~UoIFy-#E5+i| zCs=DpWjLvO651%$bi%xlA7Fw5%|b(&P?B=^SI$V94|)6M-4b6I9r|CGfQ;j<%V_(?yX!; zKCyIH0{ukE1DU*gHo7{!0*{`QA0`r0hu4@|xDk(aEPTqfd{#FBcBO|K_yf;uFZgjj z0`nnE27$nVCARdj&@2R5Gv^1L`NfOvt9IMKuucTb5P;qv%gbscfnt)@-2HQY0PC|K z^%%mTak8pJZ0D0t&a9Y@(d@M}B)Coj5`$<<%E^K0i2&f|W0C^E43GIpOKrvWI}Y|* zL1R216E1y<ecncouHD2;{q&@%r~h3H?yFLrbYS6SJ#{6{STmlWj$!-vuM zdQfX&)m^xU$bbvw*w50aewloMeBkKQ0Xgn6eTs*}Ih}8ET#Z)xzQVC4+rLIHT@El) z*C=}89CHVF%L+g}tHnw#U#1r)yg=+v(BNji;AwUHaE~{2d4q(6=A$G4*WXdLFv5uPD36(lvjw4Sv%twad5gJyHAcEIc&|Rl(kt5i&WhWuQBjL zPGjpHnToH}4vPDpC}PY%Nxi*S>XuP3Ex05xfS_*!{foQ$>SE4H`}4jWb<^)R%|Q$V z{Fkow$Dau=;i;dh=AqOhvY5#tDftw3nPTdhmIVRz3clZd86|>E03GHH&%6cCF%`Mz z!^MZT^sOG5Kh5nLpM~m&^+c44uS6aGM{u6LjwUGeh~-SV%OcY)JQv(oV!Ko9^~V}+ z3FrV={`rA}#<8{nZ^~oJR`AOFJEsx2s5g6Ogq+X0{CxiX`%l1KHlbPr`1`Ge8RZr> zEf@*;kbho?3Kje|C#q(!;kPAY60Xa2hbDMI{X8OUaPowJi_}b#GOTT7M=ul{{o92~c6WJ{F1HM#2lQxuT-r z$#Z6A2s;PxPjk8L2PUa_>2rN<@oQo+a_rzkqA5&VY|iW*GE&8Xj?;gCS73<(WoN32 zK?%hku8+Te5@t?J6U9ILHC@pb$KSzm4@=mTwnt##n@|L7KpoBU;`-?u8%uBCC;t59 zZZ>l?OVNwB*Sic$^LIk_mo|IEj6k&VG%GX9y%*tL^4VcIV`P?m@y9?4Rxz-l zmy)m@oc1z)fzz(=z{94vEvy8>DVCLg#Oob=pC@s5wqMNRx?LOb0KUN~%<{Kjl2-%& z5P@OcM{eLZehzjqEY2ihvBHHwlQFc{VRz`%3%I`Z7?N1(`eWjgeopNBBDxae7E|{b zgPCITyq4CQg3qIwFY2wOwUj@7{?(;d#Wq)CR>y&@S{V9<8;&O`oIIZ>5c`c;YJ{nw zMiV!&5op00L_ugiI z>xZU}Nd3t%lxu+1PtQL9;2rmHtlw1TPfb#cmzwUgXmyN25q@FzkR4oyF)z~$!SN_u z@I3*_^`Xa2@Z)sKQA^wwZ!#2-qw2syzmP;Sb4_0wDf{)XNuUkN< z9&`+PKa??@S@9piTPlo_$4AT;V1xFc3%;R^gp-nrCox9cqm!8Xo-OzB0YHp-^!edI zSm`JL|4nW#Ij$zhAy(GQuQ`N10ZL!|w7kN^%Kv#FNFCS1fRYXX_z?%VWLl5Vr6NUW zV`k5|S*xNb!%9Aa0X2@Ag(7cSB=p?dIxH#`m|qH=PFq1pbKX?2A-f;46zSYe$Va{9 z_XoC4jGY$4GBN1MHz*JIG)18%Tk>&dQ4w4?n+3J^Fswdy)|H%HW@9gEE|QN_b2q_a z{42$jMwk27GhJ||MUQ@q)L|%c*JwvA-ZKH}5Vn>R>=o~)?fxtv+Qh^3^iAd0DEhms z$n$&S$%OxrFN_@tw1F%JEx);&$OH<*ucwX+t8+3{?c9sz^5iW4%t%nvmYgk=px`ej z1FYgSEE%UU5feVGLxZPa_= zk~03j19k1w;F8$HRhO0RvzVu7q}9fB6H0N_GGJ>iSvD6&vaE*zuyYnGdB=RHy^jae zE0;V-N}p>*#5QfA%u`(#gtIg^s-hr8TLj(;qrR7$(fy0Uo^pP^%@@vwVHL|5l}on` z`p^;I!QuYovzZ^Ur_TLWOYen_y3oe^i3-8Vxu~3^{ILg>0NXw)8j)5aO^yV+u1um8 zJ*g_ayQIYA9zz|^d1R(3RSf=PHwAs5GowF&sX&q_-a-ERVszf6QeSrXMc7)40}_v{ z@o0Y;${@`+SYN@Y;|xbkL8#qcEX}F8(g)~UA5v}^wMH1z@1$hC?MJv!&n5f2*7hlh z$bJK-~hHK4FZ4~rBGFb5!t*;5}c(O)Fmp)4!e4D zg4Dz}`SRh{7K>;x!E_xt?{L1k9B{Gl-?~9|#M& zXc~M;4HrtyGH!eydZmHl5MHE{B}eUPS0R&vnRtJ7u;nL_K&_1YhS8Fq+JgkAoGQE5 zZLoVwAZvU-0%r0aW^##b!8Ewwsf3WD{i=H`ljy<53O%7L7We9{hvyPhUBPzbWJynf z(uX%b5ITfQoe=fKA@255rBA(pOf0Gyqud7{bxq@TUpGzBmELPeeun#wr(xQS)k8}N zZ9T@$iR(0#{<2qp_r*=l{;n-Df#gLW$bs<{jk#a& zqnjT;f-NEDw3NCi7^FCK2d5&fviVZm^CR|lzYD8+JB#_Xrks|WLgep4*{mgl7bS@)i~G3Ug;M6JfhO-vYY#H$v?apr|Bnj6p6RlX?$*s) z{=%bifeDN|js$1k^B5IOmjwA)Zv!u0*G1gd>|(XmPbfzX9BsLfhyZ+AmC7yPV^zpg zbWIoYmXLJLKqVXkep>g1)ziSq?dPHz-ZJ$r_>>kn6`61uKDc)mFr&tEa&gl8J2pT2 zf-hzSPHRMS_D4%=XsX7;=a_M*3PNHJ>3t&J?|nX@F_ucGtH*Mrz~s{lII~Wv9$$Bm zh{X0^Q?VpRtq=79Rv;^U-Q6`QX}Ca6;%Xo1G_Q$SEkD$x;>-pWHuabW)lK{C<-1Q; zmp=)CCwBlXy&uoyWT!sWJf6e2Y{dUzZ~LBKALP67u64k`_&O@>mj?+@B7@Q{sA65h zsZ0`70_D!-@i71CP_Fk!aIu%jAP2m~PO|aNjEq5v9d>TE;{mg7?v?D074r>}JKK|s zo_fiO+ic38NOFm=j&q$a$;7TEL&De0qGg#x?idyeYcRUdn74=njh3U|vR@Oj+sKww ztZlF*)(M2XT@93ETv`Xv;wEAOyJ7AtLGiF3w@^T)^|laggm z)F7Jhdzwlsd<3-e==Tri9lT}kqjUN4!NrAYqW(psH(l&SN4m6x*Mu*TvAFbTX7{|T zh<8zO)}rZLy*S@^tBL?I-*V<^nw;yd$klhYo7;s`<31@tkcpG#75rh=-S(8!c&A0? zPL@|bo^z7Qa6E|(dTem>dsmugZL7hH{06*$6j3%?d}-i3CLYA5)bVkzpSUW)xamq& zAdYNaO~PxAu0s1XzE1yHBkPsvk}I-?jr}VgJzAniHIH$D>=5`UKgj+Oz@Uz0E5!Z+ z<6#~JGAShTzSjMYtedpg*7%b8qZ=zW`yxEW3uruiXy*TvB!QS107X&V1u)}A5c2s+ zJ-ax%W{_Ev;s9#$qhS+(1<7@e;4!0e<8QpF?eO!27`_j!<(BVc?VNvK{q;0hQ(t9$zFA znEwoEN+q>SLZ1H9bpHMTj-vMbDJ|mO%i;N-PsSUO308>A)KLNPk}^$*J9B6fcNW!n zZ1dYuaq1O~^m6wM-1{dia{p9SAPQByu9om}wY$UTK_t)1CV0$QiAD9rzR9OG$&y^Z zcB1}}IK1jwPOX0nk>!HrcN^-Us0)|~sD`gm%#z?L>*f`jV=;dec>@2LcK^&h{FhAI zv?2d3v0}?wq=AS(^&L6s(dJRKr239$NjCCuu#+RC*@#lk2k75W_I*2y-s+&m&ZSya zjmg(rWTI`1D*HnJ&SD7=kQeP z<3AH1Ts6a_%P;7?!(6)3+l8Y(+TW!4{W8y1_uin~(%ML%Rj#kgN|)`+SVd>wL(TqF zZ9HFN^2u~@&F|)fLc-5EDl6`^<{#M$rB=#!ZB5?tNcSWL?m>GPfS#jU{r_|(Vm6-~0j;`lPa+3vRt%Uv%CNmR(t#`YZ<)4d8@%;2DPZa1!0ofycA1xKZqHY*;wrZ% zk}4(QXGYg6i+k=EJZ;jh4FvK>y-uxD9@Kwo!(1>!MM_XjZRIc48Qg+2CqGRp2;3QQ zZHWsGlvf0Q_y{wVqf*Xc#X$$?{>^4Gxjo-twUi|4k|Wl4t8J$r7+ez)o`*O88gsk& zAxio2)cl9^X-a|TTdv;84;^o2n#oM}<_g5Tz^suqsQ4AYE29~yGQuUYbZ_H69}~Co z-Fj>P|Kwe`-x&xu=|3#tzjexd{Tuf|@>5!7FY(!_)Keu@Zj&_WD!;jk@ei$)o%_6Sa{Na9AGmGKj*nxo+)>TWh zI#E4@+IU52`*-V$qN8!p0cOJd!XNU`D$2u4{8Pq5>CDWIQE;(@8s3k3&c|_m&PE%w z*)tDkMupX`Rgr{TT8tt*6H+KPiAzXP)`E%da%E2(vIMAU7gv&B2EozY@md5E4D$b7y3ZEY1Pzi_7npJus_+?Xd?(EDW!9NnX{_A8Wke_0<39DXPz9Mjwdz*N< zJ7IAfSDXK#S^3F)EfL5cl?+u)`Iv6{b6O9a=v2EvKhqpNke|u~jbYv|aX3pQOEyn$ zPmNMa9L^6M;H|5W`5jD|?)3R7)}?jNq*Re_>d{kBRh^h8Pbrl{N1_5s@g)CBAS}0$ zMdIW&!9N1Nme>|^T;SkivnQ~g6dd9Pa(=_k?ocGupGgC73cdnbF;di*GbsCoMUBdx zk-w`WCQ5jOH6DbEgi#kMt#APJinwProKC}Cu`T<*G2XGoc|kFkNd($H$?p>jM-vbS z>(*EqBhWbMQgIfiF9O{#^99oa*xt37yq=^L`1X6pSkNJm_MZ%noM3S`fH@Rie6H}2 z=SW$(6dV>P*2Hs`TywNNfGXb9nr@X+OLd6>exe`EKkMrZ)b@T*G)fj}Czjdz=c3=sqw|JE8GYo*AIK-4*MNEZK$kIHZlfBj%oZdV1VhgEsO^6<;> zE;P^cIKs9~7=a;O8YE;DuHrs@GUfJC%Bh}y@Z7|G zqT%kbd!KC9V@!yL zda8AHQv^4HY5iq)Fv;KhP{<#UYt{Bt_fqYCriq;^IQmYgNLpys{p`9e90Mw*fbv4y z_cs}Vv)0U00TZE|hu&Ie^^vdnv6Xue0|96-G{EVM6$I^OJ;PEU76^!H!P$Frm9=I6 znRSsk;-QF4iP5r((hVx~q6cl4%X^`Q=$4d|7g9L);awF_RSx>Wenl9xEyt}w=gj>k zg!H+l5cfy&zkZ3glP1Xh*0r48;Y%`)ro}F~Ba`|}+)WugZEkWsH)eqPBOieIT&NY)5WY(e zQp-ob|H2%kaS@sMjMt99M^pqH;k z!Sg%MZELJeH6kq4%k3fF9`D$Ckyml$-$v*Hx!;Pur63xL2iKHvP})ZiEKb<}#(mWOs3*(ASH# zMx%eV3;boPeojSJ`1wP%XX|R&sB%qNag@E1I6Wd}5enz~{rOkIbs8weP8shp zsa0|)q5ngnh^Ey!v9x#Ar;`opE%2_Psm%Yq$_bvNNQPl^xEs3x;)74Zv=G3IV#-~8hWs@t27 z=k%n2T~o*JbKIh*6DJ9!yl=fhOm_=e41pkilGyt0qZkhC0uEtujMQ~93JoNY3IAYVVm6&Jv+Euq(@Q3=I6;h6P22Q@QB zS>96S)Gt=-L?vA9;7jAg%J<9p z{}B+04JKme9bBZ?M)@Mi&UzdD^jXIvRxPwYb*4VtE0OdxERhfbk-B`=*JRjNH>hHmU(Kk3h_cR%7GBNN+ z2kYbC(8b|iH2&qlO^F>7@rEbkujjuodoQyZgDS(Su5Ga)tAkFsi-pv|QLKs?;)14a zNZodtwet(4zvNJwv!dVbL=sodm5db2MJ2dMpUE|U`=jwI)TB7am;Issn~AN0@niX) z?jpzA=6z+BTn+(^`iupK; z&bH|4pG*VG<_5s+kD2vso^LAIhl8v~3u#e`oMY(|)=#k69^=G7q1mZ^Qx!!2)KtG@ zB*dbE#Ip)UlBM5BRW~;c!aXMBHYDUv?J(oacl+!(5<9qWuH=>3N{_mbHT>BynAvkV z)F?G>+Zx*DL(fBVQ|{FFD5f(9qvsG}?l7wti>a(Lgi}GOJ)&%#rqIu=IIXz@CT*Vd zw4?dJ%I3nHYZg#nNz)UlO;u-DLQ4fvxAyUfxoF_+^zL;N+gC|R`QR2p3~z4RJ&!JQ z@XNk)u4rRKn_xJ|HnfM(+ro}mImGvxRAGS+qWd2g@HriPazvWN3^6&`k9ka=)lM4^(sB)pO3ljf?18HC7~mVaz=s$Gk$F-v= zNQ7#N>mI$EZD|}Rmg<|vhy~pjCe5Wd?yPhtd65$D%GVcuKVx+B28xg) zM*yMFY@1>Ei?xSp+Ca6VT~yk5;O(_+tCd;!^xK7w7t*5ApF&j%_y z7%+mNY86K&wnz9nY1~+=uLQscdMJ^V?&Bu-qH+48mMMBtr83vV1MkXapqiG!3&qdhsy}>i5RV#1|JQ*k@NSxm z3UX9#;3=Kbl$U0-4fIczr#M+^PAo-8%O<%2n9AK@w; z#0=TRLTSB15apzShY1S3{y;u>r)g5-M&j2#(kxvz)vf411hn+VkD9aW&g9%`fQJom za*wu&rI{(+Q{crGs|(M>J$E)BX?96rn})Rr>{FI<3nmMF`{{_V`J;m38TCa(@%Jo$ zs!WZoFGRv&q=4Xc@d2dnRzvxcBe>G4aw zFR3(LnxM8IeP3K%o~%CMGYwk@?F-PHf&`@xV%<_kCcxQu>a;TCbSS?ZptE zPcx@;6VhOZ8UD^~v5hZ}Otw}QJMdQQ>LhGRuWgF;ynvL%^JYxL(TK@DB^$5yJrWlD z1w^J;9u>g0@0i+T!~PUD=Aj zd437^4@?c_VUMCeZxG4FU|KY;ef|G+=G4#4WE|r5U4}I}8y2q9-H;z3$A!`cYX8;=UwGf0GsAzDU5N zAUz$ndvYL-v`ClBlh_j`q8%yOz!p+4QNFl@1e?2^kD&7iadD(r4Dat?B)qQP|1C^m z9Y;1O+&SlAwT+XJjyEwf5Yfo;$-cuyS$`a(4PDV z$-DwlRsuN+@|^F5@dLD1+KXF?Q4vM{wF7n0KW6iSWDnVIeWve_7B|mUp3U%{ChuJ* zKjV*S*?<^x-<(xwur$qSz<(f-M;n-qfT^SrUPWl>g26M#{ZyKtF8Hr6Ev38L%QYc# zuVPubOFTbPe_Bt?Y@K{(_$UvrpXAgpkXSjSJ~YkO#6coQTj^u(7lE*16CXd4d*57I zkrV+Lbp|^i8Ne%Y&D+7V^dDjK&xIdP?UL?U{x0#%SwJ*gmMOxyg^L#NmVukN6J^~Uh_Xwe3nH9gk!1tUs~k1A#g zriWf1!N3qsM6NYKRbGS^foDMFf11Qhqi;e{d5o2xwzd7|#dZ~abv~58lFIn+lG4HM zj2ZU_*fDlgV{@E?*HZVjU(pl~V@>7O>&*;OBhFE=7*pkL5#xRUyHc7c7LU)2Ge@ewopM;bgya5-qA0oMs6~AbE6%4*l=Hz) z90~Y{4L1=!_n{n!hdY&dytLlo6KU~hwRRTy-K^aqHDY+ii3;L1#X@hUFvq*g*aU`Z zJY&(TXV;*m-<;OcpF_|wX(UY`Ys9B>a#Rwlh7jENp|C($>}w;)l6#|rEMobSm% zv}0mfTSIvZ|8M3O1<}`jT`zW4a&{w~2OIZR=8D=4AMo9pkopN_GnkD(=E^uDTcqNu zv*UYaRznUKG-Q@v;omJZ33($1t?xruEGY%{Me#O>wa%6=vE#pwfBk3E6ygxCb!)0< z>*DjU9~bV<*~4~G0mdh0sdsTY^|~g)Yq&!D>EsWmMZtok%jLgx^&paEdvpA^u;&ca zB|&IY6$A|hCg~>%EI(8CO7@+M`~Z4(Y09g%c7vdQj)(lWf_9sUjGW{T8=NdXri~u1 z`3g-M!&*44KgAHN_~>4dL!_MfGCOSlTo=yKO_ct1{3v_}Y28d1bq*Ye_OWSTRB&j` zX0=oK9t{+68^xz55R$YT5mH)vaHM-Dk%P#iNrb17zfy>4@oe*_DfeCAHw7oxA9FRN zds4Gj3?;NYZj`^2$l7sKI8(#BvxoRiMfY%n_=G@JR12}$B(jElrR<+K5**alk7n^a zGWlj|ztAqJV2#(!q)`v62`G5;$QO8#4$p$cA&+LV@>O;SH@No$7aG{}x@mNaU4nn= zgS{eAJ6Hy7v)F~7FYp$O)ewKbh}Px|Ty=Y{1|qN(2q=cy7cuO4%8ND(^3t+>J;e&a z3B`a1=h0n~Jz}jOo-x?ijG0&Q^^-asd0!eP|kEuPR?c)wuuzAc=~bm_0@ zSB(|WCO+#;@1#Fq*7!Byp4$u)_it?^I5=pVz<6qS+A{1O70Z5v8%A=m-*w<-(&dnINv@Mye(m)-VLK? z^K2oLf6+L5$JF!NhO``FyIKKmcBaGRW^WuiQOz%z02lB@%;5OtoNtpme#4jH|GS=656 z1~*t9_a*^G>MF}UZk|?HbC7(G#ALg($_xbrkh283Kcb|~PjaIhn7IW+Mo;j6CKK0} zC2L5U1noeJg1IGu6#5f4E^7%hg;7paUYVW-t8B9u zu${M8>KgK(B3WJLdVBWDZ?+$-oo0>5s&Idpn&h@6XT{brs{G;0t2`F$wgN$*rTy&zqBol$h!SQ($8W6j<%XaaU&IQ@eS9z2FzmXbg8F0UX@7ePGW z_{RErJBO1tK?8it;7oAb{EEN5K8`ii#6fvA=gC{EC^l;ZjA}G;yM1h?UQ%Eo$!+;V z(LMI?H~EwirAGS;BOr>p(uY-6Y+}U)uQ;Z}KK^2bw9H7k%wvd9Nn`6bX=!{QUM&S{ z1b*BbD2_>kPu>9m&!#CA=s?x5WQ@79=s3uv^CW@g$sD_fp(y<+qcuLBFfRPtvE9dY z%)Bo+l9G$I&U|vvP&Xup_%4dnhy`&;so2j}*8Ep2{uFqY{(U4H_dIvhgjNLlx*--S z;>m2I$@VgLO!byk3Mir`Lo=}O$O9#GAN5Wk-RmBFv`QV7?GefL-^aqyz&C1mM_Mif zEXpGYV_OJo1A|*gflNBU{v~Z}I9a98({|LhQ4`-~P!(U74evuelSo1CahpoK)ihKC zV-%;w57o88Q^$&b>3_84G!;--b3^M(tFbWBV1Iz5WeJx=o!-Khdi@sn0Z0&6TO4!< zX}Av52k!^y$Z_Dcs#8CRa?toTR$VZovd>;yv6YJDnt<^QM*+ZeBt{xZyYxP6c?XxJ z5E6ohNzYpl5fg3&EP(aFE*-X%1B#Hs@*AWHN)W!upV$I=EGO+18i=KYnJPnRgQ!?7E%nz5$|=sbzD$){ESd_HGn zx(gF7NBbI;?`!W;t%QaAOcCX>?iERCY1{WhWF*9YEtm^X;5V_l z{T$^Wwe@MDRFeV;PHFCcYhU(=k`UDxI{?V%^X`#vflk>fV?BO2JyDhQ{PqxTNgQZH zv#6K&W#K`j(pP#uI+9O2B{Snh!GCEdG{y;>B5I^qJrE8qP4cNQP^gyUZ7yNCHQcA_ z17v?ap~+5uLzbceqTx+?F#Wt4bH5k(Sxw*gJY6^Cs8GsnjkaXPlPK6!yIajBIjQnP zYELTT85CVW-ETO{IYj6R%-Zc%G`Or;_3R@z)-O6mbS^b`q#3~m_c4^9_&Izg`>xo7xVXqBPd>!Ch zd^NhW_+t@{CxKFB`I}bDWajN(1be&NSbM(=qtTd~*6C6_UvuXvxS(^v=%|#uJVjS8 zx@p~iie&HPv^5L<6eYu9OPgC`AWg9D#)W<@MuKTgO=A{atn6Qo8bV_QE!R@B>-m<_ z>6Jf==@if?HE(4`mu#4Ygk3(cVx#5COosGXrp1##l>ivEyaDkaw7PPPj`1ON^#@(A z0zD?VU!EDL{V7F?`HWI(UN*N?kmHKOWjKmDw4Vs4J-dcuVp=>y+r~saWHs=a1nk-e zRsZ{1KEKAg`UZONHAMcc+atB+4;D&Qp3l8hXr*TFKbKR&w~%jfGKHW9>t|8N?n93* z3Tk3wF|~A2hmTQ;>L_mtoXu?XCoULNA!V}91BVn8Cjc;h&W*N3&ZY`)V=)FN9#X(0 zTA9$#;BS&a%u7D+MRh*ugjQuiL%*vV@f;{f6Nw6Dy=;ABb-E@#U;AWKoDi@n+DGWn zhCJO0uKzU$g!c8&TjT5dSbZAOgNVL+ax6{2KfzQd(N`R0G47D927(zxa!cQm9oNM= zGW)NKd34%YH38b1o<|SXgqc>7EyZKr?&6~1(g&R_a;+E#thq@}_3}23un7t3qyhMu zovv>cCs`p@&o4EwF5;ULOR}a&!kvAirWKSk>6m@CD@WS@ky(r9{m1*YV5aLZwHSV~ zW_~`e)b;Smnhy$GRQKibY?FGpm;A3~#G4Y*+d!RDZI~wdd==aN^+y-hH>CRko^)_p zjF6}9^5ag}vq7T;^+B3vA5i8Cg zP5AqE{CQiFe%t+HD)ul-j*@gyhe&uh-ZG*|lmlfIc=g>|t5^3-G5gN$xNTnO-bCMx z(F1Rfy)~ioNH;EAIOKzdKk%}~g2dxLVqg`#5xTzr9oLaEX+C=bgGOn|X?91N&mVw5z-zkFyEaX23{`T!3mPiDI!87ds_-`M`1 zFVKxrhnQ>VucNIl%j(|)3*=r54Zn_?U+4Sr84o3ukh}d!Y?anmHFJ1;v4Wzyo4$w! z2M)%3a9Y$&6Srs7^Ig;6dq4@7I+}d|y$jef@4Xl_-ThH9ZJEawjiIr;wnC`bKBMUg zZeX#YmM#kMy-hyqN+Ka3GA|oJ8}F{IEUiWJa@D*?1*0LyL*q|dMNONjw2->v|H(i$ z!~$eqkKe-a6UIhz)~dR_ufP9tXN!6lv*kw+#-0efT-7yf_>-d|fq^hvUd8A~ z-*npP(;DS|Z5qOguJo;$rVGAdujp0q_it4oQ`;98?*cO$#w+y^AR<%@=3wMW>_@8> z37JH32iNPVvA`&|Wn~mep*uF&LZ3P}x}~S=fbU0iInIfs&GH@8)4d zBcXgKbrFg69uF~TdO3BnC$2;=G-okQjZH;$MMjqA8W5xqpF#?ri1S^ut1&@W>|8)_fz@|S)o3Cm3lEHFExMx~G zz3Qsd8Y0wCIKE~8k0M+6K|1A^xClvJ zcAXx6QVZq`*2!I-O&3OkZ6?-okGVp5jcR}$32Arko>vx(DeAKi>~S5zSTIuFQ{<}b z2+l}kz3Uh|_e;xSs6^ICKcsoKLa6M;h7i3qEv_G)(qWd7>8Ht{i=^Fkg1$DsYtKqG zU1~2=`ZE29)q)u4iIqII(1y!GRmZ_69*^oG2ux4@q!)#WVSU+wsB%ZmO$)&!I%~G- zH6@xN7^z<>Od*pm9OKinf-bo6a3Wuh)2&;)#(XRUDwQ7+R;zAzln|fKzAGb=W1&@E zB5*Rkw{al%iMa`li$}vf2DJ(k8hn&Gu7<2)X^<-Au`Ki}&*ztSQ>cc2K1V4E8#zP3 zZn}m(CNSDvWvGi-fzQ}~wYVn>=+ZItQXIA@sq06}%fyb@+sqT^UsyrGpi^)@ThURq z9kwG9NpsP@@d`-rLj%LdD2>Al^4_!k>Co ztX7x`1PyAwx_z)MFe?}**)Gh&$z_di^#VRo2DTVfy{!Lzsw$GZ-!${W1Dcpw>O~`1TN*a(80$_AIX~kEkryh4>7!f*`=! zlxbn-{KQ_gH=1RdGC%42A5MU-5RT|37zvt|m$65}UjI26gFb?`J}f%gi$?vp_K*J_ z3%b}>Z^S4}koSsmcxNzZs3Dx12kYe}7a7kBX*Z%~YJ@YMoIssC zC&J}Wjfq(=(ETjm+!)*s+lR#9+cc@6rzN|=X_7#X40?@{yvsU0+Lxs_yX z4sEdKqZZO*e+j7Jl_EhD*f@Hsh)m*oBuC)a1Cl`f3Wc45XB(#0`pyTnrf+DD_7@U$ zdLV@_P#i1nFCX%#4Ze%v9z_C_4|SFBH^`&LLcVeq*Qa)$TQTEpR%~|D8GAa`Y=+eP zkb8apwug*jqHI>axO~^6R~q?Ws?uKD+OjfG-p-0S(7uF|BkVlY6g7R6&3gW?~czi&GWDi^TL(d+v7oFL98|wIY zrIi9O1Q&XDe!kTv(;V;>rmB9TlcJN=rlY1sM6 zxXrsB?msW@z)PmDCrT4bmR=XsJdV3iXKBII+P-;=`;@_r8kO}RaK+mWFP>twUn&ue z&lMfz7J+qg!tX>uTi44Y8O;A+JWZ?O(Tz_kjZ39iv%+E5_0tQibaK&(kK-*d?{cF( z--@Ba{PNV_qWP9gvy~w?il6CMV3mfBWlSiysk2jIIL?kxB;UBH8y%57b?#i;A!JJ4 zM%I|rd+ii`su3+V?(0qvf`5jojciv5;UQzVWB_WYJllNaS4Z zSRIHSHE!XVJNRIfbFjI(^Y`nsg2`hsEz54b&ryB|6Ret;B?yxYku46EYTJ zYC*(@?_KYI-Sc8l{MSW7gShNKnOWa#XaZ)qT^$qbR}$+m>d{yej^TR%$hOe~*0-&L zd3B25N}!|nqJw!*QZLWjcNR=P0ow!2u8w%jVz{ z%&W{F&i^3#d8+5oEeja(eH_Ub-{#)>93AlwFcaH&rZtccpj15abibGB{jmVsmZraG zE#yKNLhUKP)Q|ZT$E60EJVe|rtKm7m!Z(iO6wdRv3MKme>_?6YD*S<2<1_okWxsCY zw(sI>VE9f*MeSb@mVEFD2Q?jG|Kh;$&`<4pqEB!tXTDLsb!^n0H!R@@=k7wW{QMj# zmK=}`o1u8Iz=NygTqcOx7-L|qr?kyGt!rx^NeH_0cho@tH*^6Ru$Y!FwqGmtWdZGt z1>=6ddT+vNG8lWFZ?a&COUxEs&md-w*0ZPP12=i*i9>@(@xm!H#};s5>swP!Wz zuAJsepl(k0VnxPZJAXSoCmk}ah-{X$!0OU)i%Ee%3DZPb_&^=MD|3#gbfE zYG<-0(ia&~%RWJXl*EeR^-8#od06c9=CK#hVLD`4^%+|}5xIJoR5vz7jvtOk4>nz~ zJ6Nb3<1jp$U__X6rGz%6026jA@GjH5+AQJAwLmdd|A*xgxL_rH51+SkX=p!U6xL^XOiG9=izHOkpk)P66RT!cPfC?|E1)%tY6n zY!e$|ZdKHj!>p*u2t>N-hR_xq$RST*wX?i`hR9Acwu88j;ICxG{I%GMmR~Dhivcn0hUel zdyjMB)%Xf;n>j&7WXtr_Q;SHx15TbX=?W$wzwwgXxn@!C&qI`kQ#x3NBdc}leC-;D z`;cL{A=hmS#5+;!5nxZa!v_TWtF%v=??(3+fsnq@`c>8nK51MiLI}3ZjAKCBDWgNn z-1U4B(y~HT1ro1sLokll=>?l7E9kUhhWr(mev-eCCT`Pm_xe3}<`5fbC`;3dx?g#L z#XYO-AVVc0RkA=L=YjVmBW=gylly;%3u?ED6hJ zX~&=O@edif!L}YAG!b1rq|UPe2C8IggnK|^b1B21H4fU6@5!iBthfAtshwY&S{1wB z{mzrU$p`1TM^B2WT9}jCT8LjtG7?s*O(0VohYOgl(tUal0^;sP- zJe@E+Wj9Sb`5uuf@TUIo?A(}PJWpP=51l>%1({WqU(0@qRVZuEW?kAI2F7v=znahK zeUaOqgSC!4o2JF*EyeQ6v5V)U?-=rg>MgEZ#A=(qqn6S}4!li#t7@^%Om=>Uy08&L z1qEP(0Op_P&@T5)3rcn!hQBr5ShK78&6g2*t6Urb|B##ujNx4xg%xRD^FNgk4U}zZ zME;@y)oYG2(IdP!91ZS-KPwQ;*H=%|HkqNWuPzu2k_A1XSIppJt7gIGy96F8!cb4* z61KVsxhpYkjRAXb8=EqGxf7SucO4PgcXX{agLb;n{$5(U8TpR37kieRRp+43=o09l@D)N276K=vwdnHdo0#aBFHPyF)F(<{An zTLp#%tX;mNX5d@@42!0Xt?R?{8Ym%{Yi{%xTXvMs1YXHkdF%}_a`CiB-;rASIk+Du zDT=l`Jv!9n+srbT^Sz(u`^!ng4pC;wb_r`K8JRppKk$SZK(HsJZ^Se?QmeqM8}>vN zjXoJ(b7NEZ@{}Xs+>B&1h7RuZyajGE5;pOCc~-tqV^~&EYxH^Ud$!Fl54btM>q1c3 z2A$76ro<~mIrns#E5(-B&oZof4@$Ag^~-2tt$W_!cKdKg2l+h2X3|h$VAe)v zw&HT)xX+;3DY~dS8gs-IUiVVsw~HD>{hVagpp>m@Uc|YzYe7mkH0TIjl3K)T79?i!b3F=8?+F^+Y7LMbb5_v?Dc;lQodrJ5JULxZqa-S5#@sy z#aBRemLEQyZ9qJ_Po?kuo8Vd94l0!k1s*Mg-Qy1Y%;REK|!j0##6u7 zG0Z7|d`TeTh6*bGN+@=oW^w*B9W z8+AtrTirtif8Jj!FIsK(W;&5TI#*Yko1EGNSA2M4IAZ&e$NleDcJuvv63J8_lo))P z*VD@M3;BMEE|1zwqxSA4ioGxB=sky&%fj|THS-HRoT(1t=1LRqi=i<|gF5>GUCF#; ziH5j4mY)gB?A2X}GC`lC9Elu(Cv6Q$7>qXe8xm2EDvQ={HI22Gwyzd-yOrNpt7~?+ z89sd;hLu2Rd+r6)v-dh3+P{SVC~d?j?p^q67VlsFa|VdKR~NaT`7 z$Idp4+LVF`H$Cspgv_Wn%!w)LvJ$3g;OSfzg7|_E`Y0MXvg7XQ-Z%EZ-PO#-=5+)LWR$P-scalljrAbF2OmJ1jig)*uO(B@D9uy+|Ak$ zUk)DuW)fO>3Ay3=^c^R_i)Mj2!^=M__ZlZiSu9MUQ*68 z?eIT-yPQ}l=((Xyv)l&afkD)pMxG}*b~N}k2a*D~$A^3Oy!*nwSCmInaZTO%(NYan zep9x9iv*r4XBTlf)(B4izXj@=20f76b>{*WKuhYb;uVzoFTy$o9SU$&e|vT7uJmn& zy-N05cQ_B4-#K#9Rh-!4wB9Ju6KNm3cM~gNT*2n6+bxbW3X(5(J~kIb!oKzhOVt{7 zyv>`Jc|^G<%+mx9qBWI>CtOz?8)>12(o4cV`WY|&UTERoyZj#G_HMgfxAt!sy^wi2 z5l!H(G8*JG?Ws{Oo;<}?SE`nL0>g4RJb^Sw0<^x9p~m$Z-~c$D)B25Dt5Do<`VAd@ z)De9RB99U+d^#fn(Db;_ojZRE_*dlOdS$2L2|EjY?zR(}2+NMK8d~tu<$6FEcJRVV zsg4Dh^0oGjmMt30RZ9C|<;p%qbge)y8}bF@Nkj}vggQ2fxN~TAZc_u6FGg)U1gdV^ zVA@D~(3*QanhHYe=jjIuMzNOrXW!{+n)L;IEEgCeORl^U|Ko5UF%{0My!U{_dChVe zjEE6h;?S|3i6MCNgGjwYL0Fr#5OUYrIfG5MC5G@2?g9gbT|S}iQaHbEqP+nw;4Qrz zj+szFJZ8WS78{8)5e6=T*^)J00JVE@Gn_+L1>@Jm1zg5p^#y8N2COM^h{hFWvj4oU zAd%2RShM>9s>?PV2x@kgsP9HVI3W%){5}uzO@k7>o2w#nA4v_EHcC0EN`Y6-UyCTy z?z`aLe6jb#GN_Z3k3N!0w^{-hbhBEsPeHf5<+whSPw2^N(Rvo{ie9UXTluRi`PieRtryFPrs8R$=;o0U)W+=t$33z4v6iva z4rfkX((1RKz3P^9K&zLC3w5Ctg3q003^P4@IW-C-k7NSg4eLeo?{M7wxLW%8%>yB zaMB@}OEydmSo<844uCM$^X=XeR_cqO&-6Aa)a(4|97o7OwJ<=+1fRGAg=Xj;(n1q zF@30A4rdcy=^A=GWZHe;FLRVrWLz~t|5>h>y{mVMD2;dhd}q)zj>iif;pIW9b|e{Rmsp!~&dS znOA?r1QJn}+&t!*py5rGNV?4X@>5IT>MLBu``5l#d7m?vq z+&gzi^0NB-iuq?h=fGtloR=YoyC2%>zf!c2t_v&2_;6TDP&?9O205Zj!P{``hX;_f zRBLCfLzQKLyo4{ZstN_kJ#nqb5j#09_90Hpy4G(!MAE$+t|o*PJ$XZxc=5&8AmsfQ3@X=7}b)b{s{!Ps>-(WH$G18QJ>4E>rz z$MF+k6hD?lgmZHo%9h?%{c8Ui0!nOF{HKoiIUeH}oQ8_bj9R@fDClzb?Py2jcG_x6 zxzA>FDj7fM5713-f}*~Bg(!>{(4dDAHQ0c}V1F9to6>!d|LjG4TPa>IcgtSp98B6p zQ=-Uf;$X>&4)i9|PZCJN^B}r*uNeg+k1(bh4t}?>#zb`DHo@!cNZ7{Y=dD2(J4RT( ze#$X53H}E=m>20r@Tf#$x(N#j@kdjXoc}fmzvPn*xF;e|4ZIt=MczOREWr<`q#J%w zZwG58Xmd9$H}rqx189yu&ftfxvUDJ#Td&-+zpK@8zy_vu* z(OBz-5aBs)R-FA3gDQ;PH|{(qm$C18dw`^!R7UL zY^2IV8VU?USbt$OStnQ%8vDPjcNCy}^6S1z1KmgrI-0OsPn=;*tDOh)N{32##CP-$ zdGaVI8_Z{a-ooS+*XO5&^o5%$$c<8_pUMNZ+V!n-xutcUTmKHQC>Z;DMA_seKs252 zAqMHk5B_rDWMnSvEo>ofRk8rGzh=KrtNZPFzB|uxx1xSnIb`3$T7PQBqgJA?J`L@& zo;!%Hb-IKM#=>YW{pT)oleAqJ^AgVW<1Q}V!ukh5?uo~1N8ihvK5(pmdO>9CMp<0~ z0k?27T{DvU$MH=+Nb$|+X`&UHynw&#WYkrb^I$l`&iz5-^9o1A&)))&Txk^wk+c8C zl~cV49{fU=_BbOe1^EN)ZIm+KqjD+Hua`vMw?S~2>Tq)z-1=U4(=*sDoMJXur2U^&OMO$xvUtMRUeepEUN9Q3>$Zia^)%Ff^1Jk;@OBN z&4jjhrsdi>AhlvaP`opFFw{lCMva4mtG>0{?()g<3wI|<8mG%GQ=qbx`|Ui znsu1%*Cmj?QxO0p;E$^Y-v z5hwYV-P&*z#EFQ`f$H^3FGXz1B{1w4FLalmekT`{GB`nQ5(G@WO#h&I)D$r|+m%jOsN(DYz$Xv^9?&Cjndfg9|mmH@5bZOt8{9*&sj-4FjZ$qnod5Ul(!}CY+ zOBsN3Hk+z0ZZiOwjPmn=?gCw3fb$eIx5gCRM`kAzb}bs1l_&Z?)OZ4ZYNq_%vfd(va<&H;2O#QV<+BbHPo4`sq&t- z{xj8|l`nV~nHV(Ky4EN0eoVbwIwCK!kFW-Ak3D*{_(^^yP}&q4o$oWXs<7liY3AmiiVo}u+u_*ymBLM|65dNFTOV7KFv2= zBx?6Y$#-1(yK=>!AiLociH5Hs{lmkrs}YB<*&Tu-B-}fd?D=s*v|q+e_?r%ap-tlC zaxWT?3eve;`W4UcJYg|9$>F%~zq}S}#7si1-$;PD{+iM4`>b8E`b?5if^ivz)%&-a zqHL$`A}b$AIhfu~M&3;~;GJ@gX1rdF$TN>>&esPZ7DUgjL59ZD2zc~Gz#G`5t7ylw z1H(?tz!QSdmKr8KZxf-0V9rS+m}ys9qf6b0qr*;43cAc&v+WLZce`^KT(E(pgK8S{ zgTC~;yXP%jWW4C7g~3Y? zzds(LEq4*-Msr+Sr$vd^y;I4J(@)2$EAS|+lG+wHswZ5eiE7c0@{iZSj`bb%{pX8` zo}G9#1yMl zP)s}Nivr(9KZx2%8JF;uwDhuty0ev2p@YRV?RF}#@v*F^17%n%#a`CPlOi?z^Vgf+ zrN=kdLv`C{8Vq8&8>nHwk$2I;0*p>W@FzbH_^q!26f4zUYeWQ1VQpHk^T(YIGngc*zCQM#zfn+8#pt<-M~l07ZW5U*!O@HXQQR<{tmec2*rM!pQ9 zQId7SdP7_ph5B}XUE!s0;!jn|EdQsgp8I=ix~~W(%&yk~&->v7r$F>7t7{b`6$TSv zXAdb={SJTrQUTQ_C|@9-ud*snVt@Zv^7BTwyxYk8GQ_?nw~Ci=ohv`?^anABajm*h zZmxULBS##P@_=f{Z8cH@OeVoE=6+>h;(M(4e?x;LSAY@2sWON5RSZ-mmWC-l5Vjl` z3v@h*iC?#%1%{uaU2nps3tZShRtly7n&}I!@S?^$`lx=YtTNu7Xe9nAN0u2T5KgfY zrvrhL;eRz)07+lbqojFZLcIIR=St=we{E~T8tDMH1oGK!f^E0mn&GVXiP0T|KAU97L2qXL8Eip`&P!MmgK}7U%#RRH>v+$v4AFoVRs7Fr?vd=bc=J zk{+-3Y|oR0<=?4TLdAAzT^MUL3-B(G!wsUAJ)^9b7^1~cu}vSGr*DVT|e12cMZ}J~81W!^e0*Xf4%t!h=)P7MWcJ zaNLe5g5-m;E?J+B+sIw^)h2>PVRg;`N=)9mQ(%33scbla6o%86O&WqLT-@qyu6d2A zii0bqWWHjxe>0|4V@aUVyxUs7f zF%)JfO!Ne0A1Q9EWMz8TA{^z01^moCE=e^Vcfs_tIwAuKk}s-gnL&{96b}u=U@Ir! z;RigiD(@C9C@6eh1- z6G@&~1ljA?RT75Yx`FQ%l7evmxn6@tuX}5mv>V^K52sO-1n& zoA5hpF)N|#nXh}v4BQrZT-&`k!N2B?O`A{Fx+JST=y}&Z8@%K)I$myEpzwh^9k6 z-Qe@-_0>s$wjl4mU7}I+n|--3@#A`;@OxSP8ECh1=zR-R5}jzIZd@$vgoD@LU$Yd$ z+>1q-h;|7f*^;LWh|vVKSMYY>caPh}`GJq-*Q-T&!B^a1iH6R11@H!@=p5-b*KM>H zr?{`O%?&V0F1-cr{N!hUf$Y(S9~cQgt2fe^ck069AG5^W^5F!l zj#o5;CZSR>Qi-_(K)YZ+ZU0=xeDp>sAtEf;k>7{pM;{V4*jM=4BQCZ!}=P{QZv**s$x zFfGmG+aI6eMH0=W-rvoW$cJH>Yj=Dn%D+Sai}6Qg9yr_3%{xF`EBf|0MV}Hevr0b?Ms&1m!?o;)BsOUb1ThHa;CuQFbG~P_~^-A@+ z4klKs6~;MU&G(DdX65o&h@=!0YK;GD!$Rx37{29{z8L#VTWeUdbR=!85o%mB2G>bk|l`g6h?$6!o*S6`fM*tb_E!ykCVM^br6 znM9(v{IM*!@V62;YB;*YaP?bLy+mH}I$Vfzaqkaw2@)dN<|IgiEpt?5;T6h5kTaj2 zd~UMn5^zx^E3?+3gxlb&*6yjTK!yZ`KaaU_xY7Lfrrkl4`k#9f(S&|N%J~UGIQ*_Y z`#Z8VhS(CA(d-h7VxwF$$NZ)aeTey!;Bl6z5a3fI(hx!DL|5;|BF!h^iaCSQ(QMDy z#=gq!S&{t%(d6Y1^)h~#lWg6BnS11MH%cZdO|3leGu|ZuYtaG^AJ)1vS@wW5uE(n) z8f;DJ+dpX;GLI8eF`hMT`?{QuN=qM{g!==k9hrf={8JT{sfeKMiM@bZV~JSAK$R3jguwl-kAvT$<7jIAuI1@BTyt7{#Q$Fw zH4uA$$o!Fu!5ng+hWfgg2IkekW_xTtJKC)12|4Cf@Q{C1{;Rkli6$6ubm~Zk9-y^u zVxbLpVi1Cug$cZrMU77l%gr-Xy#w1hxtA0<-WwCw4(bP;H+`>-;Vmb#_$)XX)Ram7 z|4q7nW~s^%N66_Ecn8GV9?`ypzlI7w-(&vRW{*y*Bn_5Am8R-Z<{t~>SN@41(6_|* z{N@E#32knM&Rd;6O)Wg+6NdlvvLpsIOkPm(UC6Of1p&hb+2w}U_dl@K&g##`JZ0OM zTGlGHE}9Q93w+Jfe-(I#oc4oHgi8#>tTPB<9T(LOwEnaRVA3H+iSVtv+`iAfxf`ZW zRo`DY|L-B9$$nZ|PL7UDANKSD9eO-t@;dYnB{&URFsz=*4lVvy2P|8$C1m|KwP4Y= zctbfxc!~-#%T|0xqN>=+AQ8{h%k{E^W3%zsuzcfzw|sF9OVhnR3CA28wu#gGUC z`;B5Z&FBp##m#E%{t0m<>KYpN&cs|i4_0SZ(a~H`Z$Au2B zT2#WR{Fs~XK}ITJi7G_D))8lpoCEGWmYK9(eVrm%h)YH?7i;D!g^>5Rkb z2RvU%=^1YB1yfPQ3t69+C-cuO7Q_R=p*Cx|#$NH?7I-iH~Gb(koy zz_4p}t+E)!APcvEDc)zlM1MOC3oKbBBNcwLeQ7Ec^u5!dZ&ctXIeL7-&1X8D4q!!A ze)o!Ay=IN^9**h{b@QRi?y%)Jzhc6W5gI6>E4_+-^i}TtTXlB}rrL10++8L>Tu)IQ z<0)K^|9-CcY9V0MOu;Lf55PTv4A)yDYZ+J|60rNmH1TXYJ(sJ#FNtt&B?r4H?Lj24 zT52h(oR9glsx8h zVR25Q(rWGCiCU#jy-@k5Q(uRD(a@V{6WpmtS#qEMuzy7zJtf^~!-{e2L$b=ZAUO>p zq;c|3mASO$eRjZ~ee7nf`S26Ll@K-d`wHIuJT@%-FowGwpFeS%kDGUBnGey{Y`y(u zIH)E4+X8Q%siRij_1q+Rx(Q>lzjXoMW^SZ8)dS~!O^kfelkUGE zOod2>D+JW?G4G4|EiJMI)!gme`=nOx`&CD=sMh9QxBpf1%d_juUtU^&xB4nxCWliY z2&-)gx2-RM1d{(dK;JpP`Yg~-pK+xIveN$m`5yBK{r8Y!B%lFZpdF7&m7@vTpP!az za8w=I)8Xo3*xf!Kd*oN&6gxsoW%a=rf4gBx&3`K(?e!|7j@a>Fy8ye}cOxt%Rb?Q&s&NppH6XCMM4}Ar5iH zKS+8t+l6fk`GgsH-^)d`os|rCkyE9Z!fg<8V@ILI#w2sKqXd*PI*5|e+e1!zRy*cx z1D$P%O>}zRppliqLwJ9&D$K|3I@b*G&u9bfq24b2V_n~5F4uN%Igz*3d>`FE7do*k zP78{^Yl_lhuye&RzuX|1SG3*gUHNMn_anxrogVbY%0?TzY+I?nj@IP`!-g_Wo&HT# ztJ=v~#JPO8FEtE6^KL|7_Oz8Q0BxadvUxc>u!F0WLc-}ps|~#bq{f6lurj!?%Kt!N z=A4mNx%|E}is5ErN%9}UK;_Nsf$<Ix0`cLyEh3PiYqL0<#{$x|R zaW`GLy~*M3ACFJ}zHk4lnx|~b?oyP|$0b%XRTIA@E+t5zDG{tV-XI*uyUTYhtz9}& zU1jZCUJPfm>k$ONSB%Vn?nEgA&MbqCi=gVRAkOF$1J@CJoCgT}a5BGIxGCzfh*$c8 zM3wyb_zJ!^QMlPqJKly1Yvuy-#TiMx(bNnH{TgD2k*>2L1IQ9_5+|oD?;mV70@3|d zZ#tYmp#+WK9v#i$2z=I%&Ag_if)T6nyVqZ~`Z;)1I3_>v%FyyQNA&dvlqoBgVIq9E z{CMR)F50CsQ1f*c-XdaOk6vfNrZofd^i-mRJ9Tss8G!b?P<0jOsrieWmii|dSC~@&h`nT9IqIIjXpAyZ*&lS9#n%&1K8X+0|~vm5p}JAc%JzY}(o15J`+a(wIe@QW9{ajsrqiO*ypX$j3iwMP2wnS9Cc z45l04f4onzczv7%^;n2HV#wqi=wO2w%R&0w8dA7qePtXH+92uP{b{M0(%EW2z?=;hOb`b8aHf$AQn} z#<`v;!6JzQ;W9<^h=Jl1DS)I|o@`(*TRg(*B%5FnUt*hKgkH!bYOgu=OkiyEtY2UF9Wd0Hd?@lmDpEUx)&|AdQz&V^S_%7jCy~mqcYoh4+1X}x zRJKf!SKJ@+wU!LWisMFMjpG3_Mwy)SA&PbhgW>=EX(GrAawQNd8Oq;b3^xQsaX_oui( zPLePkE@vBxI$$LviexXi$==Jm1{}51;)ar;SLrpI+o{8!ER~n2r!dA}L zBUgb3Xl=PqTVcU++ZmpvE2qlD8yZj0l?(c*84q$)I^y1Y&t^sp)FDKQiV<^nk>BB-E(s;GrK?WpKRLZ4uA!0 z3#R&lTL`X`N)}k7<&({~(Qc4%Wj7g)!Yrf7P4J@+8e~H6?0p9w?4U|#&+;m$hZh=s zGFApzszDEH%;PDZd&rH{U#Kl|jB;98GG*%|Jdok72DeJTse>BX|G`cdNAn`=kJ6J3 z8^ok1@G+PrbV=hfdD_bC9rx%vxcvFyn1N)B&Apuk^)Eq>R1UichZ*D66icIuX!HmT zGPrF3zXK~n%7Iq{%&Jf|XygWrYDN2*@$bL4absPAF-6Tf?54vhTuQ|RSeAbG`^wjq z*EEX-6*HR&qM!Jg7eZ^$k3Zhb9<1nMT6#+I7YXdV&SR^B30qPjHM&itOO|XN${i6@ z@DpL+U(K3xEO+yg#hT5?%N(?I=oi(4FEv&(o{IXlnP(cb2jzJyuo?Y@9c?0SZskCEi7jXUFF-2_kbF|&4E4ekt$^Oj=nV7i4aMEl$ifuO5E=eBs z(S$t~48O}OABQUAi)^EHn_lhO9~Y#KKUcnmo_Vocl=+O~;oSLYO_p2*5M5^VxcGOG zPQop&Mx*ztC^Fbq4>Knm*jHjkF%P)({RTH8f-v$7$2(5SY)pMcS|+S8`I_7q7PG$U|6lBw zg{&M}u?MeV^ZfE7-&MaM4>ajkoP|r(LYpc38@OARWbMNG)M+MDA!jZ#uA6}dZUdvD zeb(%a%Mjrf;F&+@xSL4}jiUAWtQBB6ty`ReCAC$cX-i;cG4kZ?jpeT5n+)K`sf|tp zT(|D~xHo2S-9kzaqmYJ0gmhX}g8tS_I4@F`*{1LI(9em-s@Z61bmiW4<;szl)n-)@5`#IJ9Z?N7e;B`^C4V8$7p$oxTcdWg$o{+h7EpLYwYL!Z-fi7FU>o-ztYR z_g0xtb>H`Zhz+W_Y;@77p_WH=9C(j%or?b8O8Q0U$s-!65kl~m>S26`-no=so5AAl zDZ!$4{C+W=*3z6OqanI@a>8b6q!xNR`0+`ZqA$)fqCDSpzzWX(mPJqRuTuEos zks5@!&Z!=Q3iXf9#I!IK(M4g0msL}C{h)GcQjf!5765d0XnG-YPV$C~V7g@=pyU%RN**6n zrfRPLI-p=L@!)#u+N0^|VasG>ntX|2p-?{eg=ku!)DO2KBjN0wdyT;nSKS!Ic`Mqn zTkj!V^L5c}^w{e1`Fl;WcBRRn^X9yO@(4a%6M71z=WmXyb-5wtGCB2qEi+TPU?l$? z_jn&`2pJb=hb)Fwie|r0J9fsIv@WSpW}+LOZhYxI4Bz#=0sySz z#Pd%DV{idbSpcgWs#ZB~wfx%nWvfmWmI(_sk98Sgei$SvuOD~|XBO|mTzWM2smuts zd{NHo(Foj_Gofy8GO|j^VyuzQ%V&q9``Yy|=gMazZ`rpGKE`c(DS4$Mh;U=`o=&`i zogtDbTat&evQBLJHX`As`_c7J#SQ_DKk?Y6dK`mz!u7?zrST!-jPXt^1h5@DU@R-{ zK#2I1M|gq-U(2uQV%1RY2JF_5spriZ%f@c(Q@t!R&Tx38{=34<-4}qTRkcg!>m^^) z_570HC&9-^`2bXL`?EtQ8A?}_Kyl^^s+5lOf4dNtde_+SPr+uh->}~uI69%|(#uUr z9Pcae6)%Vk?vfMHC&4#Ze`;d3JSrwlZ$y8nd+3_G0G0?_Q+~fal4{w%nG}T@Y4x1) z1TK~{=FS;*re zgdDl!c-QXsucjiXS zr(hPf_ZMHsh9w2UI5kUU|NLx{WbN2U+l-}%B}nUKR+fM(D@UU1^nzLIu4OkX>{kv7 z4cC2i)AOvQ4V8?V&K8WFG(V<&ZTX?kG1X*#W<@H@8!U*sac$=aJ!R}uNATqYq~mFTWhb(JUM*tF>K?gZ*(F#T|C_VW2gAr z2iEegHnG%uDGa-JjjHt3+C8Htsz2|wNjBQ9f@7zPMwrC4Y+j%9JY*4H_}SBuNE7yt3$6lY=y4Ym`l#daxZ_%F?we6lV|?V&tYp5c{o zp{Tq}E<4?&*$6l{T-P)Bq|PJ>CBE93+Dyo9>BK8~1D zw7~5w0=fa!!i~$Wq+K+Hy`9r(g2;_nLr4ESdA)f*Y_hKWH4(;<-u+qM+)aJE7Dlyx zW*bTr8Z`n}rQnvqmrl>YR}k&><#GiI6L2NjYf~brC_*_9Ax&>!agCW%kNaq*J}Qu1 zCMt4Q%o-MX{%zO3cuM~hcQ?{KJ|=KgU`W5YK*kHm^v>_d{Q?6Y975)kS3z@-8(TT! zzi4&Er%g)>&s(yuxsMuVt^Tq-1!=I%E9~gyvD(YaoxGYb!+q1sDwx-5p}QjmL@t>z z)uWTIy#X(z-4IUi?>2{Rch{(TyYpsmf>~oK{r9$Spp~P|q8*)5@7!olw>Q5-e5ySO zniW(?o|-O-rAt^S`2(3}H5^iVjL#&rpSYO15er?y@j4-~P{Yc#>7m9P7}r&fFW1p3 z)jhWEOoj}j8bhD60$x$^N^d!Qx_tKLmq?qs(LdPArDy!-xpMcnq)3c7Z6^bBG~XzG ze*Femqh?K&;IX+w{e*s#5__+9#2bAH-hcfiZgvtWRsR{3uTP;FEDt5k3 z#VHgd)Yml7hnO-{wpUU?D82}LFdGk9{|l<+ub71MUxSreI$I3o!I&cQFMRZ@O(y6* zgk`g5D)Rq?|82E%c(<-=qP4}mGvWItIA0h4QLjF?V`>b~u{EzcZL1@}fmRn$=w29} z`{nJ^9VQnjvk%Cw`kz>_HN#1DabwUR4}0;n(DXxrN?p1Xjc@wu3o9M|1h(79tu;JC1S zk?O|cuHX=Lmx4h+ny$QcxGHICG;DO~Kb%)a)ivM-Ce~L}+$iPn(Q>z)94~k@P8+|z zn$~gcQywboe8$&Y9=BWIGtl=bAR|X2tmbV(K!vdO#N#1<0C|iCl))}(a_QLLjXR&l zpDCQ5I=jDw0Gn)jb+1&p>!i2NM)9xHtkj0GIUkT*9uBd zJ6q(5VlYk8teqQ|S>wB;I3H-Mk=cU?Ic2<29K)+zEPRrc8?RBBsc)%4=VYQ0B3zJJ zgU;XdT^NMw%jEv6@nK^dQ%X|IUlP3(@GwszcdlQJ@U7oRnDKjNGyL);TOZ&Hnf;OD zQ{MvGLwhOOXZGL;%`%se)u`>#o?3;A&mx>v^hd}tD@|*CB$jG3nzv0N^A58@pLF#- zq2#=;tHN>b+!^20H)P6|{CT1l(WDtZ+K-M=7sy^2IzOwma~v-~r@P?dLkGp>OKAai zIx$Y(TW_@@TkjYf-^lP_8@CRC%ub2phxfuCAg#oEKHX#j*M%L7qm^aVFa zZ93P+31q>W3DDx6l*xe8)}%n25VZujGc^aVdxNULTYu-vIfaS_Gn+(sIO2{KSL&D7 zR-w0M&YGX#41VcD_0RD@mZUYtjuxknKw=OlS1?RB?_4QHMg_^_{MMw!GItY|GR#_i zYLiyy(}TiR8K;ncTK7p<7JIaMIrSQS%U|_*=&J+4oJpSG60epHWknC~XhC zozIpi7%YAKK?%JaUc6PMbKeQq_h~Fo?T1y9ftV-Cek43$+_vr<)x5{|d(6={?q+@d zb0BcW7c@u*PcL(uvmciS=SqC}CsIp>Nk#`x4HAG7CaKknBi*G~gV} zD2-3~W<*RgI=;F=g?gIiEwVeNDZr&Rj|kseI*YCZWpiGi6r)h$=AT9;Z)xMl%AZO6 zRaOjSTl3527!?l9x|Q-QWy$RIpo+Ysw2NXqMI9xf+?|`!BWCa8y}mVID9yg{PgpRa;dUz3S3}^f1vFuP|DMT^m*ydzq15+<&djUDq-8cwbWNU;<`I`aly^~48r|6G4OuCCY*ShOKvwV$QPSaY` zx2d$ZE%?y+xQz|s@u~7~&h8&i=|BJ7SGPFOlV%&iy?l4#y&QVHg7nELpmN0~Gv*cF z)Mj@ySra+Sdn-uBQPQtVX>4nNuNS_5Zz8y7qY9nXVhEOF_&P!V(y)!uz`O56Xyqg_ zl=`aQp%7WtZif{u@Jr6^)U4smEV9Q%D9kBjK}Yvh%=~?ll?0^ACXJ7UB|{R+gO^xa zY;_C)aBD`1En&nN0%<>U@49d?$a$VF>8~7hbut<}J5R&`aIs70-lyw` zbWOm_5>-lXwP|dx?ezn8_x%&$9F>p1fBbl+^tk-t&9~iAg%zfp)n&i)o8?|-46k1` z_C!m55Y4&92Hvo5;2vuI-cYnMWP=GU-9181vT#=M#(+fuu zqr=aBP4kA%u8rKxmQ#Zzo(qRaJdfzjdsKJ{**ZTfQLLUUr|yf(=a8@9 zV)xg0>5{Sfj~PewIe=~Oli&}ii2Pi7Ve*ZsD|sUq0fn|q#}J8s<_`Sdot2rpK?bzd zhKDrx19a%1>9RVrL5`@KqqJa|DKEY5;-us!15HLH9wzcx3Azx>V@4<4>)$DjyHl*+ z&%iAljlJ0IBfH=Z$+q|icsmd?CqxpYO=C`}EZmd?F2umoUy(&*8g78sQ5>GLJ=5Y8 z<%A?R8>KS3%v#D!9qr4OUs5;#J+4kU^OS!e)U+wpJn`QgYeBN2mM${QCM^nXXD%9l zIQaZ{FR7hKU_aTlmPajkV2T_(*zI-(CI6TOoqpNtwND=Xn8Nb`{UX;U9x*E-6)TnAvtn`E^4^*QQ+N7xRSb{z;FTYt=qbXL!88Ri z{l~G0Yu{xB2;l|#3eOsxCwaM=_OhQ+#|XW1n3Tiv&#GVKHFGt_(S}7oW%saTlXAeSV`pug zGH`tCTe59&y8c_bRo{5;*RNU~Mx4Y6F!4FpMOZwa`7pzDSzYi;I6R*3Q=chN&l@>l z^)FO}zjX@`xXNG==j{#Xo$F%K!t@f<^3#zGB~+u6l}h}tdy9m>qU+4&a;I1@?w(eg zxhJ9>FF?EiF($Y(_Y(E}u(Ivmb^+GO>uQ+Kn-I;NzNzjW|9m78R+6tjjkCPa6PzU+ z@{zo7)zPZy<{S6^sx&{GwnFWCE15@K@46*EtD6`DZ>o7gOK!xy^DL|tsLlt%4K)$Q z>J}eVFfV(eZuAAB^L(%&O)PWfDhOp>z~dEs;^Rf&`?k{D89Ndo!~%#|u>eepf0n@+ z4A+mj>{%jwl?GeQG64_xZ6T?4{TWu@RTnGqwi$l)NMj7|#d>K7byMr!cN1xk0`^JG z^;D0eiw-q-T17X7>0T_#?YWC!_tkli61o-PBZu_RR|K>Nn+?Uh(mJFSRrmueSn!2% zLfKjQ`z;55tPyG-W%IIGeE=;pGJKj)p7zWQDley6`?Z1{)I&VSCcpO4SJZn%U2OIX|L3yaR3 z1FiEBu%K=r_kkKy?=n{x-V=@LYj+vZ!p2C~s=SgX z;@2QUJq}o&^yYF#e>1uLy6SeVKF{+n3qw+9p{gDy9@aSJYK*_+5Od>;|50?_;cUKr z6fd<&ZAxm7qD4_rrL7rzZ?RWHJc`;Y)Tq68sy4M^MQk-%v)ZI~LTme>TBAmXdh`CB zKa%Tu?&r>Zf6qCeqZH^#*PRPR(e*7)iI&(WvUPii#@N-qpp7VEjWA`BR;-mms3+|LtGq#P%xZH?<*VZ zY}Y?pYQ@drwU}x0lk=zMyfg!l%x?AZULCg0R)T0|zd{k(PlqTJN^ID>d-H3|_VZQ- zQ?|;5+?=w5@zy5OAjZ7x2#iUkE{3a0_s&}1o3H+Ma`MiYELSqW+eNDh!_rc+6Rh;1~DHZ1amoWY-#H>|c&H zotrWK;+}KDd6gt%9^p`?>Jx1tVfls6Ud=Ym=S*FUy2m?~G9Yb!NF}wnP;4_8kuA(W zIhLv5Y#y|*PJjwkWU38Oa^UYvZkZ=+_4ke+t2b=5)m-X- zaVA!)$cV7g6C<~(cSGK76c$9Zx=S6$DB~$yxAFP!W?wS?_&P-)P~yph8_Nzbv%W)7 znkgK@>CEGyQ;Za*-TpNEwlf1Oux@nstSs&2d)8KNz-gc&E%w>Y>iHOU4b1+$I%xmV znOd6S*NFu$^#>XtjEv*M$85kX*HTd6d_N0)K?B9>0x2t6fayoqF!yzRlXG{@2J0MZ zP9j`N1NH3lbVToxAgw0Ns!y*@XXZK9t)Mh}-JaC2+P%QF9~bFmKy$P|8be_M+b==tMj!U}}t z*sSR8hUJH;Vcvg#zz*E1di0SHv@0(RK6KhJmU3f+kN~jjg`ZTcpUd(A;uUe&_-GL0 z+&UhPlw-%|YszX3a)+S}83zpe<=S3c4#A_PbmDOJC zQKvmD_2y$bKxAQCpJ;c}!>+QY_zOQxCucmj$>U6OGUw+wAca=khPlmTkzyg?5f|ah zk$`NY=j6BtI_)V5($)MbYyiR9qgu86cmaaEz#^0$4tCTHhyT%)4floaI>o%~#!}se z^zrbn6Bw$#`5`GTH%KU zVj-+9P5RPT0QO)Y#OE5|*~ZrO=w#AKerqKpXHY!f{ij6)3t0OJ@?+nPGfy3m4078# zA>K#sfT1EgGL^m;kH6tCg6`<>a51O_4!5Cnb&qi6C@=i+I{RNrHe+`CJS#6Dja$Z zM1uvI3SMNoe@9S9gA;uxG{1TWDzXCKfBE5lB_B9->GI> zuzf*!Q{_hzJ5Ms9>I$y(uX7Y07bY6#dl*0`WT9r<#ADgQ>BQE)Wp5GN4djq;ZsYu) z(<7&)DUM%Ya{paZ|KS9zGZ#=POAsBY)gp%4+yG{UD?Q5so$UTDcq!BgAKzEdZ8Nxk zN`ratjNv&&wPrxx;8ySQS0Fh0uP@yV@QBM{`hm9XiQ|UEf?vOjXto%#9WdV!y<>+! z+$8ke0IW=`V7)o+>njpCB;-vRBv3c%&Zu$eC#TL&H)o7%817W*WqMx@HmH|erssB$ zVRYi~+if2{w#RrUK%gMZ8mu7(a<7pNh~>+GjF&e(>4X0#;sLMxG&OGd?d(f1yqBDi zO=JK{{oBL|<~o#wyI!9CDcI$=Bmo8JXf}N=J3rm14o({tteZo!=l$tAmcLNkK6$_1 z{Oguu?b1Dz$<9~HiCKZsoxIpqSS7d7moyRmFp307aHi{A?sIG}mx@b>ZPUhv<+3uz z`|f4@$z73!o<01%BCHcD79P^G@vpZ@`!9D*_}{W9?r{s_xtB6tT1n?@93 zJW7s##G2||z8L=VQZSPI&1UlEHw~`&>=#WJKJiDx(khS~t4kZZYGq|reG?6oD*7kS z{uE93`c!>42lrG);hi%EMDn+amzXm0b<6#CkJD@Y_?Y!%k*_D^R(|CQqa|i&L=$zi zxwbg07ADMYVtqaG6dgWv$?M!AB+Rq82P7|Qf~ljf5kqp^gk#}<5Pl8ta8@;xx7Hgw zwS|C!*Wnn)9h$yLK4(Ms{JX-k8BXh*`fY)S zAcYBp`@qY}=?^B9gqv@YZyuS{GQuedvl*#3GhNx}GaLQzT`xQtrqYk4xd`T*MlY~a z_Xt!=2XCo4Lu#Nmfqt^NR`ED&=>RnlG@8Q@N%9{C*fRpDx+5O-J74AlaU4_4oKMFf zY7}-v;RdpJn$8vk%)ATxT%UKETyUwaNI5dKo5PQ|YzH&Iu(KOgt;z+7lnRwi+kxdl zJy_R3V7ecD5Z`cr{2EocDZg%|+fQ?Ue(13-fsd%b<71 z$h%-sZ6(uyd#cvlgeVLm{Cl~9d|d#LR>M%s-(Kkj`tuIN{>4!iCWMwCm{V98vyNf8 z(P`~tm7sdLPHS1Q*KFp6l)Ko0Z8Xm5;80jy-%1o+9Y^8Ihr(fs*YK4YyKDU z?9q=<gZiK2i8&c_BID=BV*umzv1UD0A@? zVnA^O+Kp{XOAtp@F=LkfF)iWi4+P!1 zb$p{_;iu60)v!=$TT0DA<9vapeZp+^oC>OzQY2!;v!v2sj7tV%ubC);d2iqhV<7E0 zaX>E|MS)K^;fD8eU^Ep8cb|FrwrfOPmyYKa_FRJcXO-9Bx}2a8QvWm~2%h4PS*dx> z2s}zC?Br0es*of#UYds$)MviJHxBiNz9`kR(Np*!i<`$}CA1i0ij*;Pv806&$p{3Er~M#_0I@#y zn2rdHsu!73ShEk(#3?RRzu?0^7xGKqG%TX*z!G=%Zx_eG6cfxuU||GSq&_ZhY_xhk zeD9uFQ~gS}H;so*rC*W{$zw8OC-G_){;sq#Q^*|CGMTjOVyKX8_k`|aoiN$%$B*#D zq^_fXld-1HyN!(;^=u=XQcaXagp;bC{0sSW2C%IuU0g6DpWv+US1AKgm&cT_r*exW zR?UWnh7XIvD&{9>4I9L16iN(#1rrV&qf~1Sx26ifi8gxw4ZJb`mG^SjK{T>huqi#U zi;*wWrH=UN$wp=1oA&hNQj~i%QS!#icM*fbtvMJw(d9g4VZwUce{x4`{OhUiuXPR) z>kd=7?z+=mNX1>1{_vM@<>e0fAdRj%mn_iQc>DZ}Z>h_5RP!-)XF$tTA02XxY3OV9 zT(ahepPll^GJ4a|hBX&O+9TXmOKg*e|whVBcJL@^m|IFD3 zhipivv(H}b2(o3Km~&Yt${6I0SLVh9X5 zkGX-S99M>NL3qk@jQb^>gPZ*8pU$2iC2V|JJ#$jk4^CzwgMMFZYG$;vC{tH2|N54x|z}$hiQnAeK zjjs-9v2`OajL>SRB(Vh#0Z!SsZ`6q1oB$66huxV!M!?_TIcC})b2&fJ#{PHZ(>#mGPpkG)#YEaEzCp^|P=|5U1V&wq?M z!&|;p0tYF2Glon;2z`0Iwro)?o}TET+qv{BEi7{=`fb`mUa`D=PI-BT1n3x;tMpSQ zt^02bRvG6~#lsNs@3yVdSIEH?Y)*E2?vG=8wS-&?s*_&_e<3=@ANlwWEh41g{r~ut z4mGDeF2rtkhr#j4V>)l8?XBaW!DkFk{C%IpM?Y&<_dM;rzcR3i5z^}LT7cFU4b)S- zYZqhTn9|xvwDcat+V#jK9Zn{lEveMnnU#uu{#&PuEH}T&t%5ou@qgJ6+b%(?qaR9C z`R{JPF23xmw&Xg_TZzwv$Spn3T6@vd_AA#!r99#JWd%83vcDUasD+cD`&=wcdF9x` z^jN3LTj+aoA2erPIwvO5Ui|N7vx!f*^r?f~Ja<1!$CLy}*zxbK_k`%R=FKYT9`Zwp z<1-?Z@c!%l<^#Lg@fBpxy%$w}UTi+CDy{TSncqd<5#`W4ABO1L7!-S-{Xr%_Qhrz| zx0&fGVG2?F3NtJ%elSd~7J3D=hl6mO$B*hAJ*IzN-2E%5=D>T);JU7SYCi+l7 z15AFOOO5zv>6cA1)@;7~>cj4164TC94J;uTgLMhyNLc#ALHf5OU7iG62Qa(B%C+}X z9=kx_u7Y3itw&>@JO%?wP~yoAg4kdaH82i3miqo$ucHgvlmR*Gn<@vH$L7*Vq|^*g zn-=(FORB=Y&a#cOlH%8*FL7u5t~5d<0Cnn%x8t4L_#jzc;EjjL#V}lHvckZdG|j5i za=Z?--vnsPN&H!1w%eJllr?yU&SVb^mq!>G#MEMc_R0#f9@%AGcAvv%lreD;G6wCv z7ahad%8X7e<{js(xmZ;3p(yi2Gj6Z-7>NG#nEUUg(8-5Byq)N9v4QyO_M|5_*AISm zk8&-2irW5n!K+AnjpyG%>7D+FUl&`h5Jt;9`qHZFPmuIKt%PH!BErva@WriOTn2|- zvFU}4H%Q#t`7R|Dq5Ht$fuP|bC&b59eQ>znX^}EHn6al>JGp~-49QDf^kHY*^{5#6 zYQpBWtxRD->1Tn%%WG{`5_Aqx=3F7!_eS-f%>Dd(grW5|Wg^_o7}Ut+WOh!vRabn{ zcK_DL1E~V!xALyHMwTb^FB0>3J$O?nLW{hTXawg!nyB$Bfexi{4>S(xOJjJNFVr8# zs*tCH1R#SXn&GUFfynbHh~k*uCI}fPaH&7NBgL>Dc)20=@1sdffkZkVM8vVi`mCB) zLD1osQX1=F+22OgV`V~p*3}g>4 zq5c-(j5!Y5@0!lbLcFj2sH`cgUlM+wut$b@6pA@_V^rIU00TdV^dW;OcT@0CY!kV6 zk~{^${$8a4xXvpZP=fdNGXmO1PHNzRzW_$_aq7eDCUT z2)V`reAR;9p8l<XgC*!{hq|>_cvZ-?J3xS zzm~inGKr8)H@rtP$OqLA@m@sG8~s8qq8Ea`922-PO;u7CikL{sW{}|fXt@N~-Jm7X zN4%=rQi+Z zh_v*QMd0UIhjJL7C8`{@yb@$7~nIsx!GTS<9H^yrGTnD8o{Q7(vba#A3%SWm( zTwr(3ygvBFI-S&Y5Q|Bn=tFaXr!hjCt`^LHr^&uwjILq?1}(en?qc+OXSzeGp4 zdggKRWr59B`FY_4>@Yrrr0p5-^`RkQx=#DLf&OYRU*h=B$9RO?)o4m7{~R3C`qu0P z_VOmcS_ZnBO~a2q7lET_fwaUo!&1G=!6se2F#UOiB5F#Eo6AM1GfQ zf?ZwXZ)Ox3vXn2&dkC~%M-+9N(7#ukU)bPOnuJyKj>mF4fS)GQ!|xcMl?yz-2CTzg zKp4mIovhh!S{>6D{K}Vktq{iS~2akAsYvoZ`eJ2Rr`xF)nyWHrg?uA zOGX&PqB<2x4pKsyDy9UBgDmk9m|EiUKYJydC?FBu6c`iD8-QPPrhd$GWrCfUbN$Tw z$tt1WlV#Ul*54?t)KM*;?dd$Qcs-`qlU;vo)^h>^y`4gJ}neoxkZs(Fq%0!+$7f=Fc6LYG(l@T%>j%sooN{tp!kGJcB$fHwwMwR?=761 zPQovW8;4WL|C|lvM~uS5|6A-hCvJSjQGEG1esSvdYLK>GzIkipB?Zmc*EP8hJ9jmE zE^?ycV{RrbX{x@k0Av_H`&j;6P*mvBuAg>B(lcE$wSAk0-F#OHKbm+$Ga2+@^>t(v zccm!XJ-shUd1@bPxvz!=KYPGY!(}Rrq%iV88uqpZkrc4==F_)0rT|v}+?5AHIC}Z0 z+)S#sx{D^mRN~BkOa=aHVz9dfUl!luYB$RX=O|{hb@4%~=<*$s#$yCc;(fbC^87L+ z=*8DrRbomsWY|DD=9w1haxR8B-5WAYg}~1b$-Fu3h`{jYAaX)}o*s219G1XAI7@>3 z{HHbB=z=K`6;|@kZf>AGpwu^8;R97RY2z$&U!NCC5a20IgV|+G*0vzn3rQ#p4<$yC zsDq_y#6S+ff6>VXQ^!a%VQE2uv|(wA>BA5pKA$c;#oKX|)DCtk z5K~fDlb!UZZA?U608cfjfHjLT77eZ+%5S}lL>XRtx0coh}OK)wwOkZgmM zDVOA>^|)7(5Wq_TU4>*z_S1f(FjJpy-!3rW3RWY!P#k$pfb0G?uvZ#FIa_pGl?4~ zcT1sdFJ66PpdS(w`__OPGmo>cPl9^!QP>megk|^e;4xJVm>xeQK&5~4kaaSV92dgLo!P0 zsqY1T|GUe8J%YEJF2i3~QB`>wi}4el&d4iVkTgRCJ8ECQgX2-QWxOF-68MP6>dY%% z1x*1FKUT4KhMp?flHWW}Yr_OtCf}*?p)CUmPo!%IE((BBZBU@T%Sz*#K?Uw zf6#TJPi?v8lejY^tsCW+g|MqNDW5j<#|{a{apA zKNeO`HyF;p%V+6!AKTz)u+HDXf2o$H9LPYkn)zo{cf|MGyJx60eW%;3S*PI(d5Ru| znh2qcteSDqq@oW-ThxXZ@DwT3PN>#+$6gtY73X*-drveLQb2j|)0-Z6(3-0XHWJIm zvjh$z`nY_CFngx>B!M}G`OXYT-G3E;>5IEi)N8l^x`d(Z;2SUIU<^)78sDZsntn3r zg>s^~1`hvjJ^zo-6=%s<-t@){b2@t$h=#n%w!Wiz=S|@hLeDFO48p11J#`Z^1c4GQ z4hL=FBSE^IT(OQ-V?mOAn!c5RRSfw$^ktyiyz!7MK$&n{{E*|zw~p=ybc4$qq!Lb3 z0}`%wsxnQsh@n1Li_HFu@1!hpF}u?GmMeK6?R4)c#}F3}lA@ z;Vxi!eh9#Z!|Gvqyc4i4H-VlKG(?@q;za@GOuRPJA!)uL%BOn6UTip>gn2Ao2$G=# zOan6(AZDOfoNO z->!JP4m^|C^4{=fN!_w>6x;T*468_+v&o_Lqx!YDNB5Bye*NqHdipu9sMmCVFj>#S zptPCwerjHf-%@?nkfrcy%?Cep-%I9wVF=affTWml0v7B>?;4ua^MB3?FEFrr&zcJo z-aUTBUt`Ou+AoVKJbtOitwy%NBPZOArGx(5 zdNG@(uueQJ=3eWV!|=C%fZKfE3Zh(4A(_uB%Um#;b0*+Q6)Zdifik(~MUoVqWFWKnRAUnDV1o>=F%z=RKUbL?VNysSpFyF>^%Hea;J> zDqL_9nq=`;hEU)AZK~`*A{HyyB6&t&6RUliOd&IeQ9ThAoHZR_r@;;jv0+mnto-Y+ z<{Ad5CQ`+|-gfVx^6ffz_Ty(uFCpXF&s!&?;dx#-gc+^OZBBmYZR5R;U)H}^#J6J6 z<-LG78A`VCrqAoa!AQOGH(!A7Po1)$(HR~lqr>vC^IA{V1KUzH6?n(qz8F}W=J}{T zT6BDY>l#rH0iyJ2`G$mQ$YQ4D0I5*qe`V0D6l82-k?b6s3_C@DV1sG}*0X@4i^LIl(|!enkEu8sGwQoz(Y5P@?&40~kSq zlXcy4GDXP)aB!7gt$;NZm_5RvQnDFIY9+4pMBR!@U#f{4VhO9W_0hupeEj&w{hf|A zVda@^2h?Ex^D>rN0|X=f__z9Sr}Brw@4NM(-1m#aM$77*@#RhXEZ8Nfo#?6%^ znJ;`8p4<+@in0(hMPrJ*EklxahS#`k9@cq`1-c&O<3wpvE$Gr?>=PvFGUvD)^NtAG z20NgjhEGVfUrKhMn!53Mp@NloS3`ATO@Z!@o4VP?ded`$(*W22A(U+!C*sd)w83hyr;Y4GIbOx8FxvJ)NoAz4Lhm)4M9OwQ zcJb*x8POWE`yte8j;@3OYWZMNOSI`I6$TGou+j1b`;N$>ZxtL=7zDe%fJi`zHnEVF z1BOqft0NJP{b3+7fFGrlp6g;=pWQr^EJb)wB&P-jazOYXC2rv4VO`elo0*YDM&N9z z%l13$zdSaxsO;n^WH}ESU1lHGfkwuf;NHny$yq z*n&T9>S|+1)xQ43`??|QY4EV8HE(bpv3%p5h<}IUqmNHn9WixzNv9@72}?m3njQPi zn>At|?Un^ncSjMUTPU48_SbZ=Z|rn(q^auyKW98Ll`=O(W(l$>l6<$$-!8|wl2L4I z+h@B0O5rC|AiD5R_uP-0sg<7m9jv``9DZ>7%-mwQX-F+0*e}TNaig?NM4B0fwk5Wy z*`?^&493LF1yMO3D?cRaV9v$mNh>I3#L0Ah-vy$!09tZ7(2r>{4YYl`n9hJSO3h~< z%5SiMd43K;(g*&R&j)wM2v}<@vFJGG2n;iUoUZ{_t(C&H2DEi@3FgnnvdOG?0SytC zTG;TeR}>x8(|JZQwX17VFJeDhU)R3-C{pi>r(debDro2?EL9@xn1@7otZoeAYj)8j z;Yl@U;Jwa$YA{w&cNMUn^M2*QQu|d~@PJdh-gnrSAIA9inC((HVAxSS)WVBjCy`ahJ{jBk+b<0G&pY{09U# z%i+e8?g{+7>i^s@)he&IE~-Z++di=_liS}SPW7eJTqvF%@-n$`YhYKjh@Q6z6>=V- zF38+az+p52u`h{!-15gR7~lmmx*$n|?*k9sV_q{OQy1T)jGkVv;>KEElbIY09f4Tm zEbce^8meshP%Ub-2E8ORisUBLu({r%Udh!UI@<*T{dV9b=mHcw(cx@={3HpIb&$~u zfz(t-UsI3^#C%P}UNfz-LxYA@-_6(|VN4T=4Oc3n)j<@S93gt!+^gC!`SyM}i`QNH zn29E5p@rAq2~-UcR|sS7&>Ci@(Djgf1a26q%hN2kRxUIgO~}-at3cl~=yA}S!$P7t zlQg13>~}YEg7lZLCLTHD?$Yv@yaz;d=+>#o*5Wm3`7#o<$5*^maGKQa@&ri`3(dU= z=%I?kkrZuB8$91;T~(eDewRj`w?7^1!XGBVYVzhM7kR$>nW+lc>2(sH-?f`2uuP7bS`Faibf-kV1tSFrW#;o&?;wHcYHG0EvS?{g>z1l42s^G*D!f?csY?8L zbjL8_FiBp$t5F?A4Lh{>C?ohPfB(I+KYZrTq6QX7j*n+yls~-gzUzm!&z(FMov3J% z=szb}!Ta!Oo|SDs)DE(Pn|iw6lwPVT@0+U4^9@wP%bWH|@%lw566}%+#5cinXr%RT zXX+_Az2yU1yw~30yr(4yr2XUeUzL~5@bFHzk@NtiyHTJly754|vl~EW7%2U0EmE7| zzk`+X1FDbgnEprX0ACh!mRv%fz_GtqX61%IBOPN4&pfT>Oq>;q?DxFa9h{uhLU(oE z*RKehng16#mBr|VOy-N%Jm$uPzm_`L%9hP;tl?hXj)cd~3IP;o%8Dkw>f=z|`HwMn zA*JI(4Y_MH*s8x|BrZ{mDtD)LX&hblu7zKXp%>yqtBnACd_?qHl`K$lgK5bte29xBPsQCh!U6TGa`xpM=`NTo@Z$)9{ z@M#b;a5O(G3Vx?6c2^Xx?5G|NrRHvM)NR+K>g-RCqz(1yPc!5gxui%_EW2ivZ{TrX213BLWvh<&i#_=OZ`1=IR8~(%BxaMjWK{C28d&FuD z`3mUk55>zodlBJ+gg2-k4?-4dTmvyNo{GE9s>s_5ka;^;IX^ZO-z>9J$7*kTv;3bb zhW6R5xla>?8YKZrvo7E-k6X`8w8N5e4Naa;63KV4_=2BD0Udw=x& z=XGQfSP4A$z~VW8=2Az4$RSK&@Ro<{%xW2EQ$B{}YpAlEKh#2sW4b?%b^giG1uhgD zrY&Y`p`LQdZV{dsDg*|7Oq5T3q}B=F#Mh8IOT4%uvA|MC-HcJ*Z1M$q5$pSLXyQ{W zAp;9Hck;=lnuu+xgGHK3r%pnT%^SQdg`=uQ?rZ~SegB)u@Lh)B<-Iwl9OyjsW5JQOTa1ERxe z2gJrfVnxL1fZcbF3mj5+a8OC03eE%2)Wt(K{e3UAE=G_Xb0);u(Jy2rPW0Qz>hWkp zy)k*K<%2aTtV%1)oFZJ5kU%nG*Dr8Ck;X{=a=uRZ9s4;ip*05U970a`od%z|$GJnK z!)S^^K>!7@kR`5uj|wwgEM1fxcRh13fre05J}tG{pAPY(hO-ilyVec!4FXLPrFG;* zG=dO67;KtYfV)=Lo(`1mVUQHyES7LI=c&!q2U2|9;d-BP?@e`1(5*I-Eu;BZZRUE76SrlgeTR6*PoY#TDbD*?#GgCL4 z*j24!3?V8xx(ifC-?lGgQqm3t11Ye3FTh9Vxy&|prsk@iY|mQDg^~ZJPfUu-v55Am z@*<|OkizamLCQ&VE^5C*g{1`Lmj7o|l*~tk#XsWvY_=vbvP4+HvTB`>&W`Rr4GPtV zqjp)*sq2dnYH~@#l>k7PCXID8D)0J}<8RSV%MV-~$e$e!Tb&0rWM|iyQ4HKEgCwW6 zYQRuFZ!I|4muoT#kmZue8{!ENLe;-Jgwb5#o2`AK8TaXYC{M!5B^~}aj__cB8wy?| zy3M7H!W}UJ92WH8tE{=mOGsS1%=;3l1xwG4f+%xbP3Y^zx`)Z4khph82$4nKhd8Pj zAIdo0hFyD@+3is)kI+2}I~YA+mOLYjQI*4=$z<9p*`wYe)f+1K*iW75O^7hmMr;!J1a!|S<^=)tD!#HX%QJI+@;9Iw(Y^g$@)J@$r8krC@vf5 zMW7VAkr4Tn@ebxE+^j53mX?c7;G~7OA(E|7x`KVObci6c}KO}A};g6SGN9aIamin zJ|oQZQ7ZV(Zoui4=WB@kwGTpMj3j34Eezc#m3! z2%FOPl_0HZ7C`I$6rST)^ieXF_Bh0k3GwFbWHF>npWNXZqz9tcf=%|S9LuRv>Mx7E zxfQ?@UB7yRd)BJ!jf_k1(^4@r0m1Y%WQ-(O?!feK;d+fb(Wl94NLwY=P7XDm|4X!+ zQvD}QDH~}~$2B{ML01D?isuwg} z+c4+JYrTW>h@g>+`^K$VwkuH0;Lni7B4mqkpQHhXhc@8gmN^_GqQg6}$)QPfhEc`> z&k;opJSqG`lgwv#iB6dI^ zuxcx{@)Y)1{=|tpa5PcO4(3s$yN?FJzTh!wpoML`Xma0t2gvmk()1zkKQtPoO6e=s zZXj;d@h%}Qw$~oUGL!(KwA6YA7m`;GsX&CQKMY?8THYl1>$}@q6cgch9!~c43{9kE z_EijqK)h6oMDLeH7x)9lxe^y#y1(4-1c+;O^gxr{W+qulzr|Sd`AYjAMmhs?QlTVP zzGYs`{<9cXQX~d>{W!RednuU%o8_A`E<>4{1c%kfK|C9Gzl*!`6$mdR*r5;3MHW2R z%O=Je0E3vf2Ju5Q;!Zh-zq2@sf6@Qp0Tg@- zyeQgIjlA~wYk4nR={pqcPmgV`{UC|Kx70nX=Z2i&K6rBw(rL;8D#CJ$RNY8IUkHPq zJ78aOyJh#=2YCz0c?)OM*z_F}V=sMXSVqqJd0eok8dka?Hi%*el{zSz9EqJ{!Hbh>86#cLC$h#;E z@;wK^jVjZ^#N)E~>^eRHrH%y@)-~kw``^8hAZ*eLGxkhrfk+jS(fiUG>ZXwa)P(!1 z8%`=eK`-xr77|a@Q;EnuBE4x~QoWTooL&+G6wq`fU?<8Bnqsi7lt5Vl$AwDJXI5r^ zkUZ%rkj@qhgT;JdQFG*2rx-y@KT;f0evm4L57Kx!1jQ`Lh#VrsRV5O=g$eP}`O)dg z$%ve=m?pE4_fnW4%zLA9P%;cRD%xw+g)M(OZ!~@fucvKR$NJ^rD>2M_>RMBo(4O7F zSCE#v0|K|(j94cJVVxqM**iIxSCu&K+#~kSt`iX0KlCC2(Ns`BsqKkK;*Ty!keML9 z!*h#~EvOgb2l_>hz4ny~8*l6fR1l~z_FiZ}i6CsDktH^CK=Wn`#Px)fh!vm}i+f1cb~vsDLIq1$->yOnfLTXb62x;+)l-)2y*6}STX z_}_YuwoOoRS-8Tgc@}aHqkx&tl!}Sro5{RWRhNs+ilBcjgP$x1ZQm7<8#uTPfTIi8 z$nJMR#G!84U@{_<_~wVhVO>j)2{+Z{oEPCIDle`zFn{{Ovt0dBEm0z@d zXF<;J^>Y(R05i;v(J2WUhN_KtkixxTILG_kws6+x4`0K?d^BLC6)NB|D3;mAI0G)< zo)y`}TWg|h$}^`SA^KyrAQ*EQ$ZRJ-*q*s`MUYV7+&-;6r)(HY$Vs-3m<8cZf(wlqqy#NDcu^?cM@7jl#4mwCEV|m zydHa^^3{y2G~d(@1YBUqb$^|c`xLZmg5MI=;jGhE;aaEhcaKD!ji-U0pH>SH^I6BE z`?gb?OfC+?q>*k>z3#}sXvTv8dA`ltn|m&xz+9xYrOC@dPxY4wMi~-+8z^3qt*lAv zw$FRF>^?j*8cHh%Nfwjg?oNxZ=$nIURH**5Po$5F^;qhtez1A7dNjHPKlyL>VZ&B{ z)mJ86;XisQro9i9=G?F3n*(c(AO(l{k24Bp?R3xEdKiT*pOjqW2Q;e{mv#-Oo2as? zOwl3N`d|gceO4X5y*#~UeLa3PbOe+N0XY?m!|T6QVr==fzod4ejw*aaqW6 zQTYqV$*hw&ROxcCV%t~V`}Tu^Di-glRU~6s>Vdb|zYj*pP&&fl)c>a=7z3GH@9UlC z6a<=j|**(C!00h zjjfD_&2%LF{~&sKX;1WScWtnk%ReRq~n^AHlJ{l8sNkrsh0PqHG^iN7yT@3E08PF5TGOZ5P5 zico1xf`kv2`sW@df8!*iGUV00#~9StqiX-`#vUzAF<@l+R97e_DXuZ{bBDl^eEKK=rzf59E;eJHK2F9)7n0*g-;{%nTrfPO zmcks#RnZ!)Ba-AwA_dhh;k6d<5IP`bAUs+i`yUDB<5EFB0a@|d8fpQcL7T7bVlRk~ z$pJ8Xb-AYe!~iBg&6w+!Is;tL)nw!A%_gch&TrAk+6n#|^Dq0;OSE2y@ShVFt^aph2OR>bMLON6n948zP#YCe=#`4SKs@W2iJ>nlb;^u-av}LmE_JU0FTqpyO;P3rS{e;UR*&fxz`}TNE1fgLL0n3;^&7 z9X6MQjjv3yz&O%iN3A!^~tcY?>f*4qln+tS6#_B)RW6sO#LwGT{eHFct;{|jH2QN~ zz)TC_rAp&baWR326^A`bw=US{C_dDRSmXkx`QX@S)-Q`loUW?18n>*RC@+ zdjcT?@}G<0N#{>OaQ(TzE_-8Mz1{oB?ceiD4VntU0jy)ni-#~ZOUN)+Qb7BFERjc! z2w&OrMRk@*ChOwcfZGHnLD+)O!sRv&lITU!mtTmLOIm3QTa0-zO+bT5;bi~f`mAq3G?i0pe z!-{oHhmJj56h{>C+#DvOTLwqQ{&wgmH{M_S&SFDNU=R8zuCmFxOQp6wij|^FI9TWF zU(uQ?Ph_6_?`&0U2qJPRHSyEGQ=^Fiv+iJEmvE`0ImcNSqxzztUn}BHO;Kd;paCrs6M;G!4j_l znbbvYmbH1jC`|a1$bh^XCt?N;iIV#CPk1R)151sY4kl`CGo2E$xH0XkBWmnW?+q%r1;W^Z+)YMk7QW#hFX6`!Id1+PaYDO z*fD-9tk5sFfmv@{;qEkp4wPzzTI{?9Sc4A(W{B>jo?&#w3&-qo%moMmz+%MJcE3;cx5&VR( zH{S`q38z4@JwLN+<}-zs3Qr|CbeIh3^lCvpZ}*$nvnGC@W?QULnDGJhXF>Xby7B5R4S)Kn(~f1Rft8c z^uX^A2pj~~(t+oIR2-OAd_RRF!(rLDQ6_?2{QXK$`PR1&{-_5IWs;*u8QqXSuRdWB zuA@Dk#10$G1jeM=6WmxpTqjUKG9cYjRW*n^9A2)B8rkDDPt8I}r6N((FnjPD(n#PI z;U&aC=Rw4uC8TQ+GUqB7kPZOC&L&vxQ1|}+SS2iK_PpZU(?|DwVaOAP%I#%wG<1iX!PFNh%8 z9LRCk&IH75ov(G}`|Gkn7&~Hx`(t^3=c)Zp zbKlfigAs$&5y2eEyJ7r>T;S@25blZT6FUKxZgUurLoMcge&uWyhkX@y ztqCVE9q?Pb*CS=DU`)8_k%%*BKhBOf0pwn1fPAUeB4WE$;Ps{=qDkSES-VBV{#)rk z`@`LhV^vQA9FIeZm68voj6XlM*#_CjjP?7L44|jqeU*4}Dwp*4yK*J@FGGybDwk1J?DAOeV_MxlKOL5%|}lSv7*~Go>5*Ao)j}B#7(df=n4IxaiVeP zX@f&j*b@z0>8amr^*a!?GClj>y~8s=etAGo_UzGKM4w+^rL^bIKF%!^{xb(q^$Kn- zxW@HKAx9xoh(w�<{i6T0zWuyPAN5|2 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

    Xt|p&Q;b?|@Fw-x)Sv`CVHh3a0a2Fd*&G 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 delta 323615 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 y1}!^wU_8=Ycxt_l zR4IinDn=r$&)}rf7tfxeeOzrKRj3aExyaDwMZ1KFa**VtFc7`;zpa7!eHqj~vdy-- zp}?vM>s=2?unP1I@2$rxizn8PtD<8n2Yrt>I-Z64W~!*OUDfcz8B${x(yMW?&-1 z+1K%Sj4mGlsByDNoRpp_(K5uX{Jn3=4j|gE^3c3r_U2^iFUg<+!z~zWZdppqy zG;Ead8Ttz&56DFMR02}ad~-;Du9n+l7|gqg<4xrV+6x7-OQln;XDDc~2#ZbbRr}hU z%ZlH!ghgxIX6fGFjm6nrT8fT9_Sy-*$<%||^x5T`U9CROeR1At>o;X<*-+cnd-dB* z1hDhHoqMOVxIT!Re&=7_ds{Xw=JM`8JHh5ACui26a%lsz&%{?&HjRJYC;_3%i=Wye z2Y=bL&h9SZnS(>(_PbWLeiiEt-c7j&3{as*qdf|0b%i}U2<9l>4}N;KILb6P~mqxzx+KsPu+ac?3cYgbpCW493y^i zz0bnJO{P{~p3&=PtYGadX=(exWYCr0eB(1L42_gia`hl?g7B&zE&~`rTcRSL(r3%i zqmgYAl4n(4Pf2RYZQ}}^qC4w|5%v0sI_kMSc5lP@rg7Vl4n)b|AQ&f3pU26Oh}?C)8t9eYmM`yGKgV&3Z}RB|CA z`k@%4IuqXVcVQYqG=1^E`&3b+7Im43B1v-i3yQl49cn_ui*#hKzeE$yf3?)OU1V3% zc!Ye%+V_7dX2ss2zkFL(#h-7#Ec<-6Nk=^%?5d^o|8w^Ij3@smynDg2w({8# z7L-0Nw>HTlz@b9dt~TU3L-3{r&>;{O=ASly_QL)-UuIU#gi@HjJ(>=u_u>^8tod)+ zLM_Fm#u(#Gv2KR}T&Azr>m}{h+%zdnS=o7HbTlCMyYfY!zDNH5PMa@UgUQF^Y3pm+ z+Jqs76kM-Y7%nb&^t8zaJMDk$?j$;fMmgNwwa8g8D%Nc5?r9!(uFL^WEz(@uuUg1; z3{7cYI_XYG+SjQZpSPKE6&2%HHNIIr<3D2Ei>reb54;iF68tVZD^@diA8y z?gii3S^vB2nWl&2y&b?wDhUfmCy%Y8d9RJhf%i`(dQw1?UflDlonZ1L9nZW>`!ln0_ zQ#&&=0|Nu8l<4fFQzz;2yI+s00zN^%jdVfU^`WY8UxvEO6HVR#qObF?|E|4}=%eCy zl{U5bC!Ba=y|R&JpM13+|1Ez5Xlq{8k%NEvi~U~gd|bbe${D|UL&N&Sl+jlE9b;c= z!cZFAVozZGJ^qi!v#T|lrJTv>Z!URNp9PJVBjQn^VPUjpqSNcSUhhB`K@S$q&GPZ{ zC%k<{Us=@T8X6mNfBeHt=al3`btJRIe_yWKE6YQT=~qTdD(Fs63OxB{I=A* z&M;(I{s?!ux@^e(I^f^$u+&tWv8+b(l}-%b=xEimtr;R)IvZ;}j@wVS@hH{)^>@|i zE%3tSU^5(v?ZZkb*;Wbq5Bn1!DhRNTlarL3!xMcb4%5 zH#w}?Lom_lsY90Jc8JZGwY7Coku}zPSGH)Iu>f`Gi(53YHM3<}GQhalvaXf&s-gJ@ zOM5YTVW16Syi*x;OLndl(~`Y^yT?p!H)3{n$-PEg(TS>8-H@Wjxnmmy?G12 zuFK0?zAu?|*xw#9>AcaGBxdF2j z72~plKT=ROILu`&2FQIq$x>NW+u^Rhp=2Mz7rD}+|5dhr)z_dH?m$D+k~YQ{-t@-D zSNv(%o#7|u)K^4!cv|ouKg_x68XGm;@QhP3Hq?#NAAaM6&ht{D_zCIO;Q5Tt-|?N^ zUY({=GAn0?tK}eGT&LdpEIa=5^OT)*SNk`pL;?>uy|lTu(V8BUq)$ve8Hw-a{FT%8`_r$sG zmhF7K|DBA}sDHhf5(Ps`4yF(&7l2!o0)4frvV-4!G=Q>qPQ_8bSHzTcGnX}F2vE^; zS@v|(605(mw$zT24LuPnr5uB=$qfBH_mtGOBZBdVL`R!dSH*#fbhozja($h7#FVp_ z08Ka*B-pIaR6Jl2*)tGxygDZK$%701VXV08RB*Y|HzSK(I0-y=iAuh`14SjD$K$s7 z__5?JoBl)@biE4SUgO%DmOgWHeDhbOLB16>^?5 z{PGh~|8dssl547d=j^_%O#H7d9c>Zit3JK+(m!}MY=N{XJa;zw^hEz4_ukH{@rQm> z%q&Y`1=}ggGvPjQgSEwzDOVN5fA-cR1sSwLYMtDsg{fm}`)Go+?b4X#WHU1nR7Rtf zm8$N7$CJT0C5mN8Q>l-xrRzXVg8~iAsjbm%XRoTg%`bH%i9Iqha`fgxSy|O(t1C>0 z`s~u;=l0lqEsD8knzU7edV`y~ES+Evi{G-&yS`v49vM3SH*xjzh~4SOYLqd`G~-qg zYRGvT#C5L^rOrmP^m&x1p8D~x(E8D$aV1oBNy`g%GCFkgc9A0&IzU;)*#H}>NGle5gocJ_o!0|hJs^2!{5sUsx_)ujzwDR9 zd~l9~tK@9f*H!5cRb7lHw{({_o&+MKri1? z?_9;jiD^RYUt@`*%0-KFM!*634DcnNOo(Vez3ex3TVG+S$E2Jm0uTE1+o?XPSRcB} z&VyVCJeA(;w&-#3)&oNa*PqBDM_t2|2wwG%twhV3p9y*Wto@=D@(0gQhh$?yHf?mh zuQjc8q5d>^y^mc~>&?nt7a_qE^V(Qu{83viu~_;MCGBWYz`p5|b-6XT|As=_{&Fin zJ@{r9IY0GPBw04_tN0dLaCJ%gyjd4$O;}_fFd0!Jpd0109sul!#J%VTRtFW0>1x|r z8RaMW!a`3tWn|JeAu8p?8|iEmXZuw~>C{)vM~ZfHe$N<8_^(zT&V$ZwPPT8)s{oa5 zGvPMh!yz{3#4s6|WBPwn*(c6J`k_o9S6bk(`=||7!$kWGjMyj^8l?+|9Q0?2 zQ~rC!L@POZwz1smKr0ay+RF7&_L;LUmu8wm`&6%>(-!Ye-!5XFsCAL`yS;l}0oUln zgt{)ojnsoT_p0R$U?(H?h4QUj-EZB2DFzG9_kYKa~z0_^4%aVOReg`j(l@F|H*#lWd4VNJAUk`!8QbdBZ1D zJRQ&NIPW;om<_fSg7sB5vOqvmgyWw~gYXwv=ON$_%~h{XdOe ztYaZ*C1*IH%&Gc3Y38 zrCtcaJ*Qxkan$HZ`0~^@bSD@mSNZOus775rCLzxg^bbhxo%|4npLpi+?JTFpqr!dU z7<%K8Bq4H4B##?*G&quWNwGu9I4k|Fz(hEq&c4eCQU+G_6IdW~d33e<1@ljd-N%>? zw6^-OMb--`tVaCLfin^Lz>_vGg4Mj!mYrpYO7EkkCu#eln%?87K)s8D`uS!P27ehc zq1XmZn|Ywvwefj3{z)HQ?J(|m!#fz3p!txKS@1@gA$4_q~A2UHt=R|u?Ih{CBqgR(WXg>t} zGmw|^6+w4&FBIU}0ZC7ZL5#8FALO6oL$~avCN4HEgAks{*ia@6)W}qdZ1EV%TrN|@ z{wCm~4OHHk3>x>v8rq;k4X})%4%gB~)+Vg`2?Ie#K5tQn%JS()0ru8VAcynBBE8Q0 zUqmh9!85&%^Eou*66gH_N-zZBdEx{-8xK{2YJSP)rYaL7wlxqO^LTd%ZLg2?a9PKO zPn1z+a_>HNGMdD9Ro7Cc>NTF1Ia2>_*rwbb7uwHPr@URirxO1xV`W}|7C&8<-oJ)q z!;Zl17@ygDdR6CUhi?8fxmXQ}D2*t)f(t;QQP=SoeMcLO_OpMwqLMI~uF`?XXMS>e z@M!*~Tuk$`DSnYL)eiTE09pwz(~U2MbV1h69@DCS{!F}LynCfbu1O0&d%i1e-H+CQ zRLH*VA7N@doD?iORann|o6a`XL463(#ZW)kJbnzkLmShllb zK;v@y?2nR6@>*DEMe~&`j_!$-zxIjhSNro<6&d>$xQXkwPcLTM9p6ef+@4UFu)0&K zNAYP3DDm#rLzUFrp0LTKcCuvF#K+gQ^b_tiTz@6Cn*LVrWW&E5wCjunHorAjF1!t) zK5`$E249HjCIp2yEo~9j(z>4Ps6TazXKBwHA@OB{)Ma_M5q2O&tbhFmMz@E1oj zDPxY+6+VvVDzNWT2I%IJ4c5UA3M2hjbX@}jkkM~U1`T{3?nmRtmkwmuzSD?W2JYeZ zKoIA9U2J{{gP6!=@9lO#@&2a0_G%-c51O&)KB$*3}JR0@lEvZev;OHy>NsH6||8D_hUmPxt{;G<^ofr zK!RtK5U|nhp!Edgw2c6oI?9a&wR{BckvRS^UbJ*BN|E2C2gHKD2;<2ttiZ6LGF6YE zCR|w1BMveY2J?P(+VBdBY#}x5eQ8S?i-Pz_dPRt(K&?%;tAuM4ZpSyzZ&6YGL8;k@ z#OsqG!-wx>4Lyq!5g%;2zef$7n1mDeX|Q!Q1j4)@{&}gA@uftnW*;8<>J%1`_XyLI z@C3p(ZQ6OD0NGB3zPOUu>_6+x6eBzpw>R{je?E=UgGS<8_U5X^qQcSW=o}sCti#!W zCZ{m6r3{`b?QJ@j84BQlOS$OPdCu9fMaw`cVl#J4%CBHJYg?zhe^X!|;k05%(fzMid;ItE?IXcYn}WBA)1J}pv3Gg(-YX$^oU^;#!>m4QU<#8T%B7SYz5JpD zg^_hzaf|^n+Bv8JwJSZsaldhC@1H&b0y407pD`JL>uu(Il^4AXkxq34%O@Q;a!m@R z6gO`d4p_1a257n}jjqeXbo^r8wQ#nHia}~;xf<}2ke&wRT<+l~syU7o`mKT{? zef-@u%1|S%vC2EcpIhMX+BW6sP!+1mq>bOb(X=9Bc(Zv1mS_9=lDiS24PyLV630Y` z7@@hqE|c$N5%8l+A`u?`e93kpW9@hyhtT6KE&f+ldqoa~tENIcg%*T$^sjO$#7x45JY@Rf%%nnQ6&=RI4NcMy3C7D6c^ z3&U~b7EWP#2Z!ii0BgWEkCzH%(&MghP{!;iJL{{F6DcsL3J2=z178BbbZ71t*ly)!qp`t$=gms`v$N9N}S z&lYQ-0!!x@KlO04*Ky~QcRCzC*u9G1yszD0+OC)%fzPYD@3f|5s4Vg-8h{mHdkM!p zXP})b-k9^C(S?adLv~@J>Fv)6x6c8__oAO2N;Y2})Z6CH-ejm;Y`OB!GXOx}1CEHKGdrb|fvp)c>}5Qt8hM+tOKFC_*grI!XH% ziDIrSnqxMiOHh4@TNlRmP7V}p>Zf>W1$U&~s`DZ1;2q@tz93mpKCGdI#^SicE}Z1 zobOO@mX{H$%{ddu64@idVdYwRUTHMR66#c@d*cT3+w<7}b^*P)7_y>@=Db;x8zq7% zo%|3zUU^WRO?IGrxCH3@-5Ra=+&*jBP1}ItM1DEZaGDAhuk#!YCONbmUAsf}=5(wB zf%$QdG8wStRo)0K-2ZYYlM-^{_-uka^##-$-8Re}j?Yms(Pu@uoceY_re0P(gL?l3 z=W*(q(!(qC`CdTPve0{-;kd3G7;=HgtEgal@!IUQ_o;Q?4?dfdjH&Dtp{aso7~?t1 z2p{iB`J1trL@}R4r!qGfVMR^b6*Dbh3*#<6$6rRI{B)R<=VR5a;KlXSdLRmm3ky9e zRJsByO^UB=E_~w8conF4!h3h`a}{az5c4JaDfZr$UDH<_XNr4)Bf&q{_rAK!eLg$! zLae_Hre6jrq_vgT?;Cvc?)YFcRQ92i@hgFpy)oofW{dC`zpF(zYT&x?I*KdYY=S2z0#GP}M726H+Q$O%L5l^E|A)u$Tm(t?$S4*K40w}g^H>w_Y8M$03Q&86c#kx4c2=mOYCKm)SX=xk zIVK|@L!5ZPSZ1>!$bYW_kK(WNP!UB(2;PyC`%k6k5i0HDpUbM1sk`(*#?C_y1h1EW zu-~L43r07%ZU=C3;XC&AyThoTF1p*Rlgk!eY#Hu$PRaknXcat~BCB~`0sN+k2%I_$ zn<*@!y*$Ln@0m;s!>CZr9!&++X@XcHJ!WKM>O;vv0e!G?lJNH3eUN0 z>*s(_545L3MC*v)Mt%tp;DzDeA=if>0mzUht?Gw#oT5ahM^Ld3*is9-{mO8;WKw7x zlPvgt>2uR*K4-D0D9VxGD`+ko2WsqportKA2Qw2rse)fp%Pu6ah@&R6i*iSZ+i+10 z?c4MDA&C6bTzn*X7@{u(VH7F7poae2gn|-_=XrrfHEoAn9EWxDyBX_P{8G}IS6HE+Q2;_>%y z9C7&OS_8H_5QWi@V(3R8T~w@>&Ql%_SD$y|($ z4D>61SCI;T`%R?6&>|}%Fq4p10ycP{B#8g_$Ia;`89VQq#PuKJ!n048e&B>LNhjjK zt9+8}iTtaH@bKpwzs>miGQO$?JCg@Ydef)W0yrQ-C8fLkR$KGW;}^C|Vs;drkKQF# zJ47fnNP8lDJ+a3^@PvuFzU^^0N@j%lUT%RsGNY%JR+{KtoLAcE+>)jouWelF6YYey zfq#E1jXGAHKPqskjaC|6Wla^==Ei7}(V}$9zsniwPwpSg#f2KDq6*&fP;ur|dLJ4Z z!(x3fp8^s(OHTod8{r7(0#{6xSkoV+q_2$wJZmnsl|4Z;Fl$>$VGQ$zNyBkoS3RkmP%Av8|Cjwa@7d= zt20gONr#OtHj<*SZ_Y`k^|9<@u2d}>S{ur{Q*c}1Hg_cz;O=$cmRfp)e&l;Fs2k9O zbmf3+Ns%$GCS{JMTg&z(&K-kuar&dLjk-x@HkMa=>Y07`WLV0TpZ&Jm!k(WMp+hP% zB-c|LJkQN|B;cJZnRnp!>`;=~k$q3bk%&&W?&#O|%t+6i5{|Ixm@>)N#nP`xf4qCq z?0Uw|46)aN1lM@hE6UT-jcsm|UCaXQTifUpv$n|h!9UX6F5EiI9rNeh$bpq#{6AW} zHwDe$eTs~ccn+;7m7uW<#7-^z*uHkr4RGmda{khaD%_0j$A$h*Q}sDW8+PoxcIo#y z3c<7W95ZTRU3BxU_*iRJ@vxClUMKk=Mwj5`c)E4wVkTo1WB4$@GBa*JQvj4!87U2A z3*~lO22^<-y4oF3(Kk*pH*8jIAvHyZe5uMxv9CRxqLCjSQ>ejlg+Pu4&XK8F^XIPH zhMO#PV$-Ro;%%eOA`)4QkA-LZT)%_Twi(*o)Jj)DvgYB5fn%+^URSM|tdz-+`nKup z>a^Pp9K+Du+!h1d1%~%~41l(r^-u&EZ`IqI&d#B4cbv^; z!B%Y45c0*FOB+o?yg3(qsl97=s~cKzAGe19uCDA4orsqNha7_N11~>EX-HYCXuOq= zodi6|(`n-`Ngn6esO-YhE!Y}DZG!GF>SMs&iJLF@SD(YJPDLg>fYo0Z;|SMnWq7K- z@`r_k1=pNt^zugP37SwseIGE#5dqAo`;v3_(tjGDYaW^qe{ z1H8H5o4!ROC~P?})t=;2=zo0!Xk0CV&xSTh7Ur?51u`>G=d|hdHC8j<=l#iPYhS*h zzpQa{xqX?y1>|-XZ*X4uHZB+XBcI*&NqXp1;M_L|a~>w6i`vf{2wtgDwtuNJ-X9=( zLW~$6FWBD8HZ%TIT1*x3jf%51#pK5hZE5v{*t=XhW@)M%uSy%WD{Y#=6B~Zf^nN4Q zwOy)sJMUAqOiQh)!AQ&+BCNGuWA{86&+h3@ANMqcCT0P0p|^f%FGr4aPM{yu1_%3- zIhFIgM~jG$BjXLzmYS`|$BO2eVTb_Cao{Fk9;R-v*S>MKQ)zMe+VE0oXjs``XVMZo zcZToWdFcC|b;-X?j0Pf7_*g0gaK@u_8PynwvE%-G_Di~G8rUq*wd0pj~C zA`+z<)#%5MQIqbD0T1hwdH65yUB^9Y<-r4s5On?(4}50{T`BJ4MM{H<-Z{NSf!;6N ze;My>>avdr*XaBd2k*t06n0wd7-k_Z6=qUe``NkhMlBL$-BgkWe$aHjk#F4*;TE8I z!96dxu*OERV9eBM_tBg&RH<7GNElL9iBVHiwrr?oZv4fm*berrIk*mUU|P0m`>@ZW zp#OdA%Xw)XI(DHDX^;ca1A`6Ngm!bmAf&XpjQ)GN9#`L1b)jAc|c ztE1*deraIq3j^_&8&37pz*L72sh#7PI4W`3C$khOApYjV6(&LDC55_Twhn)$JO_dz{(Fmx;m^`pFX5tEhq{|}2;)`4;^F|J! z9`Mb^*&tAj6aZg(^%5$4wnBmOIJj=j<7^kihwicD9xO0PE#%*V$su4E5S(|wnNlZE zBW)mQpYB!J^$7ezLngc-1c~LR#t+fcd_?+I)Cs9fX3XxbA z(Mr?&EjH;$l~Loxn-+(6XT(=`ENZ{l<(q6Zd*_j51HaDBX9s1Jz68?w4u;p)e<$&Y zymiSEc0rp0;kI|)lNcQ4jkfX1Z!9dvvh%5knUY%=C6i1I>cjo|SibJE#e57pY_TsXrJi#B5w2r&X#5T=cDIvKihdhv@rDqJ7kjQ z!6jVsxh%V`;$ED1wVbjXuMd1O^#t60x$LVv>@8Eex=}KE19DWJ*V%3V#uon|mQ6k)M>y3H7VSLdDSG z7^Tr(OzmGe8o(KJ^`1a~*0c^LXvA1Ol@9-+=`$#vRYI#mDZAg8{qLA7yWz9WTi2pzQTom^lI-I!h|mvg|-p z^c*@>0NQ1+y5B7Nt*8oY>dCV9ox@Dxg=?g#GcnVzoS%cvxBInG?LS1Qem?uo^Umyk zKmK%+k;!qqHH81j^#O`A96W2h#jg!F+VqIvEd9Gql9{erm%*NxETB&QtGQlQ4JOxe zC?>PJ0bFZl-Tmz{%&ob2u-%*KM*5wpiy(ei zd%KSEFE>3&{ww#2+fF9EwK{%97?tG-DQmCIIUs<`o%DZaN-jCgKWMgv+#sp$J#tlw z?=hiHI4D|)j8KH+IO21@X^AgWa?!k4KnDBFI2i(dUMiNECF+y-d-7S)lT=BT{zg|F z9b3{OZQ@E%Pc(W$y@qJY?u*%H&UKAPUPXoJg4E;G?A1j<4z{*^pAORf*X=Feh)q!| z&!M_GU7BDGA()&P&~(^#2qpuO`1-J`U6R(s>9;z_^6mW%j4~8c7Be~{4rUsPDU8u( z1WOOaRKqlCE{7e2V$xwA$jZV9!!XH!`M=u@Y&jC~?PNyTf@;be5wi#T7ci#7fm?dX zfArSdgo+Z^C4-;jy+|ja8<{oYTC#?+Mc;nquOS%xexLZNVjAq{YQ-Y_c8(~auffis zC(z$|u^{(GsyS@g1y61n@Wnuk^aS}g{I3YZv)ORaZaK(I4-3Uyl*1Wzg9`zsNUDMm zfd>f!M!S=gXlJM;Ej-n!K;0x1;dg01Q8ZzUhpIuhEe<(#;T1pyKILZ|3u! z`G748o{}30Mm)BL&P$~~Z&gW^d;+y+6i1zy@}mBXU;P~Uf*_RmGts-vc4QAZ)eO$# z1aM@j#V?fM;$AzpzYdXR5)ar*s@(2VO zIw<5Y-X}m)?davdcD8c@>Fj(;S)p5&wJ`6X27~Zl7hh zbN>bZ4t67UxSmgCD<%KK@e$jJP&okbpyt_MH@SsWcDuKDK!f!`8Z!L=~Vd?9J?GmRv3c4%o5 zv}l?m=j>dF8a0A|6x;t!^ zUhqBg*9yJ!Q(|4xfW+HwPM&1@#oHL=s!7c2lZ0d_yHo_Q;r%31-*zebT3KO;4CsT& zMPRa!`aj&gfiDfTr{5z1suFpyDlsYz78rqkkM0m@RiEbjJZmO;(Y=YmHxD>@(KZGx z(`jF=IX@P5my5NOSEo6GzmnzW;O+14*x_3W6=<>XXDy+7wc5NdF8Jg&!Q?GGs%4z5}S(rF8By?Z_AbMhXv$$xy{S-71I3m?nH|R^O(lv zxpppKjMuRQ#KJF$#orXt5K9%3p(lglu(H;mV#6C3W2MMVBP*V|2__zH&u5XXh%N1e z51xa)T?Q}=pRDiG%Bz}A(+5kgxmB6=z~w7|Gt&KB{L$Hh(+k#Cd)Sv)xpAwh#l#+J z{V!YkLN94OSX&P?q6BtMNEm-t8r`Nw zOo!|b>D7dPn^JI3;%*4fAi3LzjhV!oTI^wU+)?tz~~C5*v4fAI5Zq`8SQw(%xoz1J+GpkI>>xGYV4!YtUC7 z-R{)PLY7Sh+Gg((cK)$yZPBU+qJ|yfQ|L9w$30i>%FCPf6fOPd>V~G-NZl>gFZAoH z7yEcWHIO9>_P%&>WM$jzBM^5CeI3zz6;ujozHgRYu%!yyfv|rko3qZtpD)Ti7`KEA z#7>(`T->!!fR@KY?eL-NSM}b0r&18tZG$aHKH%2LH%^{P2j#dIN4dZVqcLfL!vq4T ziOfRj3LdI|AsFG~eW(xapUJP7Oa8k~3&lbOwA^SZU%skEi1FJ7BlgE45pGhD1qAdH z{2k$N3~1da7jkod<30YtAK?s#mTj8+oytGBziS*%79mx<78(H z`5TfG-Mq3kelb{!2*2K*X93!a_0vVdE1tV%B~pJ3{y}Bz7)@NKC^FVy$N1>ToQt0D znT2BM>@@x0W|Fkm5c%i#w!wEd!Ef=BYHeH{O_I<`4s$k+Y01h*coJbP+|jJMs>Tq0 z47R&$Z&Ekb{sy5UENkSiVcH-8tgXA^o+OWn6YtTdThW6;K21#q6gPlTd!EDxm}f+? zlgkBx{0HIQZ%k@1aj8AhSnSMh3)?&ryvY`#AxL;@+rMN(7KkKyZkuuUkyJq{a18>w`jujL^)k;z8w`?nrV6u$6-@UDh@(rduVQYK>01AuP?V zzN9?&wY-J?Hz$`gK_<*)MO1v&Fa^!ZwX#>i6YgjM+uzCr1Vti1IeY4B4BsokK*$AE9c#AUqQM z{UHn0>vcJtduf{ z4j<%mMzoUTrgrRApH(gKxkH$VY$llfwrZ)AUpALp9Pj~Zc8$Bb!UKi=^-i<%E_Ip< zO&baE6=V*NA-};TI`Lt9vq}VZU+jA*h{$S4C-*Q)3jU9zvkq(eecwJ(2Hg!x3yfw+ zOA81{#|S}U#6T(Ofpm!|Y|`BgV>EmOMVgIfbhk){puhL`dH#ljW5>b0>%Ok*JkQrn zrL%Z5t7*dCsxuidp-Ou%oEy8?ma@@tjX=bX6o00x*?&hY;__zkz4Y@(2YV_%V3_Lk zf9}s_TDV%I56TFm zuKcTQfX$M^=EyQ!DQQrJM~8_QW!O8HnCS3o&$%h=Ey-2>nqQ=`GQz`NcUi`!wfNc0 z7e28^_`cb~HGa?sLa)X{@V@7fZA;bq*}FB_OHwsLqrrDMqoa$2TU9oWqFp`%NFd8G z-_|`5WM1;wcV8CN4SCLFuxQ#7YPP;0<5p19Ad?omv?#FSpf42hK&X2g+F=shDI-k0 zeicq2lbtPh7_m^I+uFajaJHd?^orsR#Q22-(|AaIrF2rr7U?0^a$6?Z9GxiL4Wyy5 zIyw1mxuN3A@q7ZyxaSh&<-n)s&g@RDYA+PW(+6fnIr7)MQ+mr-)66AlnUffb>`WnG zg-b#njzz>O(Q*2<`82fq=e3)11b=DAdqRU0m2h2EZkUk^k z=ABpzb{irw!a7B9Q3gH4BIwiEV0zTJs^|BgXMVAgMXB4c;L1qN{Yvsiu57t+v@9M_ zfbTeB1s%$yj|K1d{poxuL=0@KlH5;+alA{RsBAf8_00%rJF)yzd0)OVc>D{+lf!0X zBIhyLZ!i8LHiojNv4zYOLLrlT?Fr}0T?&haRKG?tPwTXh&KYAl?(1@Xk13WDJ{7Np zrSo$M6lrf6;L!hp9`gTMD$d9H1KeMvV2pm+U^QWx8j|(UE9Aazec8a_x9#VOTQ`X} znVqduS4!4v%oAfSVq&JU@Dc@t!-bt*CNU(khF3O%nog1e@v70$h>41@tl!p-E6>?T z%ZC5YqB=Q|q^3#E21{rKe`|m@_{1pq>IskLi=S_|rODOs!ImVgSPHZBu{E63l-%a0 zx1mq;v(0Pz4(IK2UO{+-R|+F1@cKT`@p@(WatO)^I#%XZcOo)=GAY3`b%(?oA%1bNgO@;}Ts4JCc=RGkmKE@rN|F5gm^ zZzY2a6qi>#Aqr|COSu(CQB8s&ZvBqdNpGJ|Vb<40*;-7T=p8?Ktp@rc=ua6GnETse z;;W6k-GrbCAx%*t`|#mG)GLS=K7W!|-%Wq)Z23WxY@-*f%x@6Fu$-4PB)@IlJ-k*{L&JpQaY+W)VrM3&CS7k@WLVaP@Fv$wgx3PtfxHLJCCjXc^T z7nGn`PnN!-!GU_`c-Y|}-GG}thwMB1<*qs>`wz%&w-wzK8h9GlXl3ZdjcLh&*4Uo!68JUkTi z1)eSSO#S45D|`UcC>z;qv92Ce{8INjq^7Lo?MI%oY#kn%J|HTQVsTlEisYzle%7!4iO;+skU;fjNi4kzpRJ_XY0L;K8&uM#k^i!)IxzMtW8=*YHqIUA zWd$XDpr`kFo&kT0J=JNyx6YkeB!Kl0L;;?<_kx%i?!EAXnx{pEi7~usNgD5In9%Hr zOXUa&gH`)2tq$8ZSm!EDFfDy(tMjr-JBgoM-LxVSJapYm`myc>tGHK<2hw*?U%lISx@V|j5_1v3wQ16d;ASh) zBnp@i+$M#FufbWk@lDK+I0pyo59qCLPAP*GDup6(+ z03pD?2(HB`sy70*j$0zYrJ8B`3-3hD5H$B1r z`x&@TIp_!OO~K&Lr6k2%N}c^Xh3^XTZf^EhPD^vCXMNVAdki{;UTMsAG4Lp*-QJ## z@##JDDJE#tQc1K|{!sGwc6*ZP1@$uZ;eUkIhaLO30d>Rdo(Y3&0j6rnZh`;0a#R_( zlb*xLi&idvPnIw9;5KW zQE1Ki(f$r7%P-8d%o#b*B!-5fcC|4Y`Lax~>zB#s)zxdvR?|#4`qT&m9tR4mAL`IX z2X-tU*pj07Ih#lRFoqbOh?IWXvqP!x$1y&lpuh) z^j>4Z^0xv|@4LJaStva!y{UMSSOtP7p@gf5-Eaj+LO8GbZ50T8>}g?=5G$;=7x<{Z zVmoHpaCOeBjp&pgqd1Qd;Exs^4gyaL&^@vq>wLG|1pw$$N&}ieS~hIrU=C5_&@+wYZv;c3o9)M2zKJQ6&TDb3CXW!dVh)_xIf4m)EIDz^M_K; zJhh(!@W2AtN-G)@Cb*owQP}FwG8-AUoz-5uxh6OFJ`6(FK!5EK=d|X0xwG(Cl$D2< z(?qwyYVo~%-5W5M`CnQN)rnj8sFW8zDZ0V_nZ`r!#>kpZnT>SNt46yNEUcb92*BpCRqkgq#9`r}xf5A`NyB5nLTC=Wh#c6a9T7^C^R$-i)6 zdMC1|>8)yk@+`#uXx?*-&W!sEEl_;wGBQwLN6nu<+ zI2ZS{dLW24e`C+dH}$bR#bCxyw&#P=i%ieM(U{6@)+g$9%;N@g@y-Kwwx3bxlNdbL*hqIIL z$M#82XEH#4>QMXx9Bv1Dd77gLns9A9o=l@s!}`Um1m2GCRUnR_3!&wHmyCR~;gL4q z@f<+`7oq_WWv^ zbsvWI6vLScGs9BYVaz3(nZK@Fp@kQ}u%>=7y}%?tJ6_!A0`(>fLofTemwYL%MdR%WA6*zckapwnx)@o#X24 zdYc{Ldk0U|tP)xqeCi8qNW!NpJZKO#nu03qrwyxt4uxC}Di#I7l6kxL3V1i1rq;m+ zi~CEJ4@SQ5VbUhd5~>WU)lDC^aatDDUl)(hga_!W4q35F7vH)hYzmB2kYc0 zU7Rd@i}eqvtrf=F2V9LvA0!9lHf>%U2IxlO*J&-AM*UHQW;N2ECo#S5%4CQTf!8%u z(6`SIA_&s*vGhET=2TxR<*|Mv|D!{laV9yE-~*qNt_qKekd@7MZ?8 zb?|59q^ig1eomjHuET3eikfu(+FI=&6Ky3`{VRI1zE>Tiku@`#L$~GtJNi)cS4&H} ziKb*EL{}M6#ipbFb01{JVV$Ad!{|HeZP|W3UBBPfrYTteYV*dwvR7whq zw8!nO1f5}YnM+T$oK1g)&8_B9r&BR3LUW81`0|z`I*8I zWBH)QJW%O023=s4zl+;ag9y*KLnUaWN30&;yo4L`M~RRl0_}FxkhrVO*J|Z9JGvbiPU#{1*=J zmjOx6iWC>jg>v+yM_HJ3TcDU02=YNm=b43|vBfS07Fk-@r!+f_b zm*DD}eB1O2`_H^^%Nyg)us{#cj7|~huKRGOs_(w#8P#}_BVIvO9U1%?>duP2_W9MIYxYIrhcs3{%=F>HuK=C; zm_^Z^*2CX+wyVV*6WWLvksGmvkYl1v=JA1=EW7hkrA@m(2H^jMF%|zDEy|h}-bVVS zr_n68)z92Ka%8x(daxx7$2PPj81EBKxkJ}1fhVy>{}3*bku?!A;Q08yqg!3+-dp4i zK5^4j!X?u81%B`Mi@ZfHre(Ou+2ZLXM#%eko9LYUw)#HMt~2YsOqE?}AA7b|v80mO zRU3i#a>*U~95NweC>_|e{&*wSwgSiJqv_Ke5Eouio-H?HUh}&FZn%^2z==?q+YVCN zRs6>70gCm<M0i!`7{!?Mh6rLQgK-OY$!PaUrNy zl+1xmM@0zO!@;gXvc0o?Wln z1s$B-#2~Q2_3fhEcUOh34k9)_JXNz78$DC~y=n3jWuwdS_G3;LHYC6N z6wk-Y5^TwZO4d9NebRKc`SdT*lly8`bkf>H0tD|%O(|2}o4OaNd$w+yni}*a{HV8F&Skq3F0 zPoPJ$ox4rk9NJ0rbjz2-F!;}(<=P>nUIBp$+uzGb^G7oU?NIfC+0H2X@o_>!b*1Ki ztkh8hHP*=L0s?OMMX~yPKVZxwVFTRF4$PD=m+@jv$YexqG}`JInGgHhp_Y! z*At@W)>@x`7ZweX|6sRM z6gGjS{p&wd%Tj7940SBlL!t?!L^`~G&=^N>bSACoF+K!&FOkAZ*3ayO-hto|`3wuu zk;6}gRcZJl=@{pYDN`L}eSV+#U(rPn^gZYjJ;nL5kqwBAlaKz@`N2T@og0rx-xKnk&bt7F!XXx<<&1CZxg<%F)B9%GZrMdrl1buXqaccli3|9 zR1#&in@VU2P^W3apdc6MC*X9#!}S5jr+)>S@KQOm(0Up==c?ud2WEh`0J?S9#tD`BSEoaiYV7!iK-a*V{+S zgjhns<4pE%=yo_w6@Izlnss%6h@d6QYoM73kclA{d#KeN+Uuk@G{6U1$urETNdF`X?6;HP{ ziE5dM0hz+lY2Z(;61@V-xMm89?QJH}cZS6ZK0_M~Id%oZ4+nJlD;ek7ky_7hM4)cN zuX|`>(_@4=x1{t5NVFVWbw*#9h1w#UmX-LP)L%Abz0a9~cOLKkwu2f~h*g&5=l^$o z0dpTH*`@a3wtp+fO{6nP>hK?}$#Qw7tIZ=4I6>$J6n`8%X9u55m4quLT){;Juk z_uqyZs798+34Tq=>dW&_*WmsbK66{Oh>HjN6Si)2$7E44H&`^C>RlxltxHZ!4sS3O ziw#$NeL?{IM1Jz|nB8{+@DqUT^@ve%AlugiHB4i^~0gDrR2p?00a|I1XK50}9> zxnA^Pz+%UPP%dDKy*$l_jpeYz9@iN|dk4s2lg=b+ERjNFICm$_OtWoG$PF0P8v0Lz z1*)quzrFuYkq##Jo;(&!1DvmZQdG8uA?hw1oy!n`CYZqbwQE8gcyavy-B)KB12>|J zRp6Ovqwdf*OrPqvO|Xa&QefsLMdd@1(f#t!KZ@>|!0-)*Hafopw4xdNm#UC29d(qb z&6U!8UGk#S?e<4_WUx6P*n)-uSrWg)3>w(IeiaOYE_=`9u^0ht)MpnaaLj~V^J6x0RTm^~ldv+2! zz?XaF5&w?8BZW7UG-fpio}1w@;2SzK`o@4)t- z$)u9{C-<;PUnltBp^MO?10^yTA45D?k`WIUeZYyOuN#Q~F9XBCq~XPaBuXnpfefaZ zJerKgV&^c?kWapsKWDhop?3eb(#j*WUa$`9)FN&yw{> z@xhW4mMjTzuDZofI7#^tQNR35JvHpuGqxmZjqj2TIs>jkqu-^MICN;8UWIp^R_>mx zMWqy>I|fCs4>1&_Z|do2qWa0%Q!|suXgz}y43rmsgJ3Q858XX4OkkW`nLBq^hs}YUFTE>L zS<+Q?ho{1-6|fMqMFA8mxhyfFV%1K0{r31a$DxtF=%jROym*700?q5M9`Al$E7&)2 z(RZ4>Q4QkoYLu?IxDUS;7TernZn?C0b5Xp8v#}Ld-%j>lg!!mG zwExfeF3cvIiJt<*| zwAvk|sdIF2TbH%hcX<*pTQU`~i*aiD!7+J6_0ttJjry=fdss*6FH&Aai>igp$e`f$ zpFEbbmY?|!9xAcOetVB5U<|96ssd`NjY*h@#E2&};v1V@{`kfsjnS`@n@Vw9 zP18)Nq3)8H-t<@+oR=G?{COW#$}%0UrGPXHjR#{#ZTcV| z!SL+kXUM&P=Po*LtaP_zQP-yeP`L?=9~$Fl{}^SR%>pZ3md7paAbY9_WC$;=jwO-* zstF*(nPjl$P%h-_8UktjMK@%64S^hCcZs7la<+y*7+!jijudvmAE;&`N>?jidP%`U z{O@Gw&?G!p%rtHMmiB{krbwepOkCDALI=tH(x_4G*Xv-na;X#9%jx_lOets5Z$W$6%Wpi&Vw#dPg8Z{lVm( zNje={dio0;u#2t^?bWbTFY$ZADF4l+?{8m^1W_;*QYW?W03b+_>HeUbQ( zKd6Ur|FMmn;i5dljz7eni-Q>dRF+!#BYCMMdQ^7K2lTcC7A$rj#|@bwvmt_6;UG(V z@$ltun39LQg=9Vm1za5r5Zd1CV5bucfpyYzXo3(WEa?kO%7B0In3#8aZn7qG0^xJk_x*YY9HKLcpZN;RsI3o7 zZJ=~56(%XIyk}pt>Rns1clwdxg!k>Nr1iGRebAx+0dE?+!249mJ zM5qZS{!-?=B_HLF@E9x}(22N>Ld&u%@6DBcGEa>wd%ZkMdk>9p6C5wpo%Hq;9g$wA z7m(E3cx2U;)#uIUn%*B={UHuttm|q`Sv^fKzVOe(gguW&54!!C_f0+3a(3}!UmYcp z!4FZ6EUAMLOzqlxc&R!C`!{rOO@zkJBh#oQ2e5E&X6I{yB+^rzDN zPEtwG^Zn4VqZPEFUcB$|y?H)8#vLZB_rGFA$Ji^v%}C-$(k)v81(B+Kwoh*9?>jP& z$W1X9=@?X$YXmX;%rV>CL4D*@PTV(NIaXFk9lap#D0`}#A37Rk*hfYZ$%1@GhE_p0$5aYZ`P77e$zhYSU@{`uc+qN|3 ztI1(wNJ3bli0Zs^w*)Gwv)%%zY)Rya=>96`1c!58k_-Hw3Fczu+k7mzU;y~lYiv~E zNav1kL6RwuQf7msu$jpTjZPa-gA}X@Ma6{ z^Zof)>+#TRM(rnU`~7d}I})ztV7?Fz?eYi~!fDhb0Llsn*I~Bl0gR z|7;?8zLk7-brqA_694(}N%HOc>z5}5bWle0f|dIH*D5Q$YgY1YuM*=$O}DtG1nt?= zekH@1j1Q6cCYGA|rUCz{Pls%L^4wIqr<)w}EJUpCxzud$00~3zOC{6ixje#a$;xI= zVy%BA+k298JL}f==|Xh)XM1L*bj{gPm&V6NreMnQ@|$J3;{Di8I&Y}V>aEz`;;}LAN{yIsc9TXtuyIfRfGim%~OLQDFF>+(W?(D>F?49%OnHWX<2rY zc)7T`5ETk58zN&gE4vdl{n3xB1#AO5*(=RQAId}j){8``|Ct@6>yBJipY$g)@au#sD zpYL5`5gOSHu#`E>G&Ng2%j|GCdRqbKAe2G$za;PzoX4`wW88`0X&#Wej6}bPK~uY{ zA{-;Z1W08&N|aO^kvlMp5CLAZ9X#kCAhVP7Qe}R%G$!;b8w?J-9(djT6gn>Vxf|H&*TRB565!Gt2Pq+?=A3pM6=wV@eX?L{Hc)Ni*_PAn5bxEbN$)YM$2n zp+xpV%G%UG)DX9!R_oE=S==l7SFCnc6jP%=H9{zwe+nN}5}owNGIiyeL6-c)bwmbienr?b zWoqUZPI-~J~#MWxPHnm2CRB#O*(blxYFfk}So=fX{E!9OhE<4mtkyyB~@GAQ!+gE{KRkLz5B;{cY}qni!awU70y%m;lQQlf(asg0q1z%{-k%>-L& zIKY7AXYR3(1~2X+p@Mt5Au8 zK%jLj0a{Kl8SH}s;3K!{W{2IlCxhG2b6DW@p8e<`{d4408;J7Ah7b!a4L1`g}NDGKMKj_=o7$L3K4Y{4UjF$kyeNl#-xz| z4AxljXE_A~ z@K`D}1|_y8D$4&W*s;sOZ#e9?qxLr@)0Y!JlTQWmL?r^nRVu&uJe6l*J53kS{N+8V|hdhSXu<0eC?~)xs@4sr& zLFuZ#>(ss|Bs((-ZSBeG^8Vb0e!&qjkmuIqIbD+^e$-1r&}vFHS@uc4IfxI{3a2sV znPuoae$Il{{@YJgh1U>xTl_d-*8BGI$hmt2XGOhddLwg<4w^465E%aNAeDVw&;aC> zYdWCl-0e(pxqF7s%vfQU#UI67YrQ9Hsc2gEVuEAn?C?{_yQPI02_h4lNYFqMmGi_? zQHTL+PC;u*V)7~fCsFlVJK0b>B{=No!i=HqQZ=>Q8{aW0kCO_DyWbIg{d8gDh)|lQ zlaLpDyD<@5M_ug!-ew!>`BvR{8>mDH>IRm(zds3I(mIFrJOdJxU(Dq(b?AdksIAo_+r> z-#$&I46|92Js%kGgw$lD^#zCJYa0ju7g`>HG##e)h~9;RVrpAvluU7M1IKkW){g{d zH3%<+-EKl9?AG@cAL9~p%m8`=GcMAMJQD2_sSap=t1{RvU7!gL0=^F)fBP1|?CtST zcIQCfpfrgg=J|pJ^d-0^q@|G`b@v8nw=ED*qgR;`V>Qh$xvO-!8N@ zlr%7w+#BEYT z{D@lHjh|dqbq;)+Xl-ny#U2=*-460CzCinJ5^le_FW4wNZUOfI4cIKo6u6zf{c}P2 z@@uDizDcNf4=*4(qvxCNfjU!>8950U#PItg%kbE@PcFt|{;UN^x$XM|CDtQ_pQwLl zo~*FWjJ5Dqxd??{|FE}7sLxE|&h?RX0I>ykl?^-}SL$lj|q4BP{EjrIQSGTAIr82GbvW63NT?x_LSRy=wQB z9{#gIxZ0-gaAybU+({sz_Z?I~C^SLAtG9i5>vd(4j`1Fmz%RJIn**oex?D z!sWl%TAL-IEF8A9xKK-O9H#>AJ6_6mcLAvIwH|6SPCf7NyASH_c5N9dw^#_u;ePWz zXZh}!2m0sKO?5t2J9%+np|JU847m!g(rw8~{O*{L(8#lItyj$S zqqm|5-uR#- z%NvyqzH7yezh9^Xf`}UkWV}D5r`~)E`$Z|wqXvGDWdqqQ+!E8fsK}N&LoK;sxC$~0woH5GPHaKOZ z!sKM4ti2yr-`K@2^EvlqH~({7oO`5)7%@?nx-`L(r8t1NuH~(bzToA-!nO7f5Wio z?J9G>;Ui>gUd8Vo>Ttsf#}-;ArdA{-WOO^k zapEDB1M^C7Z`5K23ykTC4fopB54D*65j@>&o}o5rBrr~%4>5>; zq3Mxe>9EacbezIzKB$2a6;3|Vmj!JM1IRgi`oPGT*i@_n2@PV#g${I=1FmB}99&Od zb$*r<_>#yypKtY!$7uDHp;`2g4=iA!#PxTvfxff8_#mXAyU+mfl6+BjPH z`)($+);`)}^I1!vFS6QHxYl>`Ha3j&D^157sUM&4_nJpCui zdS3I*?^E7OOXu{$QNy4^ljRZl})u=^uF9uuW>9@yvs? zRx+T0S?-hD4EKvsx4a(R<8K5cN>7((ofJ|l&7KU__$TK5lW=x;TJQmjeTBf7yrX)p z<}@^eE9Pf%E97N~w^E2*;(MJXm_PScE}E=TZNDS<8->ya$zJq4kAiEZE_&XNcDd~k z3nis6`nE^v1HD-IOJ9h!&0e9?J~WTsr7f`lEUz~xFpv4p2xLT z1C~Dj{$@otyxfAAkC}D0q>&bfUSxy=aV=cc=$KK&~X%5zQ z9sa=ey3MH-2YIQ&b%oFV(-fM}%NZsnx2*bb#EU7(*U(JqvQ6VuZp-&+gb`(wR+BMl ze%F{Fm`CktR`juc3My>qjwW=QuCh#H(gUe-S=F72?Z!|bu1GUUIwfXAml=!bCe)Nf z+05JbTJ0%My0&h%!rF`9U(ahTRemQxJ#2;l=1mHl`bFSjb|?(xuHw;?^gd zgIp;g-3VEZ*?8}6;Cat&?UqsnA%k|f6JMsv;+$7ZIb-K_r{^kay$|aRjW`QltK(R$deI91E4eQ$x%sw1?3+*>=!oya6#w9p_lgGf+=+?0ws|HR+@iE^#AIlk`NHBHLrhxqJq*iw)sFa!EO_Vi?~~4@z*Bx zMBl;yb`+1|8*w;JNJS0>n@0;d!zO^>Su}di8TJ4z30;bbqPVp*rwnYK3t}#8xt8Wpy3&b zgKP*+d^t>X?fc`n`UYO=?+y_Ul%^v(YAu|emDioXvE5DeX}Z5?$8Qn*vQ90>gWqHV zbA8bmPT*+Vri`j;5(Zr5ETBxF;!4u5EUZ2WBFI>tL*wfD6jI-j=g_QWJi zW40GMb>KK$wqy9w{f`b|+IE9U*lpBcQG3+46!h+Y;fZDR#>J@t44y@y1qJUPZ+5ME zQH$9Zz#|^T#As@sb~z1>#7+8347U9S96017Uw=*2xGGsO2GtNFliutU zLdo8zR#|XWL0-!lzK#~^KzV4B90ODx$2+oJ_3X4BkNtmtJ>6?Kg6kT%bJONEcMyqf zAbb*$yGJJMEmBylJ(F7}J=X&I#&7_;zaA2IpmAwIhGdLI5DF}Ob>HOlzwE3{=03vs#M zJ=?&;=DOau@AzS1hTHCt#|icy(&uf`=YX1b7!o}Y&U38E=f82ItPIX=Pam8HzF&%$ z1Uv-M?c1lcZ}@h`i^p#L?$7QIj~*-I?6^-2lAeqC{=Xjw+$yAvWLSs07G$W%B_QOzV7~mEXO&ZH_NFnh@c6QsLgDVB}trsz8fL#q?w7$ z;j4is-$J*c*SWxFXURT(&LXxk4GsR*p*|t21OIrn`O>d# zbDzyEIAIZG3B;_mW_)jrSyHj1*6s8=lNL*BIZjd6g1DSNVq6mTDT~v&2RR5l(`wec zOl(Kx!%0L*&eo4=4qOewZd7}7NyuAYYCgq-X^h|xIEgH zSfc_qOYSlh)oPI0Q2C>iycY~@145+XdywXWhtDQbVyaOAxvTA*MBKLKl_s9TpVaY2 zl-rp}-^*N~6&)wlq-s!ED?(-=Co#yqK?3G`xk#cR0uBm+uUyix6+-pwP(fYqjX_5s|PV_{VNptFY*5v+Mj z6?h5~AYOJ+0yy(G0M7iD4hxoTgQCQke&Yo^#Z6aPP~t4}#&4lIG{C=?1-^|u93o(Z zOP|=M90JAFi&N?!)Yf}`NcL8j% zO}zkgn~{jNnq-F!I)eydeHO{+16`HO*ErxOCzcq52E-m^(Ks3nPFR$db5s354&yn^ z1F=BoJAwAF2lWl>SE9)R^o{VS&X_1MXuH@<71?}fuLa;3xm_KvPwf%~DFm606Zkme#6!%b09d6Gp+6#O&}{dEigR(x*fx$1oWAx8n!I<25@Xlrnda=J7;Q zt&l20oi{QEDw&jTr_I9XUZ>{ch(Xn1o|9VNQ(yV}v<~Iz&bZ)vWvfs`)Tc4HlKF=l z^l3Lj)ITAqM+kV~F&th`il(gVIgS6!FQXBR-mW9c5VJqYANoxSB|ld;bGDF=b7sqF zlBNB9vTQQP%t^C3lul5tSgf06!eE2Rl9m52be->hvYUha>2j>veftv*V@5+_N#jUM zb^Aa799JdyV_KR6F7%@82i3bFTK%+R-Z%+yEtcC~?RIl!aGsuvUEE*G1~12Po{&@B zej}o{iWaSg8$QIf=79xl-%XH^L-b%rCSMW0U<(gH*syIVMK!DB%q!XKj=U^+DHcZR zBYYW*qrG*j_}F4Q-#?hJ8J(2#z4&MY_Rht2nbC{8KHcujSSnU1!kF;XN>d3x+8r6$ zlX@DQBtn1(_midZ)*10gEQI5BPsa+~{@k9P^KhhXh)R1L*t7DyNWD+B`+C@|b1HSx zC^R02j(EJ#M3CajAmq40_G|F+lF6m?Pi^kMA4p{U?I>H<;EBCX#VXO%TT3!k@)k3l zU<={JIGQI^;>`jDq$L5r2I=B%@C)M}TH^^3blt;T!1-Ud-;7Qz^Wj2mC~-xPEm(0K zqAa+cOaP)tiL#q=Q-Lh`{<2~Y_Ct}8fq6P){SDVrYB>X%%xMAY-QChE-aF{$pL@Sn1zje=&$8* zPyEwMc7-JNY^rhm6FZq#Iz&4H<%YYQih*y+&pqY@3u3(`RB@XJkva<*o!Cx>+kK>9yUXE9eGXJ(q2_=khl%`ymKGSm$?0 z&53=@q>7eHpie+GL2JU#GI0Q+u-Kfyd}V)i+^Dr~eDVWf*X9w@)^g$-vFt*ZN|M5( z)8g%eh4Sy#;OMVde!}3*K}_$!-=lvjmKf8x&wnqLg7W3vf6eCm6QU1l3RYNmg0nX4 zKq~pV0fcus*M1#H9}K}$0?UY>$UF>z1pM@K{PX1&XZ?n`M|P0zrN(S2)CloOl6jOx z7u!_exPkJMtdJM5V7Il_u*=))O5K~lhyPvHGTg%{{kztQd#tSt4FKp*^0&vD>DY!C zw3P4LHoiyB^b8#kK+ z;BS&Wo}{pI!x;4KBtVJ#!e=9m!xv{U*ytqs20;+Q9!%%!Zk8o0X2gLTep_S~Z@D+3 zu~B0;i=KT%hx zb!Fv-S2e93wV6Yrsmz7v*{n&W_(iHfw_nox@+{hu2xilD^$I;Aubo#sQWfrx{|Q^H z8R{hS7^R*2zb7j4corf{QMKSpNUuguBO71x^YC-+?FmU&K7vx1)3rS9>vnzmh$hFt z{S4v0Z&zEoZOqXaIQ?$w<&aFl+oa!OkJMSFUzQjd@3SGagq4}p@<9}X?mrYLCIR zBM@~7k%zjpaQj1Uy7xQ+)n5O>JdPpy+UT^EU>hirbB3zOmk*s*=I_nPCp{Wp%C!4! zj!>}2KG2y-tw<_PTdq+s_U?sA-Fer}wMhj5JM;E~6swO+n(q%@503nP+ETrx6mJQg zzOmjgJKgc#hhz2r^l@w7+yoZw^d^JHqna2-#leHiZ$7v#XyqvEZ>esK=s92g?%kPD zymknAqK8gY%w@`-EjTLlZFCMCU;QYVC{-0$9)1{{(0-D1`xJ`f-}Jt?$T$`5IcH+~ zv;C~I*BT7+(?{pDzfZ?wQjlBBSuTN;+MThQr@ixk56|IWQ-%c2-a>{+jG6Wr7`P+2y~AwS@%rPQL&v^7<4oSNS_a zwV2#M74y_o-{~qurFh(+-eYHB=SDiglOWp=9yN1!f6L*(aYxzUS&gp>K<=~a-(SSw zTc`83;z+SEg`R?x%~-8wi?D1GkNO|STl*u$)*d3Tg@Ta{-zc!Z)ZVp!xSsPQTu9J~ zaO!JahPi@|K4mSB+s{MlmI6M$n-t)vtM=%=rT%sDdp()0|EI2LbpyNJB?q%5O!2vxw++8asgxoi9STVIBGO%w(kZ>f(jmD5(k0T}-R!b7h=kPA zA-jZhclY=FzW_ z+JYn_nZv$+yXZv)JH_|ZRb-~%`8kb?cq*EM92MrXJS8nGBGZ>RZG_WedRXr^YTEy1;Lt^ZQFm@OxXKTqM~U41raEY#f!zz&gqV zOC$EUUP5TODB&TtKoI3W7=npL4X77-j)QT(1jvK=?0tDWW|Gg|B-lVKJM;}>fbOHn zrxKtA>}Ud)9eXll0*pgLLAW!rqo|b}2!ACM?kuo#Mi*!%3x*J+ny;5dC!uBgpN;FoH8YlRrj5bg!{Q0iOEF#HbRxbBW4L`_UsVP zI*3xfDR*~kR<4=nE}iZ9e2DwKRFCF3q!Qy@o(?0fBakNg#)ew zN7{G}!~CiFmL#*Ezd5jF!>?9w8+1;5;ed*Gh{Gp3@%PiVy~%tH2wqA!^nRx>i8CAz z|2bB{o;k0jBv6xrS5Lbjv+o~-7>?qf?XHf^cVPY8uT%8_QBM&5W4X)qV7rW~6MEPC z1ov}XVAZ?*w2xn9FSlrCtF`6E+~yR%x~(Y~+)k<)@9ilL0Zix+!`2($Y>_y;n_&YYiJD%A)<-(5rbNA&IT1H;2NM@83S{A@6cHJDNbEQH3KCOqm=CYz|WE z9FJL3d%hQATomNn&NmOs-9m%n_bfOJ%UP8ytzN;ZV)io^YZ1E#Z({IXaOY{#C5PSp z-9?01-O>5jn1%D7|CgnDzRv(ejnhB(!a$|MhC!W7+d^X(?k`XQsk9KaO$l_cBKQ{G@<} z8v~T#Y4%(sDA(NJe3fo?0*HmpADRw&c;H06G$n3Xh;1AwA2u3@*yWN1N`rE8H{M~0 zpGKLs;MLNJu?=WF1`w@UA1IPQ&mv7Lr76>}AOYEP+>bzwr(OZBI97aHt^YPQ4e~6U zQ_EY6Uf$>DmqQUKVq<68;b6(;pcd1$ zz2ZxkMb*FBCsi=AX;#haCb$4i^IiUI%%=l(f?!2C8EB-t-Nh7rz@6TnZja!F?SPik zD>Ua(%5pt6Z)-X{XFkK-J(gxJm!w>AJ2}ZJP{mmK-DkbDdpH|vQ>Y2%CnLghv^ZP& zdyzTQzxTz68TmUlUB|K$uHRq3FuJZQfs%IiQRxCd+j^;Nk_ey7&X+sl}^L!lx873tZ`bFjW`5;>3Y22kr2q`pQ*w|8#Yt$x-&%5DK>quh1e;xk648cYNKbM5M(a_vpl%nuMFDt9onyYnvba3C!C@NvfCjFob+uy-DIc@+Yhd zzYV!mDRaz0D73fGX3MYgsSxVHY5a7LD%;eNXW7-ivA3Q4^ z7a}Hz1>t%D8TEm;UyVxruk%{6nbSZ&Dm9+`M3fu&^AL6agCU-bB^T(`G2o^%%A=>T z@~dX2S*^wkIK;)tP*TY$c`=y~K=<)+kW$8wueyy1Ze>LI4IlChG+Vi^69=-NaGdch zm!?cS14D-zj9#MPE@6n9D`gvqqzWhmVZeT288yWQ%iSLq0b(!G=y@1ISUCjLLb0HV zTV<4HW|iukS)`soAI-Y;w~o7iuuw+J;-+f-_t;A-_04it^29gPB!e<9vOmzjsy%z- zkcsE^sbD8tIfz}iaiiFNlD6q;8w1qaZb|f+8(LEl{F7eKVys0h<7Bp-&4gdxP^5e3hC6AK$?WXuKzL}`kUTTdMM@%Wc?VS-_QX|?hG_+8B1Dnmz%jEN+p_3!_ zXHN}A1)-htt)BzWiE>ea7&!q-$mE=#$v5-OXR{Mo5baplgmLAZQP3Cp*d~oNO0`6- z80hR!bOEmuA8)mhclA56LYV%vsk#dpC&aLDci)bz0)qvJU>1u+)7m{x9>C1rHL~mE zaM#!zap^7U91yUoBi=r}a>0SeIyH#TNugY-?|B3 zgWnF52uI*!`pD6KMfNlrr2gA~*R5W*D-&&+)6+jFH|x=bLw1u|s1)-h zjC|r)L|Y3ckeH`H)nC2<-#$fo9-5@Q`G-OML@ovN4}%d}GF0vmA!x)9R0bbD_B1CP zR>$Js?sjjxz1+sB*LXWAaG}mpN6KcM?Oia!Yok>(#o(QDgntmj>EUe?-kvZEBI_~{ z>dGW#c=xeXXW(sY-NJt@ziq+@BCJM|L_MSR5x5?Y9%kx~57(n)kA7W6p&_SXsP;_3YO^e^}Qqn)=M2wy~WJxE<_qRNDUq3jpa+T%b z5bEfDZ>VM9pcF64qtCYVgPrUgug=fUn@;@DUf`@#&{5jE?~03=ub% zZ=>T{Io#P_cWJS~oV@n9eXjgjl1O_!hO%1=3Qt*}LpaKR*^)d34}+=$IOW<16-0YJ zs_7BqGNB$TKA6};7@^*dLKyN{%MpU5p4YB4K`FAwx~44k%rZ)BPcLGr$(Mn9XR#JC zdnl*1rz`mPYKe>v1YJyh)w66V7MQAe0#vo0l!o$YiW=HN>+Vm;Yjb(446aWR4!9%L zQjgHAelEdX{o59wj0TS<=g16>{ePiT<$EU|J`eZlpZ?(+0(w7=$y5@jp0@UX{@C&u zr4%Fu{_S1Hp5by~l#of=6M(0s@=T#NJva9^=(Ar#rZ=3%W^e{ub&UNFASW zfI+icahHGYwM=zmX_|ojt+N#DbKtch91BgF&A_|4cC7ZlNiC!B`0Esopsl|OLQp1* zd%8UV7Tm(9)F1NL(!e5ppcA^GY$ItH3kbD0N`SV2g6o#IKLK=xtkd#i<37Cl97TEkYlQfVqU86nr1mUVrKg=`?2Tb=-3{xo-ABMvm9?R1=XS9q8niKxf@ z-@zm~)^e0ahh>`B?L$sLdY-5Vm5jvCm$|^GtZ=GB>%@3$e0$RM6E)XJ-BeN7-hA48 zZxvk&!8||9f7l}vvG>k5 zaH|e>TH->2*lLxB*)6QY#iV4+yvMALYg4X=B(B@p&IfI#zqP7s#N~5WPl9|nA_rf0 z#51XK9MeUZht-@MuL=%f{e5-O`?B5)1G6Mc*zNgDH4>}b@ISOGsMRY>2M|DxcW~-A z3{Hm!f!Cpf(Zj%O#OGpfyi|y+cD}>dNVCnS(Gd&Lv{!BDRgD*Q_bILU)Y&{p>FH$u zRg-Ug%RxMZQDxb>>BuOC`%8bcWVg=CMucy5F@8qM7E30e}2k zbc?osR&~nW8b%njSx<`c4Fz%EJJKh|)zwl%R0sRIiYnSD!E^G+)3dVAp)^^ppd@i? z1u5}>^-g-!0Vf79_5`!lF1&}YFHr(28EK#({%?03JoF#X%O$1+;?DtqXh827DhLLo zr95rNNWrSoh6cCm-~wW!|4_s-S-{qH3P?-Uu>S{<7^OssRO*_otK?OAF$3fLcmjwZ za6HflW*h|^T;5u{Q{H2qPf;W8;McBWdHZvCa8XzoL_4r)?846(9ut?syMf^cWeC(` zizR@}osQ5#&nUM)b4(t}GzYJj{FFi1oes2nmWo{KeN#&|OKnbC<3K{94DD#_Ixvls zqGNeuQKPupA1p6zay*J;5Drf^@g(FvetC`8YsJ-F_O4r1eL9k4mo3dstknXikzHBo zZI^+&$WKxGL_d96UFKp#gxH(|R71s|^gHZnOqis%T0e}qrVN=Od`lTDb=WrZ;2DS} zX~(jaU<_zIrL|XNc`MfB#@tHrCQ9{hZpPfbNl0{_XBfh; zF&F=7Pvxr~WabUbz)jaNbG6w@ZnWmyBUbhSqh7WKj?d-P#LNS$%;oqy~ZX z8J&Q$S6bIN)9uwecpgOyATH4Sur3bkY_olV%H|S9Iqn;Gz(9Y-fWfYxBp9P{me*bx zW7{cgBctK?9Et=Fo##+PL?#yTP;!(g_6w6IkRDy32VkckoyM5mAPVR>icZbYz{`CQ z_%yDm3v|Y_K-#c>qYQX}BF6O5=e7GuHW07F!F#%+fzkm*7;omsq?itdJMe6^e8bC; z3X-2|BD^!rqXM$TjLG~=8h3A;XaiCM@`Ca4Maz{!GLN=M`H5aX56%bu_zdhBs`2kQ zI=V7t=u=BA&2k)79tXTCMpul$4}}2}WI1yOk$H%g==>F$viL`NalEAU_8_o#RH-|FgJnl7xZlN!IyuAGZ%li zreP#3Z%=%#U2Cb9aDUs3vH7nl?pDmp`0u+f;lbZL*OeBTq1WRDHv*MBJ}+u-t}Fs> zKV9+<)Rz(_)h1n>C%9obE{&K{?rWtQRzPLHdusbnLkMCA)kSp_>69f|6!1}ROcuQA zm-h(3R^&+23xCIw7uab;?vxvyK;4xt1ex3_?p{D1Ok1PFn4hq^I(%x|`;{{#T3ewY zT(&ca@Atcban|YQ5Ij+GXZDeQ+L54FyYT}8SdVi|Hv5D@?ckODy?pggdF4rws!j>a&c@9?-=%RS3dl49?vj z9~!&Z^LcQ0@O3YGkTSdn0`?)GSSfQo%%-TkpA#h8l_{#35;$dM$3r59ffuWPLd1{4 z>(o!NXcOPVlgI7o2nk!irB|xK(nbwJCt}OnV?Xh{iir{8vZk6Dxlx2b{aex({dD^M zF7zfdMEMF|HcU_K6yv-LM?`DCWavt#nbp_TXhx14ariz0-ab~DJkK`s5*ZwA&EnIS zuZt}|vHT3U1<^KSo-VY`*{|a^6s*5|omJ5FSD|Xf%4L<|jYjGygVXs=ZDo;e5a+Md{W){3C4GbY>y)BJTD2yff3a>E=QPmY zBOvq`(|J{aV#*^4Bsu4ap*PXI0{K^`lLJbVk#4d@qSR~V5J&OVU>H+4eIw4Yrhw?;`dcy>Wl};^;>tNmhX?4a1wn4z}Po^0TDN+1kfG7 zK}Ox6Nzjkii4E%Tg(eMym;tcxg-!uv_|ZZ+60rcpIpP_m(Q`0dNyD=SxuKOY(kz`g z1Y9N#R0c}HgIHUg=jJrbg*r&d?owX?6_BmjctBogb>dkdZ>Z8kxzg|Zkk^9T9GYyL z2}vtdkzC91eiJ|LQ6qK+L`z16j=!<4U1-rcVnXv(=0;l+^VWj2OAV z$4g&kHl}GHtz;thLnWKC89!(Gc-;AQA7T+(2WsLePy;SDb@A?l173>)+#N3mly zkC97?qJFbP0j)oz^~?IS29g=;-2IS7AgO$@rSILj@C>aQp9_iAhh~J~%4gJbReq|w z7#DO_va;&OT5)IFKUp7onmmzNG>~u5sy|Vpv-(b0>nACqtKXUlP*i~Lof%}I&- zw0!)1bc}{kU5@6zqI+2!Wn7cy)V1Ofvm5$OuT7??c+!o*h2xmzKV8RZ{&#wEyyELB zwgxO~SViCFKN~cD8-kXnm2dz_ad&d@ztn<&C-Wz(IaAC18tOIP9u@}>&Nuwhl3NGf`<^C=BrBn)>k zG+V2L<`7#J2U#K3;)b?too()%=6*v3#g&kK^g1B!o>o60_ExB$P-DfQW4vn~oy2o2 zNFSat#V1MIo})r;wyH!&reo7WUifAt@7TxESi2q^Mc-<^e9$$Ce}ab}@6Ul*9dQY5 z(rsk`PO<{Eu@c1LHjs!N&w8WnT^*7w1O=~Jpk)oUTjGtDPG$oBgWwR>?^#FI zdpX^VjTdCSs*i}ZuN}P2cTp3lV_5rHaS;{xUF6#(Tbs|R4J4@XCz-g#r^Tr6i`&$b zJt@;Ab01EB#5cim1}{@NPq>5MgU&v0W}TkO0@$MG6f{^0zBOKwVfX!a$gUM6v5IBfYd#cM}`J)aAxn> z0wrh`)ClKGNQPiA+9?QR5ogRc`vn_yGLHwB%|*@uv;BesfVO$^dYO~wHRN_f5?%IL z61_bM{Wk588^STMVKQI%y^9baW(SV@pw>P3tiOa$W3+`E1)aUy99Ml~tGapW2( zp7t2L;AP8KPT5;;!Tm?{tJcvNHChi$g3fa4rCptN*$Y3o{*$25Os5r2_Nq3fEN_2& z*vx?vsFAd~LLKk|-U!L4Han$8=JQjtC1^r9g_twhboGsxnY1$1X3g8`ezyAy`vw|v z5H^UP)M^btDS_D9pW1$ghR-g~19fdjk6}r`ZCQI=?LHVey!e4Ct#PiRusx3P`{yI$ zc_O%I!0>n!ZF^Avi@HsTH}a=5`RK(Kt2GIkKVK1~h2By=-%dJO+r4UMqL#uEmMA#TK*3tCRXI5I2jy&3AtTV^e2ND zEgR1J`1`L99D1&5^b;;-uae`egkD3rX3kxP_NE#A1jO&P(p|3uKD0GsuSl*r!xHgV zWK~^A-3eV*Tb$|TYwdN1IA0E!Y`d|;LKd--OH?)fMJGLbIZ1i?ZzLaAwif=P_>t1kAJwNz0-qEvM`GO|Xu!bMz{sd8FnvsovA)+0BQ#VK zFj8rxQ(gjVQL@zGcvZIdkf^tG4!x}-2KzqPfm_7{QTY;Wt{xEpJO&seV%jji0c=gz zw>W^O4ZW2x&M0Ykc*4UBWc093^Hrkv0H7>@61f0o1OTZP7~s3#1dd-g^MHrG0%u`o z7!Kt8D-lWo2Vo1|#hNS5jS&VaD|Ik&GxS6OgnSf5bo!W)yDtQn1t$4RqT~>wAvvIh znk8%+3L^i$7^IK>+XlWp$$xVJsN8kki(YKStTk`$X;Tx z#(bJG!TUIcm7lJf*>4j|op3Lq8FH7rT<;AV{85l(A8EKRGaWM0cU6iy-R#BGC0L^! z%@hg{f%Z7}xY9mz;d=Y`)vV6v#kRCiyXKmD8@ctS>Le=h>=2QpT%+|as{yZd>g>(f zlquy|$Hh;pUt=D0z72Nr1rz@*f6B^Zw(2xoRY#Ii$gq7fzKnjjpEoO;W5BaoJG1qV zE8tWvYX^$7^cxa{w5o@INPb zjs~&JY$aXI493&fxu(g@;fMUeEgGbclJja7beiF-WjF2gV6!hB+}9XxzvV1|aJmE( z73%KpX5SQxvVwqgg4}2}*2=RCOSi8ZZEQSgT)uxXcXO)(>(HmZPkRj}gaXxwng^nX zp%lL{D<(e-CsSu851Z(I(@&x-Z_LYs8>LC@+wj$P5kim@d1oESx+KgF`4spR#CS z)+s`N2N^VmXDtO}NSaZ%+3Ql)#Gkd^Xi*VuWlxtTjgq5&O$e>Swrt*A4t#_wtVa)_ z&DyZS*Ch@Y+$>k@pzkjft0gn62k9_bp}rmQLKBNUn5JKUD9^&edRc4dw|brxsK3p6 zeV`RA`I-qhGH1xsZ6O_scq7zd5xT^heUL45ol~=OV@4kWGB!iqXOQiFjC_tmBRW*2i4D+a-TOhe-%zl>+&vo$BFy8+3J`Y`C8&K}% zwSDIzc|d-t3#d)16sb3mye8T;_UQFO1VBjHT>6Cp(C(I*ZcQwu2swcF?*ns2@eWoMM?I&^`9QmWIA@zbaHzO{4^$f@1M@ zkvJ@F0~N=f5!udrZ}`flLeAbgZ&ucO-FiNlr@5%G$cbysLXBW)|KXCX`u>U0_?LcE zZuD$gCwkH$(oLt2Q+9KCru>hMG}G*EuyB-ty-G$|*?ZybZR-!7qjYnfi7{NqI8WE> zKlt#6ZTF4w3c@w1s~OESHl@~fylgk;l_|H~0+95g)Lxg4x<+|}O9Cj>(NF~C7->C_ zRPCBH0<+cpgC4T+N$2fvuZ$;O0+9F$9sEc{+fg}~?;nmd`eI+Ga402@gBIxcdxw5v zL<3gl4QWHiDPk5_F1|!@UW}Ln9X$T}e?V|LurTlI|M9iufm1~%2`Yf%`nm|b%aKi8 z4WMb?B7)@?hA@Ch#pHqtFgRVVmqAY#NujHt`s2yi{Pu=GD&ZLfa3Ivr7658KEMP=d zk*|WaKm$2j061vzDM*xG?;UvPg=MzB;RRrZ{=rX(nqY^GqVRqVfMJP2ptMAj*QiR_ zrL9Uxz1kmTz}hSZz9nl~UwUc{5eiZ9GWDNfDlZv~l!5*FqY)@CSZj25zRU3$xuc9rEixaBHMbuBcr`u#*uwJEfvEVGqZOA z!I1x1RXXE!(B{gBzsIRD{+XG}s9(9LSa@+l_pN05gm#|w?N-6B-P2J)$NBzugF~JR zEq{S`9Q`_mou=K{xfsN>S5wViMc|XCV~Dcvwn>snN>eZn*))12wVqgt?JWi?bcSe8 z?)_1{ZIMzMo_^ni>DE(^d!5IuYW!1P)yOIDYWA>KoWI3t>jz=hu;w01vH|_b!-a$# zV~o?CBzoEHXJrCLFYVtUrl?}fr7OPz6Qdj78q2S#Ue7eWUEE3c%_#jxBe5QP`U_px=>y;?ObP+wA3}jFnhgnjV}lZe=RsHL~DZ*|UFT z_BuFfl5^o?t$sj>MzG;yAPA$ZG0<}((ApH~2KiN&ZEnbegd$}Od>Ob?L#=Mb4Z_{F z-Bl2qkku6XI}8Kpy-(;dKu59WMV$;yj)6e$QB#Y%z&;ib-P=FsBJhP3AjO@IXP%5B zAc|uMC)3a*k!Kr=6*|wIH@RPb0#=>`V4j}1DZT0qo{A}hZQJ6$^%1v7|FER@S2u@V ztlEcTHaRR5DKT@W2nc~r$nT(e;ULS28xHf-G_8itJ7}UxRC)-A=Y$s^0U{MhBilmH z2&v*}hD>x~|4jjVyzRyhZlyD0ZxL*0}7L6m`B`()>*i z5#V21482l{3Ny{gP>-;BZ~rfrx*8F}7A+|g8W5;LyOkfmH{jgr4I}Gtm|%UhqGC~s zvm2pPg)jyP>GlV2%$rR)XW3Z_8+z=@zHrSw^EGBwvS;|$T|eOWxk)Z2H53v4qxsC} zk~vG}&1zRvp)asfH>1d1g^`)@1*;MPY;JUP_CoAvv>A`QsdG zWi8atx};5{^>|G0ukfMu8yC7GNqb#&;*kH`h6{cVU!72k?nF|otIo7{WtCO|#f`Dz zU}yR%?gL9abt5vvb9&K5U4_#`!@q$11p-FIJH=24sR*}t%)Xl-L;S6=--7AAnJlRa6Unud=9k{YkvthZu)W$W&QO9KxTzS z$z?RSN*j_fyzB?qD_cFKb!}Vv8OxIe9HKWQHju}?aqACwAMAq>jx!f>2cC$ApYoEk)LU6Jo=uc@h>%MbuBt zI^eeCpMtQDOok(v1aB(zn>3ztE$E9)T^nrOF5~R9v<;3Jv43bagLaQhM6FL!f_gIc z=bIfs4$n|;o*EvzF-gvwnFZss@=&}uawXpz@AXa~#Ks80Qta(y5nMQ}ib;cFOhQq4(oe&( z(ktiZDyD8#bx)qlck#TDPC90m%%DwL@H^k3is9uK2|eyxm@7-G-8OqV3uiZ`oL-Hk zu0oZCH#z_cVfmp9x&svqY2OeZ?9qbFjK{=kKynTwP4TTsE zIK_f+^V^twmSYMaNQ&09UVVo5jbUc3o<%OKO*Tom?rZ&jton!D!UzOrGpTH2lI}>T z6F>iIlMX9oB-3TU#Ix>-l`16=$&S5v9PJ926nIFnPlf z@fz)rO3!1v&#Y0pr{=0r#Fws@0e#7*VEEd)rl(RR{?`51GEq33RMa130IONtr!OH8 zciu^KRM(HC9q1UId^WxpagAcZ|d$3d#gJA4eF$QMO=H&k{e=6jj1=(LLpohYHDUD_t@|!*Y>A;=Y*(^f z?5yH>7_+e+hATTc^)zyf9!hrFAHSC*U(!1faWfP*(pRH*OyPL|!Yj5NZ2*`U=XN&E zm3SB1V%&X}&n9UY)a;GO#yuQagN>L{7wg_;48EZn@OQkwIbfO&NP(7z&^kzcXIsMw zf9JA+WsPUPjijAly#5A%ez>a5zx2tKJX%Yf^ZPqLnASy?Bfk^)$ccqM1*1FLAGrGOX1zGl`%xAKIL2G zI1qLwRvu)jg8(X-Kr zg;qDbA@7-u7aSG(8SDEO`$p2Ie4qT8RV`s|n|aV6J?yNCX17g5%foh@J;TQaFNzH* zX@C%Z-)0Q@vHFKxQcGm{8|4RJ!xYoydBOfV9CKyPjithSA~;R;FeN$}>~AdJ;i8|# zN@74vtA!D$`%Oc&x}d<9m0g!!HMV&3osY6L>&22COlhccn>* z@z1H2N~=HGBb1nvD1?94CV6^cRSFwEd9_Mx5ow(0Gt5_b5mD^C)NpGZ6?&}c7?hj7Vpe+@60cEbmBNC9Nojb`nvvtQRvQCqAzrerEbsC5-Ez*t z#5Y$iJP0iuFXS8!ozcP|In7e{3b<*GG7_-rT+e1>q^)=vJ*}MK&1-+8T@iG(9*L-h zm}`J3jfvpvQ+PAF0IvaH%I5$-015~#1II|`E|kE^wD3P`tSlg0;e+qy0)buCpknYIxkfj zmV#$+al=l#U;=5Yuw)l!d_qyt6c}yjSB+XB-o680P}E=bfS(Fwj2Bu7#)hA|7TbpH zY&m>K^@!e95b2mrkxIlER&C)A82bNCpLVUb>O~LpLGEvAlwF~f!d|R$GJ^56H8Q@@ zh>;MA5SG~{9o|1)o{C3Da(02N3$Cg3mt*v}no;NB1ur8;ue(zapL%}*vORPtzL1m` z9sOx6T1qR~av~rF``0tKO3v8qDi+wX{>~z&PkTs(1;rbIXNxtR#$OCSEyk!LS&%L` z;uOKpjSn0Cd(8oj!amyJsJ1L(5vj~r*7W!-I&Dm^tfoR{3JcvW4�ot5TaiiA4TU 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

    (^zl7{9l>M_9xB` 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

    QnDgnGRu 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 literal 431697 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

    a23EOEnO%_qHPAFFS{==zD3+|H_6xQkR> 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�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

    BpbI%o^=327RZNZV0oxU{l7H8hEMdO2? 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%0DUYN+b36Fn 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

    ^!TgVEZ-)aHeUPtdeEisH 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 literal 462394 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 z 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%0A<6a3TYXJD(^teV2XjP7KwhS>Cu8G z^|5@7rJieFSB%n6Wz>(+YRUbt-xOCzZLx&WC5e0+e%Xevh0n5i5)e^qL&8taA7jMw zc7ptvSY5@{fxMsP6gn8<&O*X+H~9p7S9QHznO;oDK4Fz)yB+0o-5WAN@{9+`#;JMV z#`;eG;tvQrq$6DF#b)NMqYrtWbZkVQE=nRMt?N?WQ}1(lz*SF3f57NC_(O5-vR{N(^c>nj3w&^^1+ZcvxkW^>=gpz&dHju#D{7!h1z%8=Za-Lm0X{ zrHYq`0;^&BSyfI`P(p*;;)k6}dmG{K`Mq4cF1#%HQYuN};qy5T%M@l0rnV0kMsDve zWWGzZ5d^Nd!&`!GabawXveXwN?8$GxOyo8woiEm(d-S3%7zlwSwzjDV638Cg)ZR{p z7@NI$%{s&{)_!wA62dB%`TM)!dZXKt`zt~3!UVIMv=10#e6ucOZrpQ7)D?Q_61hcX zK=o#euX}bU%e+hCRqC7Dd8$KvKjW>bUr&&K=dw(E9jk6@Lmr!58gb10J#UyDO`qE? zcSCD{>B)MmR@H4nMS^t3H(kXYvT8YR1niA8@2PqtMT2gTi*{O0n3QCZb{YoA23pdZ zN$B@H!R7Rge|dRucRl^raI+CAePn?F9HX6m#n!ir8T@bC@4eFra;)~jp@%nC$m6br?>Re40JQnn!aF5|Zar2;~ zh^=hjE~j+x?Vd7m3!tsp-`uCYA)cA-J&z%uMEm{Am`5zyOLUKhC3da?XtgESg|pqx zl@4V$U#-Kf5bL*Gn_yG5PygzM%DzMdWUe*&J~XWJq3p&}Ce%)7m(q83wZL5mo@@75>qSO$K|L&v4> zs*Bb+Z~NubnitZZI>I)(D4jf6x<|Klya;6Oe6L$NxP8!A5#i`9tD%G9>vBl>a%#h5 zJw{IN#hSMJWxw#o9b$@|daI7eg}sM2K;>=0>|~3bM%&FS*pc4!A)L;$F-qxV;TcDU zXXvr&_81Ztyqw@NoG|vQCFx&Pj#Wuy%aHcpUrXFA-w%M2$UQk$m{?RMq!cKT(g!#9 z{p{T8e+#GVc#HNrgm<}Ns^gIQ?ba7H$h{JBlDUI;tFvW-?OSBVzk=Nl>+j<2e0!PL z#U;qrVcl11LdJ!wU7eErj-rqY521c-hqsE^y@~tDmz_T{5K?SHUsXcivK2pc=K`LI z>Oy!^TlPxcK_=Ox+_0@59_Qoqz2*H*OUa(Duq_C^TyErR1@~@z3^SW@on96&<~At$ z$v+ltIAyMULb$k{|(Ix64|;FkbegQ1{-Ga`WcR zVdHAmL?&^ci|8dTtqgGl4!t)AmHjgNjVm``YEQhs^Y-P8M+g5Ckyv?_!}{E~GgA2f zBk3&Tnts1GK0-o}6zLHo1wlZhOTf{HDBa!Z=muegjL}Gkg3>7^tph1Ry1Pa5`bI9QbB~Ha=4Z3Y)tL7ew>wKAVq4R8mui%nseCu?pePR2( zS5il4AS2r1m+{_Qes}hdg%6YEB9q_V^Bm)LG}-0^O*)IryZ5Vm-2Q%rF;@)B8KJ0v zigkgnsJYq8j6IGX?8Vy|w&)DH7)uxj&%b~F{oTSIZV0tqi!*ux%CPX&y)cr9nh$%H zX?D}yc^gUO_Mi&-GLNr<#^3^-m?m(-n6}Y&0q!}OC^sSN!VsZZ($eSG+&?0u~b ziiEMEZRh*b6doMOnTuUy$64D(b$oc(pi#egzm(kVtmE-eL$pvf#{ z1a~)lOHV!qPga@BTLo_AkC(oeV59Z7TAG-ygKh+#R`oy3p|s|i@+HGhXFWnGp7x&6 z$kK64*FxK%quVuu0=$&@dW?5*f$i}g&BJE7q8Zui*Oj2RB=nm&pfHF{>iO7;M!X*A zFFgfYYQg?w9EO!6cc zXl}sWj-#v8;o&M%;PG_bw$K_Os0pxk^tGkt@^OPN4<8p2sERT_r=|RCcLzfBLa$G* z^5VYza1giu3T2O>PBXlE>AFzka7L$TV>QOn$Jq3)*6Hdv!p&?EC64uHhZG0TX|66B z-VEF3Y9bS)_0zi*k9t?CqEPrd4v5WAEzC1I zeHWV!rxS5tMH5o~cA9N_#2|qi=*rru@3L8vG>&x!t(JlAePMMU!tdu_RSabx8H8BUkbrN_Gj*z+BN_s^9^3OjI zb&hvK*4EhGtC}CGAJRNm%>=*R^^;sl6YS;ymQc~B*)RSTK3wnb^E*mpKV|C6wAL0$ z6HI!>Fol3E*X%@}epS!JoG~dWcyR6tKpXyDk@+64?ax$0$jcY2@)tYgzV3<4o{ohUBkll+$}Cv*G6Z;9uP%6V&W!n zm5G7%ZIQbm%4D2eqPru@a zYgYdn9!j+&>Zg!e{mK<#)cedLJ6<#M<@*U?$BChA3EjkVt}JMXlm(06{^Ymk(Q0cp z4~Kth*aSa#PoReoZN62o&j$bLV(S3Q^})mvp$)&QE-UWeNKW=6J~W)H^=0ztx(Kyv z>^}Q1C;2bccNDeS6w9=lfm%7W*?Oe^ybHjRT_p=)VI^4gyf(e-rMQ14z z=GLP9)3uwem&cB(seGTt3j4IbN?ok*2)<4*5)-{mPEtycUdUx3@ex_4Vzaz^nSgKu zBU!on3>z5)qyK7r-qyPEu#UD{USSUcaG}iRCOda*(ZlwhX1Fh+dX;l1M<@+$P;bYf zJ2u)i1w;z}nW>vK$y;SU!fXPF8mB;#`qIk6FNpTrk!_f#teA!m(QO z=ZxF@NJO2Qj~%U~aoaCsyKvCzaJEA$WJ{s-X=i-8@IF(D6$`BuFgflmRD*bCSm!Xi zafq&L$$x!DH_+V)erj`526Pg72dZKMWCC*O)1 zwv)>>`Rl?+b-2>k`)rY55^=A;s2PqhAn}xn@w#)7coA6!7_U@b0@)J0O!@Uyqj}(my(KZnO^PF`cQ#50c!6&Z!^){B7DvV>bFon{ zd2O};ZE1-2nWy|E9bscr75 zqNV7u31loHH4o*WnU*|NVCK`9Pn82uRFkKeEZ!bxIxz+=UD@l!B&888`U($`dK#Ha zSnvh|FXf_yG9f8T7(SmUS*>ebthS_ZX$8zTp9u~j7+@iOY}!dbF`X#EqSx6o!t^3e zd5co!z*}ZHWKS(k=xeC4393vFONr&eN(v7i%H)}y|@U1%damQ@|!X{_dUX)OlOcVd&;xg0fD*`SzZO?&QNq-1|Vk&@8*dgC<-su)5GGbO`4f-6ju_dQ}w&vG$*E{yDQY)}sBu-Z77iyG$ zu1Qt2PEM&-U&}TSE>-=#hibOMDDmi2++6)&QF!;w;^Xf}^be8NY+hZ}#*EP3N40@~ zJXCkv$eJ;-Fa(sjKT2(_S_NH`6M0}xrh;8EeI8xa^T4h?X3~@===w^RNe8kQRmDdu z)m6y#n!yE%deZC(6~BUr0n90CnL zK@c3GpG&=3Bimx_WkdcXe|>j@PtE%#0X|V-Occi$l7v;QS!G>(<=z>ebVkd%M{el@ zzWJ|r``SRBJWY8{u%<3LQB76mX|4Ql_%tC*h5#eF_&Iv)m0tn9-(o~>Al_Q}T=8@(~|B-7Jvs>7U z4E$iMLj>9-e`@tOsU}0xNa0!5s%3TWxQ848B7zYd%`53JQB+-KJD78_SvIY(_GpQ} zd1)@GnaQ-+>zP>i+&;X)gEr5%mg9K15aFa-`}&a%j^xUSme(vT`eaers< zS;A5nEBD0rea7TCQIvl%9rze6s$X^@pRAJ?eC6C5L&Xza@=pM|*`GO_^z56<4*Yjs zZjgSxLp`^SP_!LwVb98)P&K1}kCQ416+y4FU*_9y{5(3m2UzdEJfyPvY1KzzJIP$E zQ~vpEXTp4=((huS&9Wtm@Vljd8dyO7yq9E502@|9^BDtkP|9FN{2lxUqP<$^>t9~$ zONzEqIk^TbFE7>(8(rqdR!;Le!?75q(gI!O)3BJ{LeJgz=frXYj+akq|BW$D!u-$f z{FXZI=tZ38%5Qrj9%hIkloa;CA8*9*P6?3m^lGm<2b)0JK$IJN5fmb2 z5;$JfY`@IEm(8HOj96`cU-8bKnnU#ay5URL3`rOrIpf=MhndFFWl`oTWmehWb>?9! zCrT#U@yRQ`j<~p9M`v873#}eD`cE=kb$*%X)qKd%o%n*y-&=KjjP-tFAe*0UuT~GL zY+-B_XXXmxhV))sZ_H-j{7L)ai7HGvWD0P*i-$5PE2ySDV-gRD0Aj`B4Po4>llA#x zycBB(6x(U%xl%`Ytnd)u?S-6WDlt zy#w%dLM6W9NW!6^#$TGF*&;+=A;`pVTYCLCehp5370%k7h2R~h{BHp&r2N29;nE7C1vi>f>U_)U*RPn<;;qU zIF6|L4h7XSU$7Qv%G}p@FCK8*N?&c72Kk@Wi);>MnieUUpJm_u?sud8=B~QDR78=) zLh={<7h-&FD;dkQ(0A!~8h9T%+8xnLRc`sd*vG=JN5~B?U;vAWLjzQjK^zz-2*?bgV4LM6O*?WS8ZjOLw2TE9syvyC|QC4O0DL%bbp(nbME z@J|BA;st%4^n(VO)ZwHMumGw7N*gIIOB^b_VU~-s8eMEV$Y#rNoo+sxzgS3u^--`_ zv>pGUuV}yfD^G&7w~@Kst<4R-dayJiz3)%YarZ0Nc60~GyydPgw-<}q z&&?&t&jR*Rs#kv}^XuLL@z}oe$MGT6)1H_zl0!GJuil#R)T6`!H8{hHu@z&ITV_9l zlV`U`V^PP3=2mvUwS34=MhrqiE;3%Cq8c-0(SR z1~Z3dsZ}3bMZAYGiFB=aE8^J)n>%ZLf(dwt)8J(E$#?JqR*CTh0g%Ql6wd+8xAmR2e(SQ$wsSQC&YU;5tBM^B2CPS|Gm z<^j>Cs?TA2q`&#$lspOq-P6Gm=WsDkk4B)8s`S4=%1*ZG{{tjXoi85i^^TK2??<3d z@k59|OtjilvhJJ={s6kCPvb#zo653?^hdi|PLuRUXg7hLYV3Pn@@U*DlA}*@|CKnu zJttwhWqNW7im^{pW*s>+KA(>L(?rnA@)PFaz)?vM##Y)SyCs6bO|YEVfd_i`I6wk zA_0rFV(<~iliq9|(l2)9l2~~J_kr&ikBIZ2c5B6XWV84Z7(Mb_MYdk`?J#<~@OMlw zq=dJN`Uz!+xZ!#7>NdqrOIHx1Kl|Uiv6L$nZXCZJW`t4C_R%U!Jj@}JacMH&k4^Q) zS9f_Df?GPSSXZXvx%!b#r=EJbLm8Tt2S&pF%WC?>Oak|h-Mq*}FW_8mH?}o_bLYXY zd?=Qtu5!CpQ&(6*4vUyRKBSUdJ=IRpZgF4bNHKmHd>5cjCnCPND|GM^6Yp5rc6{SG z+_wL@biZYD==CQ$3Pnz3?TFo{VGES^C4%O-r|ePZBi3o~J1=8riTYQmB!+C&?sLJX zCG~IEC+1Xc*o;(KQ7AjYbWU0uV?wgt$7OD zN=<{F*so9Y_J#Ew<15F z6`6!$r>lFHM@jp^TO;0!_lKCETT{O;o2#1AKW)wo zZ7;a#<%3zhmZTkr*jV~U$TLD^jq_i9L{FCbFNNZ7_f!FMgZHKHMz+JUYRU|YHAYw! zUwQfWl@I~-EK+kPh{^Zqi!&+>0|wE<4jlA&IZs-}BWq$(&xnMkgKU}{iFnVRUMfFSLNKEqW}M*lHC1em&%eOs1tYh7sVX$vYsT`|X;&Vdq>FXa>1P)6Gq-H*hMMPJuEV z-mYqcltZykGxcc6n?p;4}bJL--Hq<480ZEsQm#pK5=tGoT{)zCLOl+{Z=R0xNRM@2W`+4GA+My|cmY!opex z4T)qG-wA`Thc=^n@r1<4rmXiY)AxNY0I70M)S`TCF7i=btV#+myAa5As!HpK&tH_; z;tx&8xR-K1F0CcwfrIDFMU^gQ*8qe*J@!@_|9*xZ*P4{@x_NfRN<{8F)mZIVOtKS{ z>)M`l|G4mW*IjA2a7q4}B)u?$(ZA@dYqx(H7@&L|PI!?NsI%UC4(**e23Vmy$a5_si!BO~?Gl1YHipIS$t9w9>+nRQZyxK3DD&o#`p{P*^*Me&{f$IuYM>#v`3X zG3)r4VpkDRS7Up~7Sa5$t}X4xl4)1i5g*HIzV^j~tz#I&^wOFUm&68JW{k0J?R*|% zWevl+IS2dUsRY-9H|DcOZL1ho@@3zCb*yV#yt>pZB;BkZ-Q>#WKTUsDex$wtT z&`<&UiLAbd56cGKXoszr{nohhPmj1Zli*Jva-?R?eZPS!&@|1D^cxOfqsq0RpuQu->|$@Zg*6FKPbLH(QjZf%E=b zRpf&4fIDOxW&!`8^`z~C7fwsxo40n@Y}{e9mD3Lxh#2y5ReHW}aY-ZMG@=?SO6izJ zg9aZ8**~lzls%EGS(a%0!|0g9ZbM-flPv#wErE6I&F>xcM+BajgG$4ec=$txfU02X zOow7M8nOYFZ(eWi>Ma!g;xEPUduhs`k6W2?p{$LmpE$A3)11PMC!{GFEt{PjkTxR) z?02?Llle0rKCIKb?8QY-y_~4#o@gSQz_NOPRzko8TV5xEA)e@ zAOi&9R3C|`617hpLI5e?tgan#&ja-7908ASV)D$N>E(r7P#t4Y(spb1uv+c=bB1ru zH+#LWz3+}B4c<=CP31Kfx7zyKDRZZ!aJ=Ai| z82M)gnkB8W4Gb3}4}7q5s9ta+kH7{QJeFrFq46MNa^~+81{GU4ee}Xcm(3TwUxHB$aiewNi{(ug((gtJ={?JFm zqcZb$(LV_=PI+^nS&5sgbufnN`>6c;a2^;bB&{u`g$O;7<4+qiGxS{`K7aX zx|ESI?!3jiRTL9<%xusZ?NTjAbZ>GfA=)wkjEqdUZ2w;GK+AmT@4%?@XsyH|M|%z; zIh1|N)}inU1wjC!1Nk#mM{UnrVC;GtJX!Eg?+TDo4OakC z{U0t@2kKV?z-LGixw3BS0R}WzrXH$htBT~n(rXX-RoJgAQ_5E3z_sn<;TOAwn+JE9 z$8j=aK^$^ONei3B#P4l58@OtnW|Atmo^L&RYjBU|$cL0UbC{9p$BqN(?#Tt(8vA_R z>1tV`+uv++{OdRAUE5Dgo+`TGH@&NxjexUpejUcCV?qj?A&F-SL1Wxv3fH|gIiHW~ z-$wmT?IT<3l>XyMv(wctbHM4_psc}F`a?ZeKxpqk$oZQ10FWGwXp;rbsJ;u_WeLPg zl$#y|ehf%)F6&;kn*}QAj+2#Nu|HhKW8hykvS*52O>J~?_higE;7CZcQY7YJw5j&` ziI|~0w?VDVpos%wAPF>kW~_dFIVcji5VWZ-wh535CcRlSX0{!W{G4Ayj-mj+<7~&yIL8gfd+1an>GG!?}S3QLn4O{Zfa7Q z8I~)S8Rb$Mw&h{gCzvc#bh@0PL6gU?%J$o1bfrwGfpLlWE%1s^Ip1GF^DfcDKGRmB z_x%)&xeakN(l_n9Q(*;oq$7HqJT|v-4*{K+r{Bddg1#vI98SoxjT1*JvvQWFQ3 zQW+1vtb3J16if48cjSjRt|3ooS8Lw};Y{ zQ-kI1r`7Kum-|6CZG1T#8u>%bxe<(FY)T~7dcmwf)kKC-`jQ}3WI)vfxTqX91H6)_ znD*CKoc??Kx)uLr$mR+j#Jrtvk3vXXr{9|0Dc2K31WEXVg6D#FE zWaQhbyijTMEs;dUji%~5G@}8^$~WfwDVZDw4qo|&khwbjl4hztn-&_5cM)*=X>u{Z zv7XQWC381Lsrk&LRkYlc^T6K}sq=eHxApuw^O)z|4b!5n{iJSd;&lw?da0Tf z@u{!uf304}3CAaT)lbX?$U^8rfQI$FTw3tpN~)YWw5R* zg2V~XVUn-jffqn*X5kUD5cSE`Uh`v1{6~>Vj8ZcflOXIsDCgEs3Ylqs7s^4~`wLF2 zco`N7ox@!4pZ!M(l#^}_aL{u>r}m_I1*^M@aAlhts{x4quhggunaj&2Y7?-KSJw4E z$L9%TaSBR(F8h=}%_%=qxKe7532cTekC3xQVW)JzFV$(P;Q43QUq`#pADk-)yS+XW zysTFtz z@w>1>w~>XDkSu5?=5F=VmI_j;ijqL5m&|tYjGnn4kh1e1pD|q)HbeSDI%U3P9>2P~ z+9Q=X=+KMmPY*2neM`*JM=;#?a6&6!wzwCOWQQSKCeIA7_no`7ZMkP?8!tc)mjp&#YYTm;cncxNN6b40zP+K19-X4E${dKa^lh z;L7govoIxxMk4+TSYVcr?LN?=!UB^^1qIK-vV@=b8PxmL2iVLuIEzbt7WQwrpu%!h z4gAG+MHLBHrh;B=w0UFum^@8!Hn}?%JkdFfmA<_>(XX{3*D8)@To;rb{45-8H&&wM zpDiVb5^wKMuwNA3zf}5nr^Mn(R@LqMI7V@!?Z?x`L17qr$|4W}UG9$RFNb7na?fJ5G|hb9J3y>CJw`WtgP$s+rX$7Mp9d|946oOs4gZ<5MfX z)l%7o%=J5s_}-?f(#poQp;?#a%^^b#>7z?_)wG{?za^d)FAjmX~N z-{KQbD7rvof161a{I!(@`yP_!fc{P~s+w^|;8=XTxs4*G=k5nUi1#}ixxw_}A1=A{ z*9OHry%&;+Z?7ivkB7}6uLo}|bzWA*@0l}R8#lsUbbIpXZCdC}7U=)O-*5ZJlUx7{ z+Dc@YT5WB!CA=%(=ak1S?lcIus+YO9DBqr}EQZ9=S$kO55o-NUiYizEvp&hPfU)lI zOTnIJg7{y>w8NEdlZG}~^bNbjsYeUdW+BJxIG{W}+Ojv)UN_?AT$Y5nppL);t3x22 z@L^?Wy}UH`z&rU#Dy`ROM@|mg8&#CvXs(bvX}_2T2-ts^tn)x!PpMZQ<3P+EJ_=bK zgrGAFvtHxB>}fc4Z-#ln3#t-J&UuEXUm72^OC&%+3dy=C`CH_LA#S(g_x!5sAI1!zbD=;0D_&=wTTyVQzZ9gQ{h+=oL{Eb)`O z(ppEPJ)&=UOTaR^M60{Ih#xHl3|+$z(zmaMb}2_Xzd3aT--w}s6Vk7RE>6-OD?*$~3m|Ick{!-qB_mXJ_^2yZdpLcy3^c>GeG=95!=Bp{b*+=#=A$sP) z93dX6rD}!cF2z@=K^*}gAB_hMQLyR>(5c5(*cE6X`=!zJjo&+f#G!fu+s~SA*dsr% z*4z9n{#q30(7x-C(3^S*Sssdob8Ytt%D47Hfu3y)yqx|GUAVI$EoA!Rfb!)sA3Uyx zdHN#fTswqe*N(LLxoaB@Q`6`2IzA(@2YDSktT(sc(~vE^w;|S}LC^`&?Q5=AUVn)O zUFcSg@BL^yoY|}B1^%_%{k$OJXvo0Ty9cu{0HbY2x5tJg)-k_;d46wEng_I9ljK*O zy--fT#z)(n;O%;mg{Fgi)Pmn8j#vma+v|9`lc}U(zzCTWVE4vP_|F1v%P#=9tXxVi zc3Jkc;t4(ge}lgbvv7h2I{6Isv?`qR_4$ojrw+=J`7aK>gW_R2UizOcgxe%tVm7Vf zVYrs_aIM09-^1k=CLg`=`6Kg_H3`Jo330Z)xgL-V1-t#=%Z|32 zIwbeVtuZChEi>Z2;P016d8%_bQ(1$}tKZD#q|M7}si1`6HbC??NR7@K*^uodq85q8uF|V5t;@r1l>8sBA>#_izrq|dOq6bYw^*WpOCFL8)foB#jj=%R zzhx&}95+Jnk{rr{$sK=lOaPFbnJ)L3qS=r7KF~Ho#-?NzI5^h$&r5KLHV8=u4UF=a zINn-9;d;UzvBgLUh4j_8AiGDfCHwtWF$JsH3$F{&36__WI1tq&xe+^54>DASmAV7| z94s&u^bjd9O#W$9n;v-X*`7c|i5Sp{cM{LgN($M3!wTXWH~i`jn6M8W>2nxpOrKZX zfb(+}TQ1qptw=&H#bB*rQ`qVSKI(Itl9WGjXjFN>rWd*-E||s2KJn;2M;YJ{oR8G< zDYc5>fFJABl9zKz034Udygphz30_2Rqf``e05+{`#M^rELYI^x+l7w-=yXR zoA@_Mdi)oA-m+4Ht4PkEj-3SIs{SWByED7(V+cz@LmYsBYb59p$DytL1gp0A^?9|4 za6*frEa}MXhwHsz;`edOx07qR9t)-^xIVZc^-?RMk_7|(ERIJvQ!d#j>-|53yrw(k z!fNV1!SAw!4FNE>-i;wD13gypzRr%^ch`P@&Q}T0=;8!c_o&VN)&vb3pyHW4+$3Ys zYL*|XHYSl&wB3Q=_mKbE`jE~3)Mxafc4Xvz+;{!_EoIJ`FFlZIE|G&kDj9$Jer@dj z(WJ4r73TbSsAj$2+E2~b{aoMneYt@!5H0alP!Qo1m^+O{?7wg+BL>D($lj_0^;Xyk||7I;~&lVC<5v0W!3=fej9F!?Wsb|oIm z9fVSuXZc~Tb!2wrn{eD&2*b{)hp6pP77`MrnIZTwy?l$@z4tsIG>*|t>N>X)i)Qz) z$RJY)zoZ>_;Od6L|0OP2P#58k_TCYjc=Rb6gl%fygHPWf!2S;aepvz)G(a?mT$yc8 zYUifjmMg~E0CkJl-BiUus9iwwIf{u_fNW5a0^KgslfjYx0_EWu!@#H4c-X>pO^M8+ zmbh!I7_EFy|KtNIrgM=2g{A6e^&2uC)Dbj|+j1E=kSXF?U7!e8+B4dCygry&3{X=F zb#^0(fe+B5b3fuYMJJl3e~G`x4}vwSo63Hjd=_?K&}o+@Kii+zedfHs zArx>1I{+}oKdAlY)rm}(#`7{E|J{JbVUef1%Ca`krjVD=|@EU<(Gb-?BTZirAYd_c>ZIY;d_f zZ#l>b+;94^7-VRo+P>22IsDAD?dJa1#cxeeI;LX7&noag#7eZbO@xk*JBT{E&cjYr zmcnA|uPMCb)khU;l@yjx^|Fvv31-_6M|?Dm6*+TM$G%5{Fnql?MdWMH@X&mxDzT1gFO+BtJ0nc8_~oH-kf1~RB;Grl@W3$%uj?eN=@s(O$CA%}c&s~&JJPc1 z!1JzSWU)==Bb{!fNeHneU#fC#cMA|kMK4jg-UeDM)ATJ@Ekp2$8FrgpN}mi?Hm@Y& zMUBfG=Hb+)CFo1-^mJosw9_5*TxMjb`#hdnDQEgP3j~Co)_1FD^~{(3wbVdl90mPI zWLN2ZrUVcWi&gHH4OJQ)7kie*bGxMk6h{~!AR^T)e0k%e?=%SiFHHPLu7 z3!t|+*%-ce?oBAp2{M=%Xtg_9xmfUb1-h-{YH)EbA4~-WS%+1OS?b(Z-{lEwp`kmP(ll<34q zGuHGg{8JepBzh5$zc0y z)X>XoyQzV#gR6sq!koWttX4PIb>V(137)O~z0=0gSCseHj4-7mF(t1;mxhs;Ig}(A zVC!-!+n?cFr}4e7LD_T82Vw?+;ra@4k2I|>$Z<@x$R*nVfG!-o6*6mwC2vP#hZor` zXCR^OO8`K=uK=z;@NgNmmem$T zC6{ZyJ!%b54&xAnl=~tMY5U#AY~kxq%IK5l*f;}te#t?$1!P{k$OYTy5#r{wJY`p~ zEW)yGcTk=}psOdiuj$TvA@HINAMCTyw7KAOGRT?hx3lkm5O|fM+jezs7(B5!U27|I zdf0s-a~KjJ>w@f|&uC;uLWX61;G%?HD~JAefz9#IUwgOvyB6I8 zes~G6c|g^#d&&&@%!NguZ^u#-28;V-KJO-FFk-9l=fn8d5*+ctVJdcrhKOVMv|9k@VdFjVA;H+fr3Ma`RnhC| z2B?*Nz?$i0bOW^F8~9en5^FhPcV*I7q}O(E^)7t2m#_6O(KgrjsL@ih#N?;Vk;N}k zaW3j#oG5pzoZt-QJ2+%!(H$d2Dt(wfaFZ*!s(^0T<7NcFBEfgRKH$)k64jhY3i+yh zF*HBn$&qmhIt&thU8HS>6TKG|F}50PJT=`bp}kM);7sP=0IEh z*#3L&hhb3ecsmMm=zq3%aSgvA`8=!w{=^1nLwvUN4K`{TmC~F}maoQKBwobDEgQC* zWJf;Q0fs>O#S*HiyeZqk;q78b0g@6gar;@#5x>W4BXF(G*I#Z+-=Em{m5@#2N^sKc zM!30^b-2Gab`PMXjJBLVL>6{dTl8fmwEsRZ zOFyC)c>C@BnwcS(1^YVvWlB6%CVh|R`D#;Xr)LP1VRqA8!mr3=4KIgqs*t>hea_ab zB`BLvXQ>@QOOk#97huQ(w$(Z%9jur9GfzjP5x60+tQ_cW@Iv)O&_nxRV1W7v0V)$Z zH+H|*Pv1sDvB?FgLD(VC>EoYKq)c>ng2flK1`W}4rg~lCoTY8Wwuv3tc&s}Mx5*rz zGKVvS(1Snx=}5a2n-4xoNq3>VA+N2LwR*Yg6=QYsQ6#PBOFkNrdejSj;Utn<*J#(L zZ}OHz7Eft~{UW}|m4)~^3<@v`c!-*h75J*g*e6W+W{qhhUa@CwagY?z`R#RW>VXZJU z;W3lB4K&ym_3cbWo7f+A5p|EX5sR(i(;ZlKZldUvpD}i_A_YUCFxU|FF zDBMv{yj2Oj9QRNG-mp!l2Rx#IN^Ty;7b&`?0XIicPz2cCm8>67LTqMg@uJ@eq}%?L ztjx4^bG}-rU@zWmKPSotSAP-U73zX~V!kGJH$+2id*_+g=X>nK zUn#YKCZVF`oP$Lnalng!We&WZOOCDX63L0fBAXG~8P35LD~B!q4u5-66Q!6 zPrv7LfQLJ!hhJ?{=ym z901K>fbo)EXQ&xIjdT00u&AeJ9p}-Uw2p*-!)@09nD(-Qtt#2~+}DZ(ml;8E_%r|L zBV*Z#=(Dc$o<>1cP5+YiTsJr64R&m znO|0z;!7sEhZl)2spspZ+jdmPN52SCb@E@Eaq~;}@s^_KlomAXaH#x(SIZ5?I`1_i zK9V+|?QU+_yzmf23&FEQHgis9!*ST};*J;hNFCM}?hReqZmYWKzRLhK-zt>J-|i;D zy;QeS=ih~UbjD<*>BVMlaO-_%iwBF`&mx`jnMY%~G_})`gl=bqBh!xHkkkFbZ8mC3dByoH2$@Zv#2O4%?1M%7`RT}?shn)Mfd)4rU z^+*rYGV&~5M5A>hd$ON89ZWGBY#Q{&_OY=u=L>st&&fUXi^2&fs>cqY`gdY6?lA{u3+Qm`&Z86{GP=1{2oA_ zZjSqhd%?HTzM~%*Lv^V^LPHP=!+HIE+}G~;rFsA_UBtFlZ5i&2)^zjA$cB+d!_`keVUO7 zk|+&)Ojky9Dhf4cq?9Gg0rH8E+mUyp)%V*c)&s2W8@_8jNcs5Ro-a4aNpSvKVWB)+ z`S~b?P&V6H(w0aR^nn>zXqmsz01Z>3960;VGZFl10lIVeI@A+BR^$Y3VA|7;v<&>NI5W2G1#vo4E1Mb`aayH zY5g4U(SMP9wbotPei!DHlr~+Wvi@DUW?}@*0uMFQBE>nt(pe@j?8M;+VVEGh(+Hp< zpCb>i&4`whCwg-B{0nWc!AU-%n~TIs}`@gtGt?RFy9cBya`9eC0TIg1Cu zvKW?6{2@UY)?_NUY1vP~$qsSjljC_K9$=g5h>zbT0kULlqosxbQK?5V=xfDPnr$_M zKzvP*{(Wvt&ZM_$IlGK}#vJ049CGjp!M|&sO~e@cx?zOl1wqsvw{#nkh-?QWkHVWoNHAp%6!W?(lKgvH);`~xf~*;q>z?A9<{)ugc&?x zUwYCV&ydI{_8|hN-~5s_rYa0a4@3AD5&^~T6qhiAj+oh!qeWGI1A8Xjvk2|iM@F`Y zm4zQR2pTOmYJn0R&Hc<1c%knas|S2ZOp7f?r~^WbNAVAmwmJ*>G@JlL!8tJ5z`{=; z$&>7o$6rnUDki2*B3I^F=+mP-3*of)kHA!jo6^m`aj_0iu)-l=HqkrzssGQ$Ex?=! zZ4}~*H0yM7CEI`P4WehlT9trLjncgIEhDl-ev#v4w)!f@Vg^_B%VA+a8`Z@!gu<+T zZ6k39IU9FBBM@Wi9rp0o5*m8M?*4Tb2y^$DU;>cRInf~9Q)PjJCIW@KE8wb&)wCwm zrv)|~-KaRYBIrb1{Cbx6!ubmRTvhUs060F5mw`GqgXuEhu2KJ{G>hy%ca3kqt*UN| zREWiNhEdr|6OY5^nZ!-0xvD+6w_`h9{!X=1Nn>2)NEjtNwg~VOo=mG96+BZ&*y11Khh(94fzORE> z8pI;i3DBS?w8R#VG!l9yrnxLMKIC921>$-O04HoiuR+>d(w`e`vEG+V-w(^MNY%T{pU*hDww}cMBgDQ!?6;;| zP>Vsc#=53~#-%#WyF!9Tl%Sn1W_Q1(Tc0dx9-f$;E-UsY_Vnj*oi5Us1UbH5cX^O4 zs##9Z3iLtjVo;^oFwLReL9+ag8I6BL)sJpmZZ3Al)@6 z;D{)lN_ThHfPjD?Lx*%IDc#-O-9y*V4a2~D|L-?G-FcqNx#yg{_gcSYMsmO#;A$sI zzL9H+XAg~>VB{{zzaqE33ROdPnnoDAv_%}8{ zd7rwj$VQ$b{P9=CKRsYdo&84{0D3BS;5o(@^JltYM%$ArMg}F2Tq{8w^i+t3&+%&O z+Qu`4){Y{!0Rq!sM9bL)C+bw$#}j|&w>-zQ=#SIb#&c4P!Yx#V3yo5jeWMH;?~3b< zt?Z(bV$;n5`w=O^h<~O&A(iIGHo1=5zd1&;p0pnhRjRh~8hC~h3&`FwBrc0ZHZ1|M zNyyXzG@%b%A%k_IT^e*A6V7!!mZb`uH_oHYQo4YKF2N=ig#~Jkk+Z({~paGese0}O6>aqWtrXbF`Y?m8Ee8X*4%;S)?JINKa26B zRum7U`AL+t!CH_SPbV5$mA(f40z?9qDIxcnfi83&O^jZie-1Yr&oC`Ty=MutY@`^4 zscLqTN|X{TZfpm;$0IiU*>y@`F7;{M_N4FEHWB?ZNnv)w8dsUe#g9S~(2>XCY z%1^u(X;H#hQ$Aw&cMdqjK{k{RVt^zW7?pQ;L>lW7qAy9rcJWq#it zA0HV#$LIc_t!Q01km14-CeTs_bKMU%jKF;HOp7*1)dlBb1GpcBs5;;wyt*gIG`K?A zyp=NEp`qWpJR$2s{}lN&TOg3+rWbFNj}DB%x76)W?EH3*NHC#Tr9DsNarEMYZ1kU8E5B&hY5L@3?*gh)_R=^>&l$ zGS7lsDj$!bCr8JzEL&6$B6H(3Cgc2B%Z8s25hPlz*%mE7Lu=vUSs72r)C^2l9A?3c zjSsKO=i9JhPd_jfAKz(mjiYL!I+6yn${0f;9i&9MQU$d?JAy30+T)CUG@$QKTvenD z5-p336%(AOW|CQyDquU?DMiKejAzyQMIWiWzbUxMtz|u@apZ>ymr(7Wq`G)0NQ&cl zkc{s1-;Xc?LqDdENl4c^GP9mi;=jVH$5Mixn~%N`PMq65BK#eqP#mY95-$K9jvq%w z3j+Qa@d1C>qiY`P`H|-W1TE+7{y@ zql_|m*K;=(`m~*1Rp3`jUt!p|&zXWG=LMwR6W{LiP};{w-%V%mZj~+|VPobQzEnCG zPeuTK)*?Hke3<^ZWgHb=3bs)}6jtB*b0!qGs*~#)j3xx*`IH|mGapY_+2=bRU*^BU z{od8(%f2HC`nZAEG`O1i%3mxD0z(wLsPU)$bUEI0ct+p3L8gCGVHU*1SI~!a5LE;X z8lE7wSkw;LBRST*g5Lhb^dyPtN|Etzg2rHtF|tVF=T0*Qyv;`cPKNIm$w6emq9%ul z(9w>no9odsU-3hKGMjVbJ9Rs1aIc@xy+l)B-#77)8G*G$cp&A2en8a6sF|QdQ_y0r ziC=jJNpKKnF+=wxf$#9xw6b;OS{aot7xoSO9$ocaS}N`A=9bpNVTvVik&?*S^GEx? zn_v3B;SvlOUljb<=J1xOFzKPO^s)b9JGhX9J04V<-}@P`^;4TV25X?dsGY3vqaZ+QBVhj%wvWytQ!YfW6yrsOJG9(OrwcH=mvGB>-b)wp# zZZ50O71441&S#MkG@vo8JIOrEDy#2{>dwpXjj%V?um+vg`P)Cwbgs1-eh3dmC%pd@ z!VfrSO>|grMOuEbm%X9`Y~N;Q3m86J4hKS4CRH6<2h=;HZOURc*{M&!g5d;TCz>m5 zk|(wX6WLW8;y(QGA12mehIh;=b?U z5^nZIKAvqWsN>(AP#Y-FOJ=?!Ad_Y-Jb$cQ=k1&_|C}j0;%sNs-J-hikidSj#&vKY zo^5j^jWUWynr6Ot|AwA)2-zn!r^xTZW(Pal8vd5$BceT!$o{R$BHD$>_q_tBE*}j) z;RbUKxU!K9GxA1BpOFetj3(c|nFh?2dhd91bhOor!qs#YURfrYyqyn1iUW?(1sX?Y zUub^j*N1#2bX_B*_%l=|D^9^;|+ z_jB^opDMp|td5Ol!EuS|0q9sxO%mC7bBt-nZ@KykkN+ih7JJ39YnD8HnQJ|Jmy{zm zRjgfP(Ei=RfYZlu0nrsg(CKHMT}qE;f@Gb{;@AW%Gq-p$ zAXv;)&WS9Scnv9r4!X&Z>Fjq2-Z09fcu27&A9Ki6c_h%y^R>ild}IYlzU0a#M&}D_ z^EF7pd{I{df$^Dg>boKkdis86{UP+=@T0V|E@08DPMojKLk*GFm~bxxH9BIj%|2dJ z1G&cssD7;%Hf#L$ZJSsiB*f)-r#R#C#S!qpWp__Z;ev&oN^kTwDE)=)Nh|oKxu8)y z4I@iLVM78#e0Z~Ns(vQ;Um z^h+ieXb3Jt9-7!sOu$j535>dE^3s_Q%MY&G8I_Wcg`)rlO4?+|A2L(EfaRuW;1zVO zY@fH(#;FVEqfqldjNS-!9^I$U>zp#)U{SbRN33*p*=ZrCZ+a;68GpPI9!8o%9|O<=$YE;W;qu5S$ag!yV&73d;>}z_rBSMPUT54$`u3}hP$s32-%#5-l%U;` z)K&Y!mu1o(YNgRsdh+U)27gP0@zM)EnIrBF3a+>+xhJ?!}4d2^PL;9 z>tYmz>IFW_)tUqIk5YKt;!r6Y1y8WN4^0>$4gGK!eTYI8)zgnK)~_%bCH&Xcg*tBI zw^mmf$%%l}9U#3h#54{9mWcfWK1H#U%)t9z3|jVfGIrpIT{Yt*k9KodCrE+wssuk3ZqX(u&6<#>kU4{->K}__Jenr1jC?~ zd3q7Xb@Qc@R-xKnQAtyc#_)pG6?A%EJ^a;MHFk3VhEuN7f zHyqu8(lG-~^qp3oLUZM)C>-!4lo>V$i7~`T%~r{s1HYQ>ko8{fyQ`qWOORHgTt>jZ zd7am+?|^E05)~BN;I{V{cpr94buN1`)M9Rg(c)Up?O3F=Uz@$O9ze}xuf?%7U3D_r zu{`4P$tvQFv1WL+%U*h$bX)pwe}AzW-S4x!0{*cK#RtLe15@K)G;)q5zaKvTjU;<# zJ6GkIqrUCucy9pV@rbq4yRx_Q@c z=oQBVU&L^9?PO=x5h{eoP<^wFDTyMJ?Sctkv`}-%!zPyQ)_gS z;Wu5V`uDBYvyOVjPhfjufNTXV0=Nvn8y9yP-co8OMe|5chhROW`YZ!}JX_=&ZM_+C zE;wr{d}N1TBSMhk4#=ECqSxDe|6Pe`x_f{A{qoyoZz(KvrdSs_-kY)FI_f*xe6kMA zSWmlDM?a_Y#)qssRiTV@vv3etHg5-6f>HcQDlSXqEUAt?^YeN(yEBJ#=OfKyT#KZ-E|$HKy1duU z7~!-h=%A>jA*Oe!${*~Na8H?N?BY5$Zb2u-*V_uVT}V~e)UMVp=F{tP0ReKw+nzznmoQ8<2 z^KG$X#iSb~FteLF2k>6rfZWh*G+AB-@a#%nj9DF|;MP_t?aZ~I84hsj5T;p_5zEY! zAC-Bz0(7RpU+&<0ll=?w6%_D65Io$@(szC!RDSTer4Yy;mE>JjHqx@qgh!005f?Y|$dn411A@SmL20&D^kewTrEi5TkUmelAo9T`az%@ypl^EkW|Vo~_r zHMA0R)|=teVA3BmH8Xgo&ZarSW{i(PT^8cX9Q$zfU#G|ikV2@)yO`eULj`QcqzdLX z->6=(c{6d$Gn!yTm2G(=Hp^tg698l#eKswW>i)3SSIBl@vpXSK(08A`v?VtZoyyU} zI|1_vc^m;<$Socx5v~*rB+^x;P&D{XJZ`aHQKUX(L)b}m3PRg@y=V{SdbAcHI-F}U zzB&MgI``7#=%Jy&>Av#!l879`S_n{($hGy|$uf#*wO6zmOEpt@{nX4i$P%>0XUPT( z{w=pNl;_*Se@N;}#BAoqxLWU0Lru(n8%OT#miO|b)!mXU{qFsByK?1=eW-AK651q7B81zRX9b5X?Wj zT}Ld}yN(IWiBfYNQne+$o|TWZJ|`ugpWPo*v;`;j34ox;!-ugoVY4cbKgPQozW159 z&;w?Sc5sn5wzg%E^btrQ3@zYTb2OpBS@i^DNAh{-LeDA0lae1Zu2}Q) z-suXSHKU2VX=T4y${%M8^wlX}FBNe%%iB&2-x`k9)Ivi~5&wjbkP^Wx$M5X~=KKT0 z8*jesfqn0$mOZ+L^sn!H`X{=rqCY6`uwcy055C7YqL%(_B&PMwq}$xWUB9T=Gde+(Nr)z*kKSffuU7X;N=qtC}`=O z^cdl1OZbM>N~zdS*04(Vd!?7Vq1nG}=Wj+DX)jRQjjiqnC$1{U`BhY#efZHXsYwQe zE{9OWgik~Uo|8De-dJ&qy4^XbYQ!)bPHwbrRgpxycs5ivYC?dM{YpYsjfO&p5Uotw zL#F(WwYCeNR%9FbfC0E0l3yWaN*~>|7(WyJeF9T>yC6{+w#o4k%U z01N9D{P&e`yl>pt{NXgup5>)%4J|;QC6r1yAfhy)Zeqvja<-*3S@rlde)pWxw{aTJ zhlbR;HM9)ES&w^%=kVW3k<^$f)#nm;S8p^BS73<}tsmCG#%kCo`OhxA!I2>=YA~9< z-n;f6T?0*Gp!oPL3qMS9pOxWjh07k$8B5vlS5p75Xb-26HI9>je`9CCp>d!i>SwJ& z%>4UO1OY^Ne@Fl>GF`Y-o12G;t3n`t&dc#v<6NbM2Q>q=i6Z9z5Jy45R;DYWxt1d`#JmEPIMVZNKk)PG|k>3 z$F0*&Gr@}Mv2?6o#^=3!rS|XpMz=p-R@4v=!Z_Ca340DYu$1WxAX3F^by_UWe0_9a zrz_}b%%8Z(LbbwN&h26Sq(hHz6K3PnQ7B6e#Bc+hw9*<7S1fV4IRP2fghd*q4|>6! zSFBYiJTf(lUe#=*>fF<1`mJN)Ba3=+5BRB zvtN~ev3P1IsgY53U$G3MSC__yKXo&MO`&&fazLZQY#W@~Z^3si%vU;rKD^ketlhl`JjN~9Y*Tk)Pr>L0Yp zMdd?4&SsBU55>wk8rvQwJmuUFxH;az+>-f|60s*gSwddRCx{AHTN=z9Xp4GR8Lav2 zWgn~MTTLhR{UY;@x#X$4^mu`1pqp)!bf+MX{qn{&0N6sVLgzW*nIchTM&xW$LIZqh zX=1K>Q|0G&vMXxU4NBE`Q{-K&q=Fv1JZ1?($-t<-h~I7+ zZ}j|9ho*ZC>{ZD0pzN3G!k|~J?iqS5JAkUs??@jbUpeP5UB%OtR9jq^i%`t(!fI{P zV4ofQGwnWQe>u3H3q+)jGRsqQU-;mPndt)ZDxc*oSN#g60LVLl* zGQ!yCWRVNGlYBUAfF9p?BO?zv^LFeHe^0*w2sfNFUGiA{lK2*zeE5zLOl?YXR0yXn z(R}qmvw~*7Z)T%u)&RB1tbDn4zdRFuL0ipm}kqd>itTUE|_KhRH1lu6hwe>?C2dTD}g> z){91Kvlfs9ee@@$paG+EJhuZP zqIpLO|KVuRBOlJo_t`p)Zinp*66a)+fhmN!E%fi_K&w-J&Hjlva+1|on{hFKKiX#7|ZhMXiN?4PqL+9{ew^=Z5 zTK)8<<$DOrOUKQ}meE3Ykq*X8R97E<*H9Xnl7ESi+QW7Dg-DsNP(bPu_ue%AX!E{3 z^d^$cm5&26N(2_vr*o$AeUrO|2Dc8jN0Ufj2^eMNWt?|LV(0ziZRig*U4LJReGht0 zMab~J$A6=wjt<=*?~^d>d2oDQc5#LogARLhCFaUh7mdry{hU@yrcgQd;=Nzt3|QG*bO zFwg#Ma=2klc{YG^XuRU$N*wR!5e&BwRX#*^~VQ5b!Rh`@7N#ndJC8G*8G|n(4B3nzJ~ds4iojEw{KLX47wPtHyG{X zHuoFy6FZ|ge|8)l9rW<+sa3V z)2UvuDmjo=Y6K7Q6M1*>~!7jrd+SZv> zR)R9Y!2ywDoW3Nt4fmiaPk@*_LyR0b?pJH-IW4Ovt~ev#YU+6z-a2jhW$<1OyMyEA zfv6AT=7{>M@&)fdvJxH0I&a4fdlw8(8JS*p1e-mOFz^@N*8TvWC$8aFV6#!msfBkj zVR&~5dXjuPJr$RL>6ihiz{m-%<{NZR3WMR_)f+6I@3&^*+rt^9Zi4_KVGkf<^#hda zq|r{i8hsYNmE+XZ(Kft0*KH$M;n@^uA??k-K)fM6+s_;&w%FcRH<&U z*0?-ZeZEZCI(ctH9*{sV6?P z)av2qDP}wzR4T%##XfvMi`kjCuY1@Qvuj1(pL5#G6a&9H=-qNPKmdm#YY}GnPx|}; zNng(DCaJQxcaSSjN=p}j@MM(*gs|}=ZVq_g3QhKY3s@h21@&dn)6C1?<%Jy>JawZQ zV5AydKA6jC@@yss(VycLZK6y41fC5uPKyNFeJajlIHlNgcmlK8QbzfYOny$ zpjyCtzd<7vV6h8{?dO5{@LwWk?RTdUh*EFgmnvSD4_~LxJUC4hbun7;n~yzyv<;aP zUbM0hJ-`Z|(7C`qB%;ZMbUm>a=W0|oRVs&7KB=jFNAZ#Mp=)YA6RWz^gV zQ+*XzfGASkbbrxz2t`-5+5I$QSNIAT*oPt;(XdBDAym1TKbdi zF47Yy%$0;ms6{H0Hb9)C+_?V;F$_pq7d*aqFwDfW>J_^bsPL*>y~Cl-pLjc>U#4XD zJ9KL)XpoG!oVxh08m@{)apgZq0~ILu)4i@59qcQAtmDg1#LDnvzo>7x6Bk0(D%Cav zT4fmfm8ZC6kl!!)=-R(~-DmEH)sZVEP;bvMy7rcVGE|x8T}dQ?4*=Nbmo5G^xg9&j=s|jP0AJd8Su= z>VRwws@L7D51Ky3N%j*ot#l&7b<>_%39f*&AQ!SZ{H-wPgM$i9PnmO@!@2WPnqQpi z(pbVD^=Wk(Vgzm)5qUmIzLjZAAEzt08^x?=)Ddm4Ar%u zYfp6Ep2DlIX_p};$LPkd!kA-kMfkJ#E|*XFziexw*$a;=76GK0p7pph5fr zm|wCU5i9wud|9%2(`G)d#pLwd070xMxedmln?%Q9nU|1KuRi`>@d_1D0Onf0bG^I5 ziC2aD(W|`;fA9tL&HPV~Ut+Djs&Lw9^caX|_wGHcU2@&A?WJ-iAu{a!b$Q&iSPCyl zJY4p%DeHXgup~TE;v?RXz}5puqpx}wu?ld}Ogb1R(~RngicrRrs#ssF3>B^urh+D%@q&yeLrxQ&4*BS17;qlu-R%7S}s$V;~?atINs^0lB!_KoUX!F(GxBsZ-k3j&B%oiwc)TjOy zsP*+HnLL%NMyWIj6ecgYu~okPQ#-e3qTW@m@1fD0iqlPtY^Jivo@D! zn~?zWkoRSJi2?HJ5S^NPooM301hCNo`1XbCgzBYMAHa8Mg=~#@$dI7Q1XvM63mJ~B z_*44M@NX<3?}c|#ebbkYxnfZzx{YQXL8oxv>tEu(BwgmB>YaB!UhXZ`BmUJc=@q(I zV$gTuv9&Q4v4Em<%e6Phn!-IIY)WBH$>)c)dfyscaEa7`xl_%zXkGymNpUodY zQ7Dno?)r~AOgqq3iMCmPm~Ccl)PP8=%1Z_?4AqU6J+k_jEpM!vJbwkp)aO>R1}&z0 zthZ`O%J$FmRW9ob80M%E~Dh1zrFNk6)bfIo0r z7?PIsdb$%>ku{r2ZN5{|Q_2vU@fufohTlBru+o+z>b3x3FQ$Vv5NC)mPr|dOV4Rdc zC%eKrA*owp&-HO0aaoYn%$M5lGFV{fG<@OOvy0N_;pwWo#s=zJGwS|^qO-lYE;h0Kzuq1X(+t5bVvKWZVn zgIf57=i#L$7n*j|**?%|(*wQ5d%KzSQ zt)6a$N%?}fUXezcLRv$$?V^I+V$fsY{+D?lyBERDvss=&&OWO zptlicYRAQw>5;GD`k-l{$}zTq-YeA1VC%)bxY@Y0F7O6=+Gp2GWT4_h=+W03c_7F5&oBZ1wR9 zQ)^cN_ahsI&+{i;99~XR+iTCxll6kn^@7Rgm{qt3Iuq$pAEfa=# zZDrBx3Rpb5dYtE{Fbg0JpkHl>-j}5A-LC_Ga`HLGM)8WsolGi~sBJE-%=bL6xHLXX z#2QKrB#dT0@H-E@{h1|OeDVqe3@Tdue7z)`l6U^%TlM9`095OlE1eKV3N~Tmxg^*LzdR{jRGF1@^&OykVPJuX?yM4r{`S6|ec1*k& zYG*h_%xdZ+QQxz~9$xBxFsD~+aZ18%S7rlSca!R5r2V+{1fDWCyx<4*p;D(~?*H_! zF+ZGPqSWjYtyD-5si}2rmHrCfJ_A`rnA~*Z%j1kGnY{nTX3a0|BD|(cEC_S|(+6dm zyuR|-ghn%1WVg34U_k=-%!WK3Zp|~G59I3LM4$!3!HfC}>~7_wgf^|dd1x8(^nbg` zB1uFd`<}=8c+iq{0u2^I@}oaJe7tFK*WlK3s&m;Ku?7Q8qD7=^%HCjl794Dvf05-!BGMTk7oWb5)G%ct^y2`l^R=bLL4Otr-M}xoiR2EnPD$11Oe?qppgUt9MdoOVO8fRV4(( zhRi_z-jeyryvuW*BcOJs|JKz2G(YlFfC-r#J2;LlJdr~KMh!qVTky$FS^bdXzl1@i zzacR)KMs_`w}(x|$*WOdO5xR{vpyaR=#P6*_Ld@$kNrO?jS@B4%!iXl_o?J0(w=|2f%)XFwf?K_^$ds0{!~P)p9E`3#BXYHtTC&lC!;5~qta^G?Z^ zHi3Kf|97j8*-&)FtCU0Py9v=j9}qE%!if>uvKK-Zh+m2eZ*fwBHSyJ{S4#!F5213} zoj1>LM;^Kl-XzQL0|SvT;$GQm@Pm;*p(811%-yRkfStyJpG?!>Q4E?Pz6G=p7As8U ziy7Y!*-ZI8jk}2*Z)xIZ-GjXhuX}dBuycu}&pn3cL6XISaT4aY%1YJ4*c?EgL?}Xn z+ehD&?>uLC*+2{b75a+v>-`auw%>r6f(mpI%CQP!GER68LNf^Qmh0f0i3iNjJy{_D z^Cl`Ptk3iOkvcz){hKH;z%f7E`B==X-YIwVCfHwdkvt-R8KK%bUpI0NmS@{ z+vBi?%bJ@4qi%L@o7s^He(Q<8k39#Pv;Ro!9u<<60jsR?FYwg#$@kuSjvI#KajgQF3>#Za$iA z*E44gKDW@9Ca2lKKaby)IqPa-WpaJ1Dc%sy{BQUB;gMSoA?tqHxXHVSV7Q>+Kx6J_ zaK=#jX*T?zdQQVv94H35aU}_nZKx-$VG1b`i8ax#vk0hwsARbi-vNisNa6q?xA&C| zN%1v}x6FHD=NCy9Wu+fKf4n~uUYotpvJHon$iGU;HPyM7WR7qZ8-zoTwQ6h%*yI!P zz09>+&W*wvxPC6Xm!Ob^R zJpha&CTDa8`hQpDoRuD&wN5Ta9-k8xs72lPGsBTO^(t5bq%}UbXQ?5sR4$s19Vk&9 zynolqBQ^KQKg~4wWmm*d)WU#jsZgyX?&oNkHYeytw2Z|w_qv~WgUA6cm=4e?Ka~^_ zjRRRF%2adLhtUFXfyI{ErPD&rLTab{F(&Qdcrkb2gjFY@0Fo=72Mx8nGp*qU9Lc2K z+2Jm`Spp?Z>!R8wyN^}%;hV0Df`=-&`$D4`U>1K2!HXxmpnOPIL?x?uw9QC#CouU- z5Mot6vdhZ}U z%ZzqWgAynB8Tpm!8HxK0u|D3(!%~ecA_pcpRSI{v@xGAoy{l?GYEVz78C>v_qL1zd zZO=Ue-Kk5mzRM0%d0jaGP|&*1e}XNI>JT9Y69+f1Y}l3AGGDD0d|$QC-V1&gi5V{b zfr*kAvsfW-%|}WW(7oF{@f5gJK0RJhtjcV_%DzBa6Faa$0x+##g6jF z!+GKcpdgz(pH0aE{Eg5FgEW%d54<2>;5$hUJnQpAlJ{Dr>ZV3UNftr{-BpNanjfwj z3BaduYy=VyxrHcMQ9>CeSb@aFTx^BUgDKaq2*($TEDqjXfY>GKwFr}@j1hI-PIRhH zIvASArXD?czcq-}y9X3rdk#b6`)fe1&in-9kBcW40ynr=2USN^!78OJ)a*0^)^j;7%24}`?}NvCRZ?JI>e(U)h7QX5;f$7v-^Zb?%^rL^bjeOV=o6`fVBHrV?|o6e zK0F@CZ}!c8lV4{2khU4%hom>Phee%+j{UC70@fP9YCQ&q2woTCIDm-Sjr@k+7a91e z`#18mA9s24g@%9H6Dgg45j|T3jQ@q*EZB>gHGA%2fAN8eD}yEXU^_2YlXMCD*d$V| z>6u|cfqi5OhAO*H#GLvtk5Z>k^PRRn?WB4(;F;GLbr008`04*OoXSwTh?PUiGU4YZ z81ugRgf2i!H-`o(;V@oK1t80RXF&VY1+E$}RUqweqqhMF1<`S8uLl%44B6z+`+9>l zBMh44stl##$WhKLMqgT8Gk;lsRqK8l&*f+FJfw*{&Od7)HaG}Odcc)dUj#4`jMLH~ z7&wploSgN$-|sH>Z*f?FuexscyEA+4d-DitA-}ck;Io!`8lJz9x=|3_?|S`^a3CPf zZsuT~m<6REGhL`Iah+PJ?&EpcxjmS1T&1dLxs*>&gsL{`=4yT3KM}B5ra;6E8hIyf zglKV3nfV7K7MEr}VgTgFt3FVXA^M%gusfE|@kIr_5aS>bGm$#0{@MV038!9h-J{Me z8bIPWaAa}WoA~k^0=>6%z@umE?aTBcP2MI7)7p3@q!%esc~A9bq1?DPl&CZGYU zn{4){q?|xt!$l8FINP@uUpLg^u%Wv1$K$Ir8fW0_q^EB4>?%+DQD$TjrBZF3u4&MI z?+LW(UNewa*Lz>bZWiWU|8Y9qKBydxFPakLaaaX04=5Ys5PNrZo#Lt7$OP6ibkkya zaZ@^{qn#rNz4t51q9?=W@n_!rEdB7xnFz}naP{Iy7dsQ5kONNGgZhzG9u(>aj=nfy zBTW(*`rv)s?A%K&r0+H#Y@X_P_9l-iqdGOy3f_I%7(b~Xb_&F1G@kZY>wE3p0_1)N zgOrdD^yM;C+j9P=;;#$+pBl%EQ>wlf4-2^s!WYddwX;eur)&sNE04b+h0^G&O2<$w z$lp^YLbjzcny3nQ#wD>m)p9?sosWn}%QCR5<*#1O>UkdP)($w0rWKB;Z2Ivu9^#}6 z#q<0pqQGdTL~32Pvt$5#y~I$f*f7Xb%NZ@m|jhpa_(F zxZtaIlxA2V&&%+dJ*-W2o*`$+m_z-gENR}D`8IX%*r%M+dQ+HqH~suFlt|*!3IN(r zGKZHUrW;3_ZqLJZ$D|9FU3+bX^q`0RENLFY(-VTr^ZAAt3^AT4ua>KxJ6A-73urs~ z&lP39*#xlm!~tb>NUd#A&7)$9Bz4dJre|D}M8$R^Lrbj!KHP8TpXFrU3*`cpKX!F% z+bMPp)eu-^B)A0$+$mj;B?zjl=6{C*{?e1}l+u22w9}v=EIc-bxDVnL;1;@ybv_T0 zX3OJRdaz;!&#zD*6y0UHT1emNG`^Q+5mlu++I0G3QPgdhEhs8072wOb)}z3fI2?P? z@-Y#Yq0LWO@Wa*(($kVZC(B%HY3k=!o&TZ`Y&h*nQ3Rv#JSkT1&w*UrGxl&m^eqzz zrQ&zpCuzi1*Z3{dE)1KKvR)@=8kPxsEorW$+zhcVA~joU6{yL zN!ot?+IR8f>e$9DDDs)M_aQ8?Oth}~2@}-;LwY~nOh4hdee?Br8Bxy56qByU?Jtx< zmQ$IZ_a<Q>v86D-c?fI*xbL|@gl8+0w zao+&}(BHjC;O3yE9+S*S-pyHnQnmL>2u>s9ht5|-KJ@nsMIx7`f&@Ug&rY{*q8A~v z&_UN?F?#rcCqq4r~|0fntje=Gb@ zoj|SmX6N_x4;V20Z@M@;citX~#T4JxKg56KH8Qi_rP`Bbg~>H(lxHq2RpFbzT%zh zRf%Li7mk_4v}{B$+B*)P41uHzoOGg!o^`+VXBdEiyjKA;#AK!iR`Z5e?BUfthvgC9 zm>*qJ#5?qFrG%d!t}}7{F4tb25=uG7;^i&l3K&i8+P5NvZu0bvUdv7P)bs5`J2;Rt zCh=p39rn@3D#H9Ftu{@j_ov~0a5y`>AiKm@Nd2&Zv+^CXz3%bhs`shvOC&2rYChZj z$I{#(mybTDe#I$SOz2BoW81|A`5<}X{$#fdzH$Iw4e5`CCX#;%!MnYz9F_Fj zPG-?Ryq#DOu&&@Tv2(+aMLz3d3_Ml7KMke?@}uQuhGi}$M*{&Vb~#t;y~#}|J)l`g z7quOTqHk@w)fk^Y-^arzqs($!08!fLyc-Uu)z2D`Et2RqZmveiNlMtQPH`j7|3ykc9$S zq#F;&mB2wQf4QNVvJo!Igf4ER$i^FW$jw{{bw>M_HuE{!XRJE{)bM?(mXCCJ8!3eC zmH(K-yY6JsB|<}IY!_8Ut(F^1SuZ?nrRq!Nf3Lk!?>m1mPnySFg57g!SZ8IypH+j~ zzy#*5_eNlRr`?NKeSDK6M2}F2ouq2nqneKpWt=G(;9s^0otnnUz8vDWWU}_DTSyJ z36l`pKTcJ=GU9Oq`XFO01ZIS*qi381dCoGtGy2dSuvcU_%!NYd#E5fye-S0btBA-sVei>jc(NUmuRSc#)$8C+&l}@jtfGD0)eq)j5RA;i^%3(I4UZmlSJ-ar z-EMvA);7&g>w0$g@QlN&#iwCi^tRb=7vAj`=$VBUVdP_6;+*k|5f00F5Ec*!eE3K1 z0}0g8?cLaADlx{DTVbn%}*t^!2mQTDQZM%bg zJvN66&eR3X0klW2?({ZHti-ccR9u3_7Z<}LrtvabXlC^~!&mfkwIlE@%6{-P*ycD=j$h(3)k)&Gtu;w|L7^{W6*F2ss=HGNe<JtMyLX=0n+kG8*L&%J>Afh<~tks7QqskhV>8(7rUx z4WiZS_M_Yhwy(hBX3(hx3|IC{k^9!z#8He(WwpwQt|YT)7;JU;h*A9uOqB?tn$z2J zWxdBcpSVI@?-J?i+U469w&X+>_3=u#*4dbh=u_<|*;a~O*p2+!ZHyryq+7xULxQ92 z$we7iPS&sI3w@=E2Y{JG>kH{f>mztuL7M!7UNF%CwbfZPw(Bz{^lR^R3wJD?-v_W3 z{V^G=W_9-x&No|DKdw%Guib*N%ACHSa1RO-A|0tCv;v4DZi48+9>lADei~rDqQs*| zT*;LE2U<40=e5_rGxD-wXL*c1u2Y5ZN`Z@)tax*x?pR`X002u8b17r_;;B zw!S~;;1hMG;)rQ$bA(P9@cexFvuA`!jE|E7ya|n1=P<75oUFdd^uDZitXE{V^rC8v zoH&Q1{DGG^G$+Rj+a=XYh`-X0Z}j0qdSP88rP8pg4s_Re$IvBuXBe`B&~L@%F4Z+I z*{Bwx&C%6A{}_HhGxUT8PqM4;Ps1;sb20%r>4;PZ**63i46(G6o!{Z_BRmKOd466K zpXrQjNzO#U{xmwQ&{NlX{$*LuZ{c)W65BjicAiAt=7$@ee;20M)LEb<65S~=2L4K{ zrLD7TF^ftDH<@`nn1kG+BJIu|Czhd2u{2QIb&fQZTiSY4e!B5%tjZ<@TSSs1yv9UiI>3lg;PDc#fD~+t6 zFZRBl6~)wn&=*GLU|3@(+#{C9mL*a`YlF!Mdbf_+{y7O8JsCOza*HG zG`qOceo55#^0e)sb<`Nsj^mY)$)57nBzHdeX*jn%=T@8`?EK_p z`5yqhKtsQW2w%_4?*D9`^EoPS*@O#|J%Z zQ5-q25iI0mE#qSjn1FWt^B94L4F_`Fy%>%2kxVuD$jA8z1#R~aL4QQJj^te49~IEK zOykN&AU}T{k-FhrbU1M^tqS*a${o4L-%?Z$a7! zqpXju+a@gA#|A!OGjLuIN5~IlR`~^h-HIcP^*7)@%ny70x9tNL&|0^T?gSCpfeUvo z*CjB@aCIB%-eB zx&H(rsDA@-bXd)>@K4zY)(Y0E)Ran+-O<)9UeD-{l*FVp7 z+e&OC@jK=^Fa;d=A$$|9BB3_z#Odq+>0OL|j3d8=5gzrE$H?dR1L)R)C4;-4*2B7M zHjcJV=cxpqy(VicVh%D6()Xk4i9NOk|bl|ksik*Q6=~O_rKNGF0TW*cc*nA z<~r-6keo}BQ(t8qtfY#EuHafBzWA z{1|z8$mhnn%I_Xk73N3r`6C=D57+ar)q_#Jbwsqqj-SVVVy)wI`w)HvAp-mluMu9H zsXB^dM5~b=+89+2MvL(YF&AKjw2nh`g4UgvGt~M38VWEPp>@QMPSiTiv70j#D-Y)4N}2u9j$=L~m`AKgK--{BbHxSZsKl;P|e)~|I2Mx=)Q zXLWkdnG-k$m4M#|QET;RUETYr5Ln}I8y=6^sCcBnhG|{TF@Nse`4Nb@XUaLr8HmYHvTf?1+Bnz~}_PDLZ%iuY9(18V*c$A&JQ2c1-+!h!w!< z`#b-LwHW&vM336_-`Suw+T8AK_zoR=H-P|*5XaQ!SbeYjSlnWK#KQ~VA@C!_LrJOs z+P~q;2?RpqM`_%t1&hOWK~-zzpMT#MV=i{0+dpDIkk$owI0_@bR?E@+8=n7reHT0y zdfACF{IJZc~wL9H|LIyinCCqXgyG&$Gq`DV_bNb5di&cL;f z9s_-y#=nUeq?g?QMY8#d#RPD5%w9 z&tF}BG-ttMG1m2H*3Jqt&NKRO`47DCbzt#i4b%1TaEteExVe ze*SZwJs9P~HS*lm);c}Py+ydzp&dQr1FDFSOQ!n;SRW2cHgX2t&g;O-M1T>l0XuX+ zZ4P`qrqvzPC)TiDtuvlOYgm90Sff$H68^Y3ww^|0{(xoMPM&jiX`S^PiTKfY9-?^E zM#UpNibq)MRE@k2kHuJp#@y57Tst{8=O#&2f!2M*oFUH+t-IguumAR+8z*4&lyCpR zo$O4u`A+TqXWs5N_XmLKI`LfzssbI491SMVu?p|zJR;Y z4t7rvdv+BSc)_uk%ozcm@6h2G`8Z|;nCW^IJg(Pkgon%?@Q?)Z-j@gak!`>4NBpDI zI*GYDF_I)e>_C=8wJy%X@fh*>x2^fBbN<(WA87z0!#;!&YEmjGz%gSSYqhNd3NV@` z2S!s&>y+#H9!BcZI{OL*1yKs9xaKW77@iT8wGf>)AsW_{5E)KKoq z76bq$(bQ%wj*}q_|MAL$?D{A7_>+$Z^kaZ= zQ584=P|6z;0%O;(`zx!zb9Y-G^J)HuV@LDEyG3|+d;2I{F4@=>n>Lg5JkLKd5)p5E zApC!ulYEW#9gf|P7T8rGNiO>sagOaDCCj{V4hL_SgJ#DS4iI&)FaIoXgwigRDnXtT+>g2GDKJY@TVB6Y+I9Yy6wyumXu(4d1MVL>uR{+2h*+gKr+nZL z#qq?ApYmBs9rv^&5QixsNOLfJ5?)n_8GpY*oK*`jAUeKyh|dOCu+cr7@K5_g1CbDn z#(k_WsI>~^yuAD0$59rM9Y37T=!ZQ<_Foq0i|%+FO~=ze_Hw1uU*!`cOqGdq)>4+P zG~DecYMtV_Zrl$qmFt`X*B00R3nNr0XOZ&f@d3c4d)|8Ft<)QEZ3Z#GEJ8Wx&uB3O zqoyjv5sWyC$k}QxFn?n7W>ed*zd`!j>3aqtX8(U3-q)o;IaaQNuAkWgZ}`#kK=k%p zRVCu|O8|`YbQoQKJvzVss!Bu=j7UTmZFG89NG#lY$8%lU`Ht&kIGMC>K;L_-X4>Ex zH}gh|MAjGM^~l30A-!v0*ze&G*-7h>iV{cSh)H%ZI>8zix3LZ1SdaUd9Z`S$ZNG?e z1S4iDMSi6Tz{b;JH1uluSoO$&dIaV=^W#WsAdU>EM`uju2Cza}>o9V1on3R!P=h@K zGi|r?I+=g)U!Q;L{;?1Ccjm|5&Mj_)h!}-9On+lk?;m{7zY~10{Za1u3h>VvW6rs@Jr>0-@giXYqwX~E=#?&}<%Q@E z#i5LmiTE2p3i&%cpWPp1J|YL@^%`ORLj1rI?43KdZCQOy*Eqsn^xa#%uU|%tM3=PK zQ4*uoowN?eh&hK=4|#ZWJXX7JiaM0JJG})SU6cMcMAx4q`?DG&7S}k$L?XT>m}tlX za1*pT)>{N4nlQTLqq5p5FdDe;PxU@vgvFsWH;(muAi*EQh>4O=$j^yx@@Rl~#K3xy zoX9hJ=)7+)HA5)~BvbCXj#w1p53B1i9&vg;`Rh_pPhubE0!A8Jj!}Az51WrnHjL;m z@=;rqMVJqyw|#%E>%E|LSe*vdu6XTjQgNtHM>!H|C_fdGFta+~ouBg2Gk#&gJo4y0 zaX#V)Iv?R<^PlhJe6*BD{=%c`*=TB&b2nm?=8--OGie>&vGz7M{a0DEI@EPlrOQWM z*Vnb8uH(nL3*y-qK7zkq>tuhK%>(J~g4(hy0RABPh;y8eh)JDOWFP5yt}`qH{`u~L z+M;;Y)ph6haY$9|NNxN$SO1@&m2uY1M+yQ1_@tgMUs!kQ`uB4=MyZkaXEn2kwY7() zan1`3i*hv|(|7cieS)D)Jn%*$0`^P0-lu(>cjH#C?FPU74;XDO7s&JLsrJ&{7>Z|AmKbBX#U9Wz@vDLdHNKp z*T`y&yaV%>c7>6hqYak(yU!K z&0$9C^vy7NaqTU~A+C8G{$)(4xIeR*#mGB<$wvVrXnoVijzgmJQN*Et?0iHYbiNZ} z66TSpb=H2-Hi;aEj0DV3*JaiUzN6OhO|2U;Y2CyltJgY<*LC!0cR>tblt=3T<^gv> zV_LCDK4K^zWs!5%$$2^-@n@+SezA8oy9vWEIORfqy7zw|=N)1$aHZ#Z*JWu})~U*j zJ;KB$LWP9nL`lE+^A}gthr`QDZ?^HJw2WweCOy75Fqc8ZQDhfm+K?F?6`(UlpLOo*?O7|Ei zjAVPPZX>M?W~QbqKFlXO^bc1$v-@gO$Ea(z$A~CKKwL1Y*|Qiq=R?4R0KmVePv%F` zeaK_9<9u1}N1J4vo(I<1b+T8e)!X<=5g?`H``$XQrP9)+bWCaHI-)B#=wEW({pU~g z8e!(T&^zblr{DaEQRs2SNL1KrHW3urldmzC>$^4b>R6vBQ5-?}L%sx~DRWIkuwWFd zb4JrvuEPW~M%+G}KMd!;nQXQ(SB8=PHqXDW_>rj{!mIbN=0{r1kePT&BgI8Ccx!bS z>2=*@Hl3*(wdM*V@}pd?I>2|~I%ABkASclnAtHWYWc3)?3r10h(P|@I<1-%3T!(lY zMhFmVx^Amod41bPd+T%W+b0k00;d#Z z=kstn9q(Tc;F<%_v5veYY6Gc^3w`wHRF^F&enSmH)b|DgqkdSgs zNyb=F6x*5~_J>xteb;@|e9YZh+v`1C;f-1BaQ%@LK7(jLKseU2x`j+VId5oloe&U<@Mpvw5?&}ZVv3fV#OMUHyL)XgbHdLG+oQ% zV6+VMF))FX2JWqt;uQyn2e+pr5tdQ>=*V!hjGhq20GiTd&{3XmYhZNHT7ye?`QiAm zoTneU85zy~nrZUmt)qow`$cg8K0SPFYSjUwwr!e*b6%EZ%2N9LJTQtu4NqY?0t~@i z0HY*HGgcM_H;iCMUDuo9<-AJzKC$lh#}6iO(sTMk85kKE0i%!sh6s<0 zn8`5U^Vx2Ov&ejZ+CPGMrkpI&1@Vd_Y zbqeYBv2KJEuA^JWy4l8?U}0;9kx@}*ETx1BDNuAhBeA9wCWL7}XJmhW^3hDJGmK1K zmk~mwl!j3p8tdXHLPM;hYsNAY>$dy-LF=JrFwzc)bpf@vOA7un8mIoqI544l&vRZg z3_4O(#f!XTEE{wrUJ-s+g)#!T2t5e-O3B*fqq63v_HO@lU*r17y^7!8HvIS}`DjK* zE=J^?QG5*}90?&u9p#`SU}SaFdAs5Fk9CU+V;wNcb5qw5B80>^T7~8#FvKGx3KQld zqy6+6c5$D0?$2o9!Qy7IZeEe+_kwyoT*E3`*ReDsln%8wLaW>4qxaf-AEcx3a1I*- z^3hkU8BATLOG3em;UW#EgtzWMc;8|X>)kjEv9t}`vl zlRWCtoz$a%clq^o@~p#ZF7l{^(M1*}t#!}nxPo-$5=M7&_CG{l?rdClBI*bt z+D;28y|>h(|BIHZN3{PIJN_)__9jkW_a?b+F{SDM!Y&4D{bSNK{p0NaqzwQO8Dp%q zO%aLV*?uBV(FoVC0mh|5F$NBSJ>hF)AyM@BVul zL`EBHbzRqO&xrpPOeR}P{{SIz#EAMZ;*tyy$A5^7(frp~j-%#pMvx_WfpuY|To@Hh zsH`qvU<6^6mWZrlR9nl8C_=8IIG5~e`tKMi1&CM_WnYf~;=GHbXE1ebPfcHs{AT;K zo1Z4}kqN(X7= zN}9^Z*1s?kd(sAgzsWE_a`h;$%A&leB26?pAl6tjFrt=3SrUszR?&|UL~=xiVYP9L zPL5GK0a4lm5JpmuB-hC>D3-LAT=(moVUN|F*6Qm7(oaTtE`43Bca7Ae6{r8Z+yHsU&Op^|7zlz|*UA6?@s^qr`bf!B z$$5K+$kvo@jS)Al^s$hwU zEwL|9Xit8A0l=*`C)rLeHsr3MtL~|5no8yz4dcK_S8$y}Lb*R?0pRU?oa!HXnx?Q^gKd z&IYK(E`>GWP#qW1ztPWB;-L*nidlu>ap9>_7Iu^dmO8o<1QNBv{}aVo3Nhb5SD9Hh}j40N~-q{!f7Y$NmSv{sV-; z{^z6mv#vTd$QnStA*Vkr!Ttk46#f3J$<6{Hd;i({&)$Fb{-1`IDNyYHd_fuekNrP; z)N-=x?EMG8{@2G={R~O({KkPiz>lk#zVZ1``Fz3+0rtPsOceUu4GiOIjVTvqOtAla4! z2=3TbR-?PFmjAzNB9waNGlhc7HM-;?r-NZuQvZ1umwC?x4V9`32WH}`YpXU+!ZAvt zC0lFzA7~Q$kNrOo_8{V%97 z>_7IupgOW!Bs`j-k5&JHfdloA`hO}i)PH094}kjbyhGG~-;8Aiu5w`Jm$(1*{ZO;7 z(yFxR>+iKrY^!mxp#F2ryzV&joPz4q#l#=gWTd*ba&c61i=@$+t-t+$AWoAi1^fSu zu>aWqis}H-TYzklaUlQz7*6u`pI^wx`OPW}O4`#)OM1+QiWxto)JI17lO z;0@UR-|Q97fmA^Wb)njfRM%E6j%Gu>{!?l6XKQEw1F2yDvHvd-_8|cx zy5Da1`+dLdKek_d{cQvNabDg}=F3F4Sr`Vun4?TYYWn_9Nti$)3Gv^UUfF&tW=o}c zx8)2wpD%F#lhaG@l|PIBwK*$4hE-=Dg+YnnY#;j7n(0I)xI|AlOxdSvuzQDkgLfUyyrO>CaR zLWbnB;r3?&A^As)4}kzV=d88!yqIY+qX`8W>7CJVx-n`}LTQZBv6Te>6y_pW8xUM# zg#tzr*1+g+^X~Lx1Y2=QjYAFh)^*31Spr6yn80 zj5s}3n9m=4IPs_>Vzj)qj{2@`?{)Np7%_kUC}NcFb@6Y6iY_yiT}j^)dD_3&T-8T% zfVII8wr%s?uj@K5%Vef;97ExGq+jMyQvrQQV&r2l(&|vOEg<^<`8@p{q(I`FU+ucg z^JL6u#t;fIszDPZMZK=;T4EF>iJk8`Me^{E^}6HpD1=9^n{SNFRa1yjtx1$peS8PG z?F`>y#3C_5g=KnOg_*^f-+7KN^(ffu;@a)Jv()R%RbsCz#0Y9CqsuT1{cRq#0MQlp zjR5kA4wCy9*xA%?<=-p?D$j zg$l`D7wd=^EweGx8|p|8gX&-QI=Y9WjNq+|j-M@+W0>`g7;Vn`lu^-nM2tQ@`nGMM zuA934wx=<|?RET|N@v_Z=B|UgZ5s&V*kLz&ElX~sEIW4Bdb_*-ziZi!-BzM9)Zv+} z^p#hbvR@$OKz>*W(anO?9Y5T_-Qg&|9(nk`a_Bj%81VV!drPN*%P_;UhYug_Z;v!a zk$r|!+OM0Pnbkf+mhGcd`ELFFCFovYIPa;=K>!VmJckXxZvT&epJ|Xr4-b9sB!1n@ ztoFT$G99v;q%DKrm8!%j!!TliaH`#}5hh6f0%__xLyolX?c~?dr=NdaJ85=y_Smsw z8W_NFbsM4`u8x#5@LO=qFgp42bC}A%DB5qCBR&28i3G$I(02O4gGWzCBN#1toI7{6 z+qtZLCYz9(BeN)FJV2=wVgTfOosE!zdeuUxi-Bjp227)q=eIYvwhZy|$?u*!duAV_ zHw}z{MF$Oc1uD-ef3^BvQVgsyB3OjJ8$S&=_?tYdLx|ghy35UqL)_ zpnZ&lkvX`A2vxJjMp}*rh8$IpTZ7TrQjR7tk^}2p%VPlrR#-&{EQ*3YNq=EY3|QBO zzZzgk*FAlj4+fi?TW&`&WP8+kZjV^NNaPW~)LYd-2>`%h^_HV>UCjp=%up^B}REIMg(Eh#W3P<9u*g!Nqu}XiTgbGeDcL;&^Iw6UpeY@ zt{50GBp8GUQh4wM7bGTuoM<4Kb8tQI^yz4j_cpgS!)j~k+}U%Tu7Q#HV+E_mDLazx zO)p4QHj%7;-M$>y{W3 z1*6RI-Lf=Cq3{3TcCM7!$?M`ENRZ;sF)%Xxy08Sm@#DvIp3|!Y-QNzAjddMcHW)aM z3glgJyd;WcjHCZhb$pZ}Mdm79cW>CwbL=PpOBi)zd!&d_9w~%($7)u9uec`w{23^J z;sB$2{eJGP>$+Wy(VR`!g`NP2Unq&L!w_8;{j_3u^b_EOBji|E<8Z5Ua~<-c>+KI^aB_b-af-v*Rien z58%Ivz8{j*RLs$GbK!M#Jo&pa{ag*TY(s}b!Dm26iBYT77H;=XD#xFL2erwSekJ@a zTF8}|^cR-rWFSUlyKcpZ%~=5$u}jszD38jLz*DAN%i`~ug^NFDI5g}LlmL*U|3{Qk z)%Gxc*|})b(dQ6MM11n?G}EiBzE5A#A8vmhKYk+Q0DuI*m2Riin)9jl0ulgn@*qPt znJTF2pLr@yE`SCn0LJ<&JP!wG;%j4oZ8c6uVo^W+Tojf%V}&FsI%$Qr{F z0O6H}QyBI0fpQ-@vfP@xkE5ZQYBgSd~4GUOyp9FwE z13V!|!(p%2SMKA=6^&5~&~@nh3}Z2U)jxnyqU1q|Q4jXOO^mK!7|C|foyQ`B?!}+U z!BsbSHBKN#_j>(aEh3VxyE4~m8%!1sy8v=n^yIe=-2{nKf+Wwu^*|YO`NLRPI7V0J zS}oZ(=Ef>Ja#3!k672*SaY+l6vqwe zQ(E#BS9LaOOuHWcI*9lQgT1{6MlT?=^UvbK4R3`@mg{U>w~>=Nup7%SrC6Ep(j=^J z{9g7jffE2_SDD2dHw;Bd4!$?CbU9vYAVPX*awL4oxE_KLPtmaPo5pC{we!!yjqBcW zgvb{|JaY6sX1rjQg#-2>VtpT@t*MK~BjwINiy9-N?{j@cIXn0Lmj?$qxCWj4oHqBq z|Ic~nfXXJWr=QhW*KL%&fNX;;_Gm%o9pDk;-B;D&{j6~z1e0gc%FlRGRrC6~#%R;^ z6#wGlf?K~`f4@C-w~XX{|ARNW8l&|oj0nPL(Y^A^zwdwS&AchI>HGeNW3+KgV?>T} zw6Ji~^o!gUG5HG;q;nhv$$ZfitM5PHz7nhlHrCg4FCcdF>&`7K-V`?p)8sWv*^&Fb z@iCI;SNnAv>v%69Lyi^`Cs!!7K}t%0RHsLDr95oFi>m8+1$acmjZkbVx{lk)d1x85n7f98orA3%?sYNF^knMOM7`0qI|Vx&wW< z{rRsbwzhVd8I1mCL?3Dipk5IScc_Dm?21pDZOFG`9ei#WGr?4*SNAzW?FJ zf+HuPDNeGPr^J0a%|THx`i{9k<%l#!9~&64 zcd-R7NQCp~E=Y2Vo-mNmf$4$L_x=|C24g8lAAX`S65fLnFlv&rBag^sN{rBAqtRH` zp>jkS8M+SP(H|p9YLL>=AKmF0jY^E1mL(0g*?+x$eLutro`Cf`wiQkBO6CG^X z-PzMi7IZ65pFXv`bkkLFAc~u&t}EnT<)zdh2Lh2j(`Sx(Y>lSrUs=7iv%3ch*y&TJ zmTxZlX1iqZ#%~VYl*&D?NqScvtr!T!$UX3}x`tt-#u%MkGBApLH1Cxkab;)v3*Z|7 z!3>lb?J8yr(ckx)nB(IIU);2OH1#7tvTcfH%r2xUZEgyvvyvR)4aO! z>&~uS*Rh0=G2-hhSyzN7zsWbi3eXS@BAK?8)fG2;w6qNHn87^S-%s#DMCUY9ko++^ zbKuu01`0KzwcTq}mnN06OOyCc*49?Hx6y;_XU?2iT3Y6&wnoICNlEFa$n>wRu5Rzh z7?CJP+OKN}MkR$ci8`!Dsv?S@(z0q*>aPd19PJnwK?#84$BrF2`c~bJmm>C^@$ZA< zJ4nSRpY8WFrl-F@4bC|$_h;^Z4fxSxylZ*8-Aa+6C36lT%7x;5_=W7`A7Vu|eKN^G zoIZ3U(0}*dFdy6j1x$ZecD~gLS(sD6IQpXGwmBqVwM!u3Cj;VRq}ZHeehpY*Lu1r# z%_Wc{oPL$^BUkK3KilYMggBgmyTf6g4}gulEJx-n>>B{=j}eDd7RxPwY}DIY-?;X{ zccq^N`pd7FPGH1!_Nc8`+8jpPc1K@^dIa@UB4GV+yda$*M|bb#c@Fywo%Vb?LFHZi zIryoj=6~$&-rc)6Mx9P)etzDaM|Pr(6es?mA4loI2?apOnSMcz%C7;-L<$&n+wFNl z9;KUQL1OPBjB>$v#8Ki8lg*`|inx_z;otTc$ng z!@90J-)>_(k~5F;9RD`~2}bh-Nx;a(9+lrLZ2|svv;c9_zSGQ(pJxiDpNZ(sol@7K z7+ujA**H!e#CJbcDbJ_W^iwGPI7Vc_NWFTD4B{}|2nLe<^PvP}n|<}b|I}U4j;t^U z1;-gTW9R?>wr7*^g&TSl#A~uVY?>~04j!OYseW_an4?*U%+LAICWjREU({ARw*HK_ zAQny?K5lrtZ3RXABt0W-k?MjVMpyz$8u7d$b>zd$bEyYnmXK?!K6gl`B z#Rj6oz*P*$a@3lOBSMqg0RZ$Wk4SONFUY@*F3_W|G1~hTkizK~IkZs>exBu2T$j)(xS^@~*V83r25SP31|tOYObr~>ic!J&QE5|@M-Oo zjR<4wdcBRln4`Ytu{t&%RygAG5$DLqS8J=FALk0q27s}W==`@u0}>?NuCsNv_966m z`6~Zgy-P@{=P`_S{&8QGu?~6XvhClY=)~`8nIbs++3Ta0v9YU685_Ay!4V5DaJ@H> zxQ`9uh|BtZ2iDuiH&2HX**40~cNZ2M)OQ1PlQ&eyV+9UFWtX;{V#2bn@5EZD%u&6l z!ef~J0RF$rk!=0W52FuLeSXV7CnW3-F=Uvde5jQ zdZGB2<(1&*^^^Zl#YnVLP@=&VlUeDQhP(U1&+P>CoR8Hf<2pyns}M&;8}o}=LJ=E# z75;J+vk#3_9KD>I2fhKIxBDS%FsW@YoVf4Hp zj%r69Te75o%9%>#*8v#?L~*F|9y5#~N7C0F_)&j4ebTs&Al3o==@gM;T@kD2k4KC9 zrz1N0^yIkCN;2}eE{ZXa^GxSp{CE1%*B@iW0*qT;Y;`1nb*)O`_ZfTE*L^yMb;$#O z^CH%5ePlcvy&f~@d#a0lD)P;*Ld?)CqrOks5Vt?XTYPy(((fw2kLY*=%Knrlf8D*1 z6jeDQp>u&D!W#J>^&>QiT-Q-OVL}-C4F0{B|FQAt)2Gf?&qTBi9ognQPLJ63Q%i_p zfLPfd4y!C3{4_s$edS1v3tsfhbQI15sLV{)sVQ4OEUaBb`udYjd;LN3Xiy)$Fpxq2 zvMh$_^{dydhlFgwF2yGUs(uzD_k(~BaTH*%q4m-7`u=M-O8)xwtK#X@zLD<6B{UBU zWSOkwgFI=6Q-%(k7Ca?Ua5?Z-Od>6 z0^(1rh{zlYSUnpD+$=`1?#A&bh>UI#bFj`wW1hN+Y5t{=@wjg5U-4yNJTT(r$hbpD z37xq=Xb7&PI#`2ek(eQS3WehO-BqkhKH|oD{iM84{hnd5W6@O=MJ=w2GiB7GF)6E+ zi03;JcvmAjicdcIJQ zJ~9C3omdxM$Yd9N2FKI!l0n|1qNj(B#&yFo>O+!8-=}jaxpCitBgKJ@Wz2vAyH~GX zU9-smi^L$?dg9sV=z4&~ze3&r;}SrxULhT2=Q!A%U(gY}PyM{f`{uu{qa7Z!{U8~+ zo%^+U`?1|o?xnTPpyye70SAbVmXTTEz_4y+ouH1gD+GBRe8QO^u)>CZ+_(T+*QofB#EM)Pm~Myp z==^aS*5$j@1JQgxTKtNP0P6_UwVC0lBZ&ty8`Dav1HrNk>4;*T4rH<+J8Z|gM~r!V z1naW%qr{NA46W?%R>_Sp_8(<5K?dJs30iGFL@utMg-q z{M*ZWW>bFDrJ}t5(0H^gK0!utpMoJ8K)b1q#BFR`NABuAa9mCTa*h z|HAhX9hbR|_pBAVgJeW@c${DCZVo0`y#R**8vFgohZg`&oUzvT**1Mo zw;p;q_T%Uk`pdt56%Qu-t8rj_!C+4SUODF~B}Nd+&iX#OfA*2r_1~Io+l&K0Xfyd= z2Axc|v_aVfXv!PO{?dB$$D$*hZ1mkOM>b|>+t@w(k$BC=D$>EIXpsNqkpC4hK?JZv z3gSl^D>khO>kQdp@}NIrSAunZjCES?+t)wekIb(K2(XSoU5^=>+o&VS2Ll@e_W=SZ zA3O`|3^ZVeO<0$VO~C309FL61xXz600>nI^B`_Xf{sI5Y$nfZNfEBB_e>M}2LGRNa zG!&Fnh)d;Hq5fN5CZKQGV1#bN=c3W z#T|*+7{|H;8w2Aq8C!*aA$Ws-%l&!S@xO0|5D|j z>&Tgop#2=k2=2qsElJ@Igf7qwKw2LTfCYdv*Mak*o)PD1^I;7%pMCWT@A~y`C-KoD za(w|B49sLDQ?0BL(B${Y{}w4THS)*v7qX_(_S-c6y>n}gHt^V7%_b}scuHNYVH-1T zV>Z{uUfz!|7;s{%<(z+${F|H25P)y-3V{`QlRm7AE;|f`b<%xz+FmfEbv@sYN-|QY ztD9krJCc6zk&S`-5CP&Pu+GfDBwAU-4>9JMDPwRMV~&jDF^_KH=Akj4^IsMz2CyQu zBdsHj6sJ2 z9@6hkjGi>R4e1jPW@C5lN0kg& zzA9elKW$7hHzvRVyan(hmQ~kehsN#jFvBirR-jId&Il@8&G05i z0`|WblmjI(0qg(>&cHg&n%RII7P0OqOY7r!WTP_1oVd;{0>wNW2Xt8vjMc!8$moQy z!uGBkbtG}0?x3MxNjxs)!ErWzG+hbKxr(-If?a@-KS0L%THHyH&I0_XOGPnS0jVIP zVHx#(Zjw^;c~M6iw6USt|L6C#*co3c3-G{CA-sX|4cf1REDEkDY~Z9tW@k}eu1FToLtJrv^zzj;x=YKKto;r5} zSPBbg=?9ow#Pwp>wj4x8exr@~vx&$h!Y0_*efkk!B`mM%$1VI@JliI@66Q#sG~LGJ zv9Q?tIBC*RjM<^iK8qp##b8D2&&~Iv0-lf72rQc+a-?x5+_J9s@83Ueb)+~cXb2jZ*1=kTd0`%? zDxwJITty-55ZEfqSdX#4)qQ{;MURTcsUYKuWaK)kOF7?>3N}W(XJ-)$Or8qjV$e@6=H-d1BEug8TV*GjHWz>&VR<>1cdGdXJ7(h2D+HPa{x@0*_{CfoAPf*VEUryQ)@6q=#=nI~j8Lyrs%WYoaXhbXdasya3_H?z zk=IPJ-crGj^2cnfE0p>v=;*_bc^YM0D>AO#GV=3fIS!O2wlx1?Llh;fShHqH&5^9# zkwOQib+AVLdG!im0=fBr1sY{(9Y zZNtwCf&S4JHOq`70Vj> zZ6mj-mz;g}?i27nb#m}n!hWFpc=0tTs`Ib!^OQQB{&Yd{e62qY12nPcT0{8^HPCND$Jn7T=5C6Z^G(^t#%j} zQm*fyiG3C)jy<>MTire4kpBR-@#gJY_}Tc`XFq=n*6Bez#NS@XE@kA7BnaP!D~bD2 z@aO)sH*ev0$Y-DZ0>ipCJFH?|>XgyTk4GEwtslL4L*u&7J_BZWn~Xb{Uz3< zKqQtXPJ-*h{J(ws&p;vUcd_^9Z9_f*E6A5o_F3f1#l)3VxjsBdym|XiCBK*7N58CX zJmS~W4*UJcXJTC?E`9UnpJA-~d>@`KRK_~iVMp59LlVa{eqBCy>lwF>NA6B=UcFnY zM-G`hloL>@NJDR(x6wFf%#YkX#&u*!NBw=01m;}je*rcI-oICEY+OfmJ9IK;fj%r6 zaQ8p+Xa2mI{m1|KAOGrK{YwX9x6-N2voYJl!?$nW44(l|Kaz!?l`wXnMw-t)zt79R z{y=BP@ExSv^~~pscjL;vzV*p-`3tWq^X*Z^tU7%Vy7O91F@t~K<=-$lJ&_ucSN0ih zx*aYb3sR*O?$5>y(`_=kPzjL{sEB5oY+H+tB8|~YHWrHi!3FJH=et(lHk#}(#_UjM zoUQo*CYs!~&j10yz;r(XG7cOt7)VB=GHOS{Mf~cAaB@Gg0U$UF>-t61SjS_AkKC6&Q;d`p=ti8QtxG{{`3>(2@1n7^k`&s;_*m80zQW75`(4Yv@}{(pLDfJ&=OP#4g>Yx1~F?F=KR_jP`z?Wl+XcQGG(KQAg$$ zvA$Gc(svC4D#y=V&ED z#XkPkyFFD$3(yfMOGp;a7;kpbcKR5wF`%QRY-8h#odrA0CWdiRj4UsTy#Zj$p!;U1 z3nMtN%(F4mW#VpI0H~*?^J4S7fW2D}y&(HXNzr~UuYZg82;=nvpYMGSdG@(Ut;&&n z4}6!FY?OY`kFdb2KfLaLoqxZ=zd=IBIYIJL25XX|k*%D~@$xoim_}u^JsEvO#-`vS zf7ErPAG}Z-qx|1g(oP)gc29O_n^roQ&fGe7gv|FNEn|HEx9p$NVI6TtYCB-Fj@6w1 zbFl73L>$ig`8XckYg~8WMy0y{Bm;M%j!wr4+ccQol&yBoXuVvyTQC3P6E5>aOob6Y zx__*jIVtw2SZCgH;B!CLSsT`gcTN|vaDP*cPq=^cH-GbYez|`4w}0oC={vst%k67F z-q9zYeBwTu6GHn}_*avp=jmvYMGMy!{6c5Mi2mRR0g#rbN!=P3Rw_g62>--xel5GTTG5P_i zkD*2*o4c1YabDiW4AYQ|re!oNV^i>vKN@s&ZPwWbY%C7==Q{wxHnjI4)MtlLx5ET6 zmF>kd!a5Eo44dyq2QsoGQB6!oHAmuoDoWCR6t@7uIat>yBF8$-+sE-}JzK`LHLg2y zBf4E3OqLyG$i|S4qM)Pmup%2z|6}EMwrv%CYUh}i`1gYy00Aakc5ZW)h!iVoSZ6b_ zZo;HkwkABciQlj|uB#u~tg%kHQGGn(2eB%B(d#-tEl4Bj)xW)Oelnt!wXt_;CdhtvXU(6Ge;K{!s8#~m|LUq(!?o7x? z>~MH@nqFro>^>7RX$S|FUK{f(%)7wJ$_{|2)d}Qj@L}fDcL2<1ziTJKO#bx_0ABGk z!d00dtWgfEcC<}?0jtFI4{u(>kt_dtkQAN#FO>hXG5QI`m334OPOSg{-#{S0*+#4s z!^_(kCoZEM$>=~vFgd~jCYp2<2R3HN#v$VR7YnYB$=RYL>fixs;bBc(~SfTsGOsqS9II;+9#dDj4 z=RB^{6aD>IXVy3##SZb>?zIWl@vMA7d1pMS6SMf&zIld@mV%CiKc2nw!_A3}9ZTdT z9o5U7?X>PQ2K2Z_w*L8!ke31w99SA{Y>BWdHs*eepL79Ww4PF7w!0E|)M-BZFzkEz z*Iz%+j+ce29|Fv`I`S>0r}WVS0NF7N%4kgG-yj`)2LXa#)%89?M~`b`ck4%WH70&^ z>Zr~f=YM?lYv&{9&g?L834X|_27*zlqRD=AB%@^$p=dQ&IZ^zux^To zT8|&cqX&=cfE!U9C@ieLgpT^LLVoGcKI0Sg9IQESb^gao0L>Or`_bcLUH@>jGvq!X z)}go#e8bMhI!-RAarX(yvgfe+@BaP2`)B{`pMIsi`P#oj2?1yZGf2gCnjTMN0Qe>-^r_29>)p#J}R2y5|m+LmRIKtJ!0syL6vlM2g^Hw}w ztCO&V3G5fL_&03=|DY@!o}airwuEo&XOJ!&Zyh-(PdTJJ2}YN(?W_94aI%d=2UvL? zc~iEF0si^&THOiUCZu0x1E;!M)NHJ-Bls*%{1CSF=()jUEU4(x9O?&Vq9sg2%pG+p z9csV%h=MZOJUi62SvNl%9S*GZ&S8M?zal@1F&#-61JzIla0qlX=17f)0~fH`ia?MQ zO<310qQ*L8huTj+{PAdQk})R8=V?rHIGXXl3}2a9uN1KQRZ0(d~`<{2S$;&;B3C z2>cWjQ7-OF%%&*y%W8CLs_Te9tK>&o##KLeMKZ>?iexL)-%J80A_cawL;h{s1}Jaf z24%E)c9^)N+j?*~a9%GREXMg?ksqyNuSm(rYcA92H@_w$a3s}Wnozfrq6h@yb``8^ zw?iQ!#&dynAN+Wb+kY} zsOewjUpM@y2yy#!MGWjmb*!^#ST|(On8c9VhUZbmI!Y?86W3L%V_mF}e=87}6sC(z zB$Mi zUPwrA@Ndn=l22`8ZsuU2lwfJ)5MW-+zFxGxpX%&S+n_rC^%pkdOB{;5e8X@dKrM55 za6B9zmBjjfJ2=-=0>nn|9A$ye$nf2@NI_b z>GbpOW2OI-&6pr!9PDa34eMeW*3H@hV2yZ=by3%mi0jxlY!BAOdd7Hk+jx;gvc>6| zsqSNL5gVYpIVM?mo(m>~#`)KAd(vI$h~9_$)S!;kb7$yC;~u8*sT!~dP1e)F@%C4R zWsJi3dZ5x5+1&h5Ny(U3zJ?Mzgz6nh3JRwo0=w+W{9IKxN;4b+EqQQ-eXTLt6SV0Jc^eArfFIMIRg56G=d z5#i6i<=xDyItsD_ptC%Vnfb-Lb;18k9dW9Eg4EBgaX&1m;!QZ<90!(nO_loD3ck4e zg^f|3`%3`%_Bse2XuT#GY?Mhqb`tw~af+7!n#q6g%D=n>P+pIx>!IyuY}Hqgs8=p& zS;&g+Qp_SrQih|~DE)a`Mh_uT{cV_kJbrT-H{=&>;KZU@TBfeArwH2^*HM>^HTjXg zfBv8{)>R}vkjD8(5$-x}V`fC0e&iu}lK^P?RZ z1=g|lMA{66jtZxJ;nG05ajdpBAP^LTSl2D0>R&!k?!zCC)+QNkqKxBiWTNRwv}}2C zJaZOcoruVh9~H3zfMzM1-nMoBMFU{1_?f`}0R@e{>mpuPHTI)A*4aF)>(7dntq;#v zEMr|q3ZrzZV_mH0jYn7Bf32jIWvgUl+vfTfwJ8keJ=d`ckyZZn^?0I+j+XpU(9tM{ z5T8QtbIITG{k*J>vSGq@XrO_ib-RkK2U;K`!GVR?*hYQ&P~XMf4s2|=%$f;$Z5Ch$ zz;d}Tqa(xZ`;W^T`o+ls+y2>S=X!J9f5^TS*caCo4=>NZn^~HE1|~b#H~-$2yBCM{ zGfwFkW|n@kT?g4-_q_*3==*HBy1YJ~O#qa(HKP1C9ecwGeGf^O*WJPj{8O!IhuBhD zqR!b>mbp9B99gOFtgQ*ghu^Ira35}Cb$vyVw_q|t6_tqdzhg6ddFpF}jd|B9b^sYO z#F=1+Kq%EEW0WUM+vzD@xrBlB9iPeFt$qa0p=raq!z^{9P*=wag0Z=n#g!xk2vhgz z#=5ZB`7cls7Ln?xQAH0u9x)%R%NP@7j3L|5I1mgo{lcoBUk?iqjfaJ6IZ_Q3JLHaJ z5pnsh(oJ`76K3cmY>%C0u-5k>{J%rhc@-$H>aK?8VHN=Ef=xF#eD2ox#`$00zfbJmCoF6N3I3(* z+v}GUc@0duplH>1vPCHjyIHIUlRy_#<6qq{|JF0)G)gXH++v8i`-qGe_muZhr_77Y z{T)8P|NFoH5C7pmVrKvL-~QXb@i+fk#C7cTm(r2oe@so>Re?5sp3J}As7uci;X8cXfdG^mY8o!&@RsG^K8y#j7HKA~Z&&#) z2=Fg>TgLd`5}o}YEPt9A4cj(!LJiN<-d*)gnotKB>BtK@lH?aZ&Xh3*R5YG_Fsvg| zz%>dsc45#5Tg4a!(UHxuLzsQAZdIf+6!vgnxW;a@`H=}fqVyzVQ>o|RW++Q=G#38M z_hYd_B?$qn9|$DHz<`8YygVFnJpZuABdxCv8EvYJ+>H))hKVy&z=3ary8(=6itSzQ zJcFb%RuS8JSXa-ArC71v9iFe}k4G_kJkkUY zhD}msn!tELuiK98Z2*E#E;Fv)mK#d~ez)`c0ZTiT%Zw~5zF&>W0+SPm6F6%isl!owTpbr8& zH%wahJH`^(2^5|hEHdXJG7>TtY^!J?YAB#}XCZO+$3scoCh+fO2ETW8AKkK>I}o6Jcqy;fX4e9Ooc&h; z1V0c4ATg=A8Sfh42LwP1=D&Vu4=`Slr6pzrD_?u=W?+P@+gM#kUepoSmv_s^Rm1?P zt|O53+-GA}rTe!-b2B58N9u1i)=?GB_oD*V@iNf`Gb}lh{##*VOiA;Bpsu8TsOYuB z#~+VAd>Q#6z!}|sS%C zhRv7pqmB-E&^s-*#1||%eAagW=y}o0Hi7@b4uA)i@$#V`vW~PL>D`Ulj;1mjh1^S! zjbR*E+|?oHf_r}oF&2^hk!>^S&rj0zTMq$tF=Gu=&~x1e&y?3mK5CqO8)Bbt4%L08 z@L!L$c^`Kwz#!dtkc*KM-WM~gZ`CJTIE)+uJbps`KL5)&|1QjwQCw?!TX)J2jrm%WpS|9;Yc^&BsiAJ|K%glK1JWT>+@hl@o zah)h*05^h%06WR_=OuvjL7FBO3>XE|5wF){Q5pB~IUPKUJ~xV!D0vrlpCf-<59|%|*57A*epzD9 z{mU3(zHHR`VEjkTkA#SHhhh$rjY7IFzH>N=kKw@LJUL@=TR;LwVaizi9XSKQoh3Y6 zPeFGOfp zt4qm$ElX&Uxwv?V|Cqoq&Az$&U{oBImwKMLSSgaTk4*pe3=W;pIhq8;0qQ_qQ0 zfq=e5sw9@>#C251^T!{LxHsP_V@#AWM%+jT$QJw%OS~AMusRNR5^z5*jJcgdZV%Kk zu!akb&Vhb8~fahDX#&3sd{1@IK*a0BqEoNk! zSez4w0Bb)rkX?RSM!DvHYyWjDdJq{eBz*|}xAtH6BlDwp#*U7P?-A0?ecAExQ5;wt zmTfdUNZ=4t#1+`(xj4y^op2H2&$1DIQ;I92yq@Q$+9}lGp75 zTlvBO)lZDhHiv&6co`ueBRR}%!YM*&sG>uy2H@=W5NXZ_=YfA!))T>wq^u%rIWJ9rV6M%l-HWsFJ#QkV3$T&?!m-hrZB1RTX0>t39 zG(|BF>sDfiq$c&c(T@)74zLd5K=`2_8S$g&!MX^5b#(lzn_&P)0vR#L#+U=Irvm{b zuB5&!<6%5cdd%@C$&eq#BgS>3ZlpIHR_gu_9WEE!`zWmD^UC!xcTUW}breOgru029CF z3#E1bZ#nk@)5FSW`6KBp{;h|9u#g7*$d8f|jz_RgCHb=WhAx4^DGn@7$~ihc^FY`1 z=coJ(F97794b`d1AB7DIMG`DbU|&w+`$!%C8T^A?N$UD|eC^``V8U4j{k3;t?M0YK zWCwkw@$c|JCt5%0Fri8tPNZuTYgqGqv*l9>`+J^?Swk!NI0!X+ZZjvZ4-dN zIB_MF>x>uhJn2ElBVUjo#Y4t*+>LY}aJC9v7y!Eg;^G5aVYNYuLmlZcR~!>CA!hid zZ~Dex^(%kPAOGWj`e%OnXJ5T~z0-$+wFu%7|HV)FD%9~Yw_QiE(a}V#GmZmwtiEyL za(t8OItlBzj;w~&>ty~76F=-%%geL5_kAsZA-&h{rh{Z5pPYX|bfJsU!^&uTVe&cr zTO0qEetoka9h_H$rZxMNZhkQ#l|Nc=z}7b3ucD0kKi91 z7RNpsw|&IHzZ9$Mv3KkNdQd;=hl=0v+kf|O{EffmyT9vue(&%713&w-KYyUdQLqO5 z(_|nGQIlftb{z>UorQIAZ?QMW3jTdGO-8MwxK&4S&)=}ILwO%n6MUSsu2-7zy|V*A zG%~4E=f9e9kLht`d}`V0?)fhy8Yb-|D~JPc=LqRn@F(?hhy#ni$G_iNL8VIH*}unC)&p13=thGW&k{4)Y?2`{wdrkNf!FasftYXW-Ywx0E*a*-?lxgq_#q z+0N(R&HShjIQ!+okA<;klL?(+Zf1cZ<*q&;0G)4RypNf=(vha9`_Xh2#gLAqk;U4| z9A1@{cpvkyF2-z3PZEWgND`A)3I~kTvWyGf{Q06?06)r3MXZZ3<5&kOSr*N3#F55l zbT&l47~*UoKp#U@CEbWoRXl&#@yH_l*pK1?Su(GAXty{7GOdje9RS~4vx9~?>~0>Ovbus$2!fw zVFFljRY!q&n>8NUxQ^mQ__q;qL4{q>bgpt8srml@|KI=nKVPMFT`$Ha(fW4(^w+HC z^k_1=nTwh~-Tb?mwejy!Q<5i{%ftn^)y{jAy0#@{cRuDeeQyPbl`U#r(;+EPQ`hKX~>_W8PDADz z$ycp#o4oG&zw1fx&86S?Vp@gXTs>J}XUwIdUyqjVvLztv|72pE%l z?|T?ycI&M-|921LbOR}$!HEh4;C)knP@cIMaJ7Hvw8oInhx;csJh*-z55T6b1pl#Z(R>hJ4Jju zpld(R;Z6Gy-nHHVqq$1F_w3tmtS4N~qh+nrYL0Z>I8@~4M5kjVfJ^OK*Fm}R4pCJU z;-O$LZuTc}(4FT_1HP6!O! zy=O0}b@$9>XdsDjv02Xvi@Ybpq+h1bZQ})g~?|$@=$F9Bhx?g|$_1ka1JbChD!#(5i>zt!q zr4=1A=jh(`q*oKJ067oTI#vFjUGcl1Odd%&k0koJwLedpe1D`=e+05WqQA>Jzg`A- zjEM+?cjGfH6E;f48;{K&e|>*s_!8x#G;wtI-CLe~;wb<}jvV>=o3B>KSZAESZ^UQA zXG{#kJQ5Hlv)RlZC)mB>q7fu9K7#U5q2>c-YB34gG!zv`(@-o`SRbRo!e+NMFLnC91=O{jpS}F2hDVCcO6$1$ejOO~) zd>Y3Q8sczR$T$75VFv)Yx63`~ z%B+lmbZw2()=LI?P}5&S)%?Rhju)}VEO0*ur#96?0e zv<|BL>;idCL6}z4f7hQR9bPedKIJiwl=1g*TDRmRMtszmFias|h2JQY*QZ^f{N#Is zRm>ON2iT)JEZG^RgNKpi-m{`(PsA2o9=y@{|#1Mx*){rfEb$G-^t)AzA+ z^--}R#-#qoGg4R6A2(o99D4{cKqpAzd=whCVX1>)j`R^?sX%BV2~h-iqchg_eH65< zqF*ixe6hxZd`ag>{QQrhd`<0{S2_#e8a4C~)U~rpqoK;*7s*TuH&t z{tKYym2VL-FSZ&^`w|G^c?QQ=J4f+(IHSu@BdBkfSKuR6MQM=aV0hk{QXk4y&yJ7aF${h5 z4?{cT8#o%#&ve;(+oaW?Z2^yg4MJZE2$zoStLe2t27>W7a8xbl5W@oH{K^}9`**nk zK3-8AF$Jg#JQjRuT{X|=CO=H8k4b<0v|TguB z9HwV3kwp3k(nsjr@|_ujai%@)N*6K8a7&~WzAv&df8ZTRvuBr;U04M`3Nzxgt^CbI zYv98PzBnGy6N5hw9d6Y>zy7Y(0p9puGF24-Bbv;8_|*jbDyq@#*y@iT4)}SZtc0LT zUN@BOH>0#U#?+1tom7m)=aDN#>V#hlRifA!Qv(0QIO;v(aGr-AT8C?|z4ngVZ@d2b z>x|gov<@czOKfTHlSitJTE|Nr!;!jc9lz>?&!c#)4k8H{x)`A6(;V{%7}GExVf%>W zV_+DHpp_$NT1uaf5B*p4`;T3fNF%6q)+zJ;5Fi7S#}D<9^S+=JVREj%TG#iDTGu-X zoR&G#)-E@`Khml6NB+j+Cniw@#xX>y3W$+kK|{9ud;etbs{Y%Cfw1i|Gc$%$W@ct0 zCu3%2`Zu?|Z+qUJ<6Wn%&3>xmud?c)c0UD`eWwGd(&=P^pONW;kOTOE;y9102#?j( z)mvNJTbtXgCfeNG9_Sy4wkWf}rr2pA)mS>FK=y^t$Jjrs7QpF4U=&4!gz%_>JX)m- zv$({Vn+usO%c^n=Nd?DB^#B8K0svoWHrNyUMMUerJNav3LP8+m z5BPim>V3CM`B4%R6ZYR^#pm;Q+;a2s{KMf!@9$B3#z|9ChAub+G�`t!sibX1^mIh{CuG8FUD^zBg4Xu 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

    >c(4+3W($aFP~T=;lRA;n;Hm1W5@ zmLs7ft(Qq68*o!}(V5}SfjOocGq8pV+*V_=_BfgPp=lj-oocU+hT_H^ZW=pphjfA; zYDX%Y9uAzZ6Vdl{`*kax{$rpGx|C^<4e%}oIcl+I_rVXPvO(#pow|d6LRu|T!f|tG z;Yz<4pGJUrTDAM#UM>Aj7^pb-k!Do{L=QCG`gV+i&tt7Sb`K86GCjwdVYxmCFNwe% zers72oM^GpRR?&r{)Mz6*n_GJPd`VIP@m2a8OR}XmcPcz#p!;s+>G8~eZl`dnvy&C zoXEOuzdvhC@^QItTy0b$4ClL;JGU|24h5NtjM6hIcEW-Ut@uUuqp5-5P z5|!zldAdsc-N;~e2h~qpil92Bn#oAIq(>1EhlJ33L zR%r=zxK^W=74iGO|Eg-+tp1z&V2zG#>RR_J={Kl8S-38cOrKM(P@yY}GR{Z}?svd@mExf^y z&HG$Gb`5n@QRL=`vLdeeGOp_R2NpDEitRX>n?u2zgUU=}r}`wfxl_+@nJ7fzm*K(e zx1HY?d$@qLh|!=5RRYCVFi3f(lgv-7K#c!v5209ZQTpxvRNb~4UW}T~ILZKdrdXah zGCAxs(nfDG8swj&mRBV2TIaIpn0(KW0jKTU@mswQC0o^Rd$?Ywe=l^zC1slWsb#Jg zf~FoK53NzY_d97CR#H*IVZC9)IZ(r+P||kN#0l_OKHl|_5?&q^6&0F(jc#t*ej1id z4b7AqpxX%)pV96;PZUEb+d2>|tK*DfI%H!8(-MRCc~>%UCuy8gdKYoPHuCAGb%VFP z>U<=)96YL`&XB!9j%PvmGLfcrMOpfOS%tfl@|jyA9H+qds*~fUXqek$j%NcS`&;6| zTKmR>Gg?To0BCx3EOF?@uzb#4UsLO)T^cSkPnrZky?Tn#uY_~nEo8&Y5!||FCF!jGY34$vgAO@iQ z;ex0;b;W`0C6jyU?)Y97cV@eUNgWG)vuDXt*|!5TG~X zZDJi4d%6meW9eHZ-*58`KNL%SB$X&^#1t2QDe65Vy_LwKtZ!G;h8)e3uxfUXE=aQF zNmj2i`wd@dZA8T}4&WOz^ICI1gQhsV+am1MFqO5}09+GDA3TU$AhS=NR+%^M_C(&^ zn}Mw8+H7|&=3T9%T^L)StQ+TQBGi9dE|(Sh6c zuJ|J(VuBo(gmP0IXh9^!6I!|n;fFMYOGfT8%SCHmL2^~|nz=|p+xQw8Iq2DsBgc`H z(OoW}K06cdOUxq!4v~X284!*QcKa0#%lcE%7EaNA_fT(a4p`_Rzm~um#d-*>S0and z2opHUCQKve%a?J;U00Bk{7a1cNs1BpO{$t^Hef=k@`*O?H1kM&ucT>zNtd04nLv*r zxxwVWNTO##Yd-5|m(*1nnj<_p8KRG6W#zm|87Gh98Lf9Gh{(ARv=1&Tnk1sz8{+oe zsoL$`_t2JX{e?8i%d>NjgN4|%Z@|C@L8&~Q>ecK5hfh2tL6YQ+ zEIl!s{4CS}TEGO?4C{)nRfqddqTN8QEEp-7%J-aKvv|77x|3@^g4{y`D2 zW&EPx9Djgk?j1qw?(RDk`$JTk#)XRy~oZ66xRDl07|F?%OUDVD+fnx~XmuFHd5Ln^8E8l*yipmioDvBb?}~;{^~lsr*|;fG~==`=lkFm+o44 z+3<(?dfUo5Ay~RJj&qC?F9vt8s%NQm@3++54_$hGY+}IcIdYS%{PJIQQE;oT!K5

    9Llncpjw%ry=SMvq^+TtFwVk1b3KKKIjdn94X zXIAJdEZ5F!C9@dWOP2xZS_|toF`gsn{Gyg&$*Xws*@wV_mhIMqbY7F-!>t0Z+Y3i# z8ul3SO8OK3D7+p90q^4l)Y=T@#p95-J>hS5pR}zHrqAAk@IuZ=2U+CQ3g*7ep$YyJ zs+L}xC<3*}7*gI0dB-CSkQ~znjgu8D@(KORz`L{c01X-N`30xlY1#BvqT4aisUia# z_n$z!hqvd0my0E1FWlOyqyz6lu38LN=hX+;`|&W5lnbWMg!ASrExF!&BaANA;K+Tp zoc0RTu@>z-?_wRXU}I=(lqcns3MQ#m5#r_`;!b-s72e0}(=gRO-N87b#by)v$U zh5Kzk{*m3O8xeu{+xS+)Q}iPl?dAp;ey7KGy`U1@)3-*FwAOuqs|xKd>F7A24sgWa z8gRQpl+{oPhi7C&6H6_;MQ?ilcYRK`?iWrRqj{(MwBfn5vZzncqf?<@fS18i=jzG6 z`MsM1lWfQ6k;^qawxzY@z$5SR==mqN5i`+-x$%CF1SIZw^#kn&vL(*-{Zq_$(IPP! z9Ksqg2k9#dfjdu}| z_#&pMjQl)v4<2$&0k=1*wv6{_5e?3R*~59%?uARkw_0=Zy@bh zI+JN87{fnB80%FAv?%V35)d`hthVL(AnB$i()Ak3^JtNHp#w-4rt<}kBFKRlpRdcU z+YhA{6xPsnG57vAC4c*3AlQ()U|A#rXW;#BTU<6<1c zjNi3Xhy!4{&6(KMGV==q4h$M{uzkKV$z^1>4&ct8!~G$f`FXdJGKYD#4Bo}M`nu=R zE@j@`+G`{wvQY{pl4B*3IZ>20bUwfg9Ow9q>{Ih=H%xfW_N~RS>*Nml$tKU)%gLynag>be6Sxx9DuOb%21$${f6y z{E@8OAp$VxxEufL%0hk!NzW(>aj!Y8AfN8O5n`3GBOl|K13d-{}mSQsNSSYQ0n zau^KO!9WrE{Jt2lFNITU2&{M2lhe;OG`dz zgXIa0CwCd`ou%7ViI!gPp3WKmz#D;lV3J9j#K&bG>HUcw68b52N!bVXa-7L-yZR#$ zGZphEDizCfaVOAs2sMrAcj*c2WMXGg_fDRW>dPw0Am`jwk7ICHFKC z%(38Z;us~TuP#fmumV%PK34Zz$Uu%O{@4Ay*uSqQLs3|M;G(*7^bhO!{rI-1IOiGH zvCb|{DlyVwJw_WV{pSKAMl;s*%hxDK zRp3D{YqhN`iK#6)d@8MDM$6T`kjU~ZY}|i$`Xp#P;HU=1G(Daw-kFN?Y}uo10ex&2 zg4yBxWi~|jw=c_dhm2N%EZ_n50M*H2s{w$Qy{ZJ4P%>L*Z%yC)A_gCOSEmO`#s=?x z+!aG+Mm|Wsple4%psG$r+WRbcSC1Y-XRlK&G8f6?3|Sw*e0=LxxuB}yiD7v|N2Zb| z(Z!=l5-CRHO<*Zs&=4s!S-5__wy#Z5ph`m8yzsfs`LbekI;l2izClkflOI>>+v| z`iKjo(oy$&NVN$ETfQgTpMy4~OlzA2!y_8lkk5txbRl_KevumNT5a(rlAi8=iqZr2R)GllxX{FywoMI2-sB5$z#x25p&@Q#Hg+<%$qN`}Q0Wtq1Nd~ANS zY{UzR%(OmG^@!o!nRdZ3u{22CNAI>>7yURuK3c09oqm2?vbxtW4m>_w-DCKH;Ycro zJCjBcjT}9p)vaA_=ki0 zAVb;>?*KJ|Rk>PG-jAW5djZlCED;lh@oHOX@XL+l4tkiy#H;^><^RQ1+)b3-M{@gx8s`tDt6LHDyD zE6|tmd2pLPhF6WOoWX@lfBQ$|cxEx+{wQlOA(!scKzQl0no&@EG%HdlaD!-VdwsPbVl4qG5C#Rfz6l#rnnEwhN zurB@gg>@GgFHw&JVq~%l1WPuDu)}{lg6Q5gR9V&f1F0 zdv5ha4uyyR{$keExyuE;q2^xt;ji4jn2Dq{ru8LBNbdgo^?{}@WfaBZZwN>v`hAt= zL8<-a>4l}PPBz1>JJXguLiN9I*PNtq`YQ>FMNc|-^fgp56C5qdZh?HxYgd*u#SRR> zGWYeWdaL`S>Lap#Hqdo-ob{EmFI*f9A|zg`8=xjl2z1K3N0hnGUrtpbgaeC z@6)-o!h{%9&AtEY_>J+ZhZ%WR416?Y2oS$i)gNIF4N}I}Q_ABHguFeGJyw4G!|$)I zVB{R1V9aS^&6boC&3wiS2(61Aqzk*S6nK$munVoP1rqYwDSX87X?E^^oAd%mA(`_R zihI!cB}vFCgZ!`Gb;Z$$HLlm?I zWVc~-tS;BUxI|1zdv@jU{t_(C5qF2zTeXqMA5(s*Sa&csEE-9wn}G#@E^ORlsyX&3 z4|(O7cXQ>4c$n`bPYk+UftBh6O(9OfdFqlZ>&OMnAiqMJNbm#@aDFN@;epiBpRIpe z%8VMu`yP^B(0?0cSD~jw1KYva=uX*OBfNulg?DqZ;ojkCkwaXB&btl7imG#7NbDW8 zUW;_!enyU5M=2>g{B0}*hu9?f~dHQZAY%AlP=Y>U>4y#+=pMSYalc33on{k056r*b;{J)qQGQ zPW0EkT>LsU64J%`{YvyH{OIa|-WIvc3_|-eBKLJr7p|yhOD*q^YKM1)7#X#JQHu}D z36HrsZZDpS)a;5VH8bEEIZ;zfCYe}5!!mxacT%Un5&2T`)dg~gU6=?A!-)H*h*VQO zS1qvBF0&Q~x$qClVsVDl?y9n;4}Jmy`2-}M8sPcztl=lJKJ*C%n~rt9Tn82;iX50h z^}O4I5#`oj$?Tu_?bvS}vDJIxN1s0Hr|wmorty0HauA;Y7%c*7G5eR@=JDBDY`}2U zd~AvM3_S2FWl`No|BTfy98&^?UbuYNANRd+1U}xE+N?ahX$;(twf60}%pD&J^r7RP z*~gPtBy(Q`*q;>UzW36mIJ=JlKOqJHbeqXD>I(Ve^T&x<#98qTYrNL)RxOaf!oeK) z*%twV-I$F`O7SUNxLsK{pJ|;#^jJ|;112PTft@^!YCCbVL{qq3i@fg_u}Y#DlHv#> z!8V6vs0JF;!5L|GYL%*y$c3zBK?8e2MM(&x%p-tTZCP)C+CJ~g%qr{bt!f~|!|O8L z4jObDu!>$1NB(XHCcQyMDb>r!r7g99*w7Js8f-C>ixLyQ_}bbI+`RPw7mdR8k{s&@ z1#gLEHO|(Bko~=slXn4I+~^tXaXmT+8h?eGD>(}R?5;9bb@(!0YltOM0tktj z#{rlPUvmIzNk2snLKu?B%Y;SM<0pGRnvFSBT)L&vP9c@_r@?o*xnLHOLKndMR9j!J znBw2b6lSNs^Q=|DqlZW|o)tS-1UxHZmaYj}%3(yNW; zk1M7NAVkLOdm_=EEvb(ue_x*7C#(9*#~rSNnuPe8L9UA8f>j(iY@kyn*%O7Bm7-PPOC-F18xRnXi( zI9-^qYi)t-6X5sb{GmE4T-zHg_ulNQ`;!L+|1gu21o+52dv6D+ezVf1vh?3K;@*5n znlH*1sK!p@^^Ac|4t70osdlH_`f+gpxu3Us)-S>2v+O2KOF9Zqgq%VJ@Cq8_BvJ&- zOvCl0$qjh>OWJ|8xNhW8hl&p1Md3;@XBsgR5l~mI#FeUW^%nXwxK*va1j0q=s;MS+ zn1ZfOgR7H~7ipaWXo>5$x4F!m!Lf+Sq_~)i0EUNA*I=;)ES?Q(x{K2&Wfe%voLzQ~ zbuUqeIk?7a;_itN+iyb6IE^=#U9#BhT6P@DBu2^Xh8Vs5C5&=Ewhf9o617#HF0)4m zupuL#Sq!WJbbYa!p1V7}U%9L9f%;Av36*0gv^Mz*es$jM;K^N0 zk_O+|C4)(Un>>+V-Ysjx5z(<)?aLDLwYk935pFHz*5(W@5?0!+-Y+YG$bpGMfv7+r zy;GPoK`IlyaSpeAhr@0!3=*FlkJW)ovon+*Y8TNpry!doj$++hQ~9IDW;qTTQpfLj z$dieo2X>;w@`&+mLzUeB2~D$KD)9NJ@ui3SD%pf?ifDX*a7pjCpMp_!xtH10ZF?%G zQrihAWFG3iU!sFtG3uo?{XP3H7<5<3o~9r|PD0?w!%l48u-7nifOyCK{UI53Gsi64 zsi$eI;_Y9XJ{pmL)h^~8T<^ck>h$2=NYfK{QfYYgEqEPq8i0D_LVZG0)i&<+@JHl; zn=)O*558???1jrga_=!^)KNkk)|r>%7{dc4&a$8y$=K%3huNwmZh+y8gnruz_rG&? zl}=VrCOZGPz` zLlB_wXT#W&S9fe)0kUkO5m)#w!D_e}um(F#SZ=+|ev}2-B_qWW$Dr%qy|8+F5`xD< zF?b?5(ph1~7qUb1g1Y7!N^55439@i(r3EeLLieG%RB@cQsy2|>vjKN_WbaMoR5y@ivs90MylvWv_F?p=D#Cu zMi%->4i}qzPHTcMg1d8NO8#sfP`G!GxjjJe<{|dPc7B>&eJ@dj*3LhLWa7RBEGoX! z{!9i+fL+teI{S&sMc=l3NxFy}o>(nnHq5N93FaUGb4=uE5VEO|nTq9&xNy~a{Z}|4 z!Zd3b%#NE%WGd_2X^FNjneUS#F4@Z?$YT$ifFC|TXwjnbbAU-RG>6U0W^R`FUTBAJ zbJ*Ey3AL1!Qv;;!6`j;ZIOVfl>%|LZpa(Xj#oKP?y~w;ZKJxLVb1R#Xx7_X9!JLy# z55Ts_2@+*hP0pqfPwryEMtdmUJzw>B%9;JdYSqK=>D3^u2bTQTsVA$lVT*@qmg!s0g4-RaX zBkYDFai`l7T_q@sDR&+l1%|H~KlP2Ey|aZjxDLd7_9~oW0 zNtYNfN}tP1ytKVogI46L8|U}k&F{ho#w+3y>lxTz1Ek(Q5`4*@9HW=2wTP0t^+CN- z(-58#2N7;3#F6RNFkJjx*i1W&mZOGw^q8VdvzABnFyCM9&Z;k2IjMA_5X>F-ajqmO z08D$C*fr&pJOB?+T^={YcfC)%D~3twM$fmLM7NE3mjb<5pDU4+j)F++YO`o~)+8}ixq?vUB{ zhV*wLQfs~9t_FLXAQ-YS!e-T=PKEib0L(6e7s|cVy&p)1I=MS@nMJWxNQMqx6+Ix) zk{FIVfx4BO14+Z*ynKK@%0C)f+JDtylv#DI&JVyL*MFXb{McmP z?8vfJrs&?J1iaf#1z>7M;&?~o6~SnnWFbX_KL$#Uw(+*}{_fv_5<3&SNP{7D7~eDS zgKj*mn_%d~QQW$0H|7OvUELb<$!LEdJzYc%bir=h<`Hs_&Eq55i?utjalaEHvzcA!2%iUj6v&Z zEF6}|j&%=NrYDCIy~+>!Y7_B$3qUtS(>ag?pPwo`XPL@>p?}6=lbFrl7{xMqzH0s$ z--ZDaQ8y!b-u&-lJfoeRz zPaZU6E`=&aau^}V8|@BKJY(%==jNFg0IqwIBFcPIyqVIyWWTSQ8`7=4{h7qcYfNd& zyHR&FJ|)cmy#Nm5{t8-D!JK=r{R@%Jo3>0K-)(B_nb0vjF{20kBF#J~cv~F%(?>jx z$nPh;9Pb$A7IYimA#@48A19#FJx%X~21>+|zu9fOb!2D}ia&W?>0J}b58UjfdvgCW z(gqz$T82`SlwK*SG^3(Lc0cOg&y;Gk__@Mf^Zh9R!|zl4jvfzO0VNPcnGw04MAmnT zLg0m1SNARYA(DsfVmZVSOa_c*LSRXlvlUh2Gs=7%>lk2le>F*Qz=wH{hv+~AGcBM?$`32h}G!yK;S4lAB zqu?6pMM13n?OmA3cEVjV=<2Vcd5$yQt0!l=3(Tz2F9&v2QJn%`fP~UHV~RgqaliGY zD9qSEy7J!j5%;g?H3J>m+>rFWtNK7eI{r#ALAyB!SkGA!m_$djvvi4z#K-pjiX2?L zFXY|#6>JQ);I3Wu4xv2dC(}!7t~RO9c=8@i^ZC1Jofd_1hZLRDAh!9Kb1-V}_*~)U zxo)~0JQXA$_7_MTyT2()kzn$vJLA_E+L6R-RW@Q-iApz5B_}PtNAn znG$pXck>v(qRfdio_j(`R+1$`>>3%lA#YwXkrlU;lqoNu1tSNdZ{$7OPy6$*FcgZ$ zT>WI^u__qBKd~yR_R1p}G2#%z7>}qep;NrV zj0Hb8-u(p=)#?A|YTDbWR9+q_b$0wP`7<@{vZ&v0d?B1c2ksa2HoT4-hQC5v&P8?B%4~7mgxI_fvq2hNG~u zmmwu5aJAo|jA!skz6LM;b{YFKvdQvGvpNw_*CU+in8v$OsC;E z{VVCSe`&<*gZTW+(E6J{El&coykT#|(G8liEVakm(kF&80Co;CF9_<$z`rY*3GlLv~^7HT!q5t3ALL+RtdawCjId79}X|A#iBNA41pN(_tdb9 ztHr9vHFVD3nnGvrlNZv@YE=5=Vwg;!dTGz?lsnPmlvm4Plzjv((p?vWe9{1jzT3iI96(Bsc0TJD{2t{<%@0*=-3c8&e zx4}8*TTlKN4E@)%^w#A)!aojtqL<^?t8)oD>AW=$+_1tx;Y6OiHR-x*ybEpJ$$3p^ke`Mw7bjuQoT1^*5DnJ2vN$|umW^~Wbj z_QFR%GjpRC+gnI)r(qcG69V=z7Q>x`0e#x1{O=tQY zK1ge)kj!?P`DOA-g!cHGK&rwTpin^aHBQrX>;nJi&3p@J;LlcKS}gzV8<(i6zkUUh z#;8EOTgBc(B=w%2v$&W-9U>!M}gr{^!s4$|M=i%79o*1e&5Q3vyN zdRqz9>hr2QYTep_!wx53$r%?hDLej!_7a~%qC0gQEmoG#hs_qzEU3cl-2=E!6bhb< z7dGTBLV?1(Ufz-^>u&RQ#IhOmFVzsEJ;VpKRkz}wZpnRS4Z9?n737VizgfPtx^1~d zYpXI}Bt%-mH>sI}^EzC*H1+b?`D~FBD`Cz#x}xB!)gqGoiu)%4pM0k%nQs&DfS-FJ zp0Hgc=fSUdb^IR4RT+MpMCZS{&2zkxHY2?g5)@H(zhyzyXmnM8RdMS-y$n=%Be1u9 zq8F^{3$XD(N)LCYIgKfF6?gQe@&L2?n;D{?t0`D`(~2EB{6gEz;t#%U$6$dJPy%xG zA{RD8K8)mJNWR8vI;RN=_{bG^#gpDF%5}(U=es_Lcr=a4ZZg=ZUs^hNup>sRDSo?O ze(<+1d?>V%EyqR8O~A}JAr&!EUkPd4kiTL=#hBTh$fy+{zU@c`TB2}pc~55|YTB%? za^%B!5O{b?3WtWO*6}#-lduz!UNhwDL@&v9GA5ESH|O>7UhZCo=Mh_`KdScIm{+C8 zP3gn$d+IK5DE#v#jTQ>#_~Dk>pEIOjsoup(ICR(IJ63gcnRv1YCyi6FeQ(#BFMWof z=%M_uNUedFrdGM%-bo#rj{BnxY0mhJo696_Z(%d?{p;)X{q^tg_q54O4}4zpkqu|& z86p>&&bvB}#yxT$!#)l$HvW^Ui{^T^=VXMRc}+@&2mgZO-vyLX2mCx|=^z_1XZvGV z!^N@>Cy`2>HhXt2J9}r`1^h?L1;3m{oqv$MWiEgLB;CRyB1CuR4?ZTyPEr(vGjOFx z33l`Rc|ZJNSevu1&j{4Z(;4yNm$MGtMDIAQKk4ih565A&Gb62-k{5lmW@a7+wsr*h zrt06PnO#CJVvUv>i$UA8CDF$T6;}@Os=&tHJ zEd;Ms)eoX&PWrrbu$!C?V(X!tvD!hS&5U0YK2=aJ&;t3d^HRv-mVg^|v^$gB@E*CH5v zu37Y3==nsQW zENwo&?v+n{1(jm8AA0%1YfOaaY~$U{x5oCZL}=hqqAHV$HlhzcVEg`H&`tpuvMj2Q zj#_@Hkc!6m$$C5CjHJ{d2U;PT@$><=SPCIUsdw`fNINDLl*LN()x`z5vc`}|4`*6U zLtJV-t@4ma0YN@Nf=CGY60bLP6dI`0+`~^&>JoE*6a0mpiHCl&(B_Sxoe30x0*ER- zuTZ8a{=@P%fkBpSX7$bdX6Gsm7H#2+YS;|3x*gb_ilz3A+`MuH1<2Qhmz?N{T|^B1 zcxHErd2Q2RIz(NgUonZfyuVZLxaMU|`SUDUyyEh=7I?yC{hiUj&zp}~`O-vY=Publ z?fI56cja_$BM<-?!&5b7x|~?@q6u;PaauIR@(*C zI6s0zAQ+gO$|mf_YsB7x{{zNAIlqb0U+~RR3y*F~L=5#HeiJO6pLrx&+%fy!aen-hE(&0X;Wn*RTqt4D$8Q7|i) zF;9>921(iKzd6^uMp!1CKnhLS0{!~iYR-Q?u`vcP#s>DB`=ij(AN8*x6hUN7;=1Wo z2cujy3ciSirZGdP8#Abnkt|tUBsqE%d>NA@|5lCvKrpg~deqXMo7C!s&olQBMu305 z2heDKR0Ey|}VT=;B+IfOd*0(-XWRGeezRXBV=7wOPL5}B>pVT`xTp1BvFB#X53`eXW40*YlZrL?-Rk_S zTNUfYRDe`2j7$a|oA1{JiHH@U19P(3!PCx_oNQfQbw6qxcwu0MRZ~_2QVpo%lQRm5_nf=p0{nMZS{AUr_ci(;QdCz-p*mJ|+ z=8y`IF+fPfKwb8v9(97K|9KU&R6oA-xOD9&p#DDa|L#2}o_L~&oOIGjR+OO+v;OPz zFD8p-=x0|L^yH|Zlwjr&2~1{20+hB5YIrjUH7V!6Gn3Z*XX&>Yo-y-ASm^9id2qRe zGRFB|RFAX)MBW&U%wQzHb-9C4Rtu-akMfCC!^nUfvL?5@O;wp32BJq&L&ks};SHW> z&m(8e$IzB`S=l=uBr917SVmjT`DX;iC<~4e+VlGUD6G3bvTTT~c3d}o4?$I`kFi{h z!mRj+N<)lnq?kd>bQU8q>y{}lvPI)M(HW8?pP?H61~76Uwfgg;#`Zk+ih$g#|3zDK za$8rfMo7m!D^zg7wCc&Hm^u-~CotTRo#Pzmyv$`TJIlYQ zcKQ5^h;sh(Pmu6U8jcaD&yE&t6%_`F$cL`@KK>;g5d)^R0L-nxEroz`qu>PI4CX zS=K*p{OfNX@Onx41b0D4%Dl@o`SF-zV^PAtR>{=J=ieh|N2;(PSa}Akk2MJFTFY4b z;0cVeGDL%8G*Xr%lr&J_u+cf-d5-Hk7@20tze85?K$^Hp_xCL50Pa+WR>E& zXwiRkpKB#*6pz`O#tb%g%+SxAb;;tQP!`u&^qd6$R*ioH81Z&B_x=tKwCu5R+PN(YaMe^KTntffCg%MqnltWb@ zhhir7+u!`=6QBHF5&7+Jf3v!}StVb_01**W(mtkRo1F(8d?Oj6^Pm5`1IT#ORu!>< zdz{a!eV0GShM%L$&wo6B8qzuUo-w~0lct`N{SuGecDyiJ*|^4^sl-AbJNv;H+Pla7 zJSJ5D{#pyDCMHo??RW&32OZ#F^Z57fiN@uwTdf{;#I6WBR%zvc{RRTe>Qbtj{I0t1 zmc0LLjH<|3oCT1}+o6XaDU3EAuwP<~1rRxw&GN0#p!`^L50S2e&m|*3=wXwS;Wr>W@kh8LQjPZN$7Rt>+QdWc6f@Z+hz?&GmbC1J+JjT`4Lt*yv zrj?D+TP!6<5(~X~M49(Ak46ILZS(4?Fxs@Tvfg79!S=k|AGHY>k*!vNC{C zEvvv|WB%Uu+H0>TJmHD^?6Z#y(I-CfiLZU_t8*{{)8%yBBHnj%KA-3j%WKz-8&@Dk zB@E4G$@^G{bwIXz`Rv8)sH2WN`Q(!&k313ME)nad419jrVTYEN0OAu{k_GP-%c9@q znfSJQ@?TH^(ETnsz0AMMPZDqd^2x6=$g_}moxzv}7SRZ>R?L4_fq(xVCYUj4i8S&I z7f*W8u~|n3y!YQ;#yCct|8hMlgh(7EaWL|KzQOMOWd?vAIrl{TN5O)dwP6sjV)9YSD-l3E^%B}@u~5SQ68j^W zerQenQGNFPdkFtrcWhjr+kdx$8nulXq+!fp&D6+<97+~OR;))-9@m9X8KVaCqujs_ zwBrr=t@G-i0H`1HSS^ff41Yuh>D&`New_JH*VURIb$vCP5*mLL)ZeBgdm60%JBibH>5WrDAM-HM$tKNo_1~eSjLAIGH2VTh zE|ORguKojzK;dyf>iX{4(zpPlwatDvuYT>MlTYgZqzw7Q9UHO(O3R(`4FFKGhAwv3 z^4s*gCStm~^3O}|@WuMdQ(XRC4nPj2f&*S3ZJ|IXVjb)pc}^~uf5H6c--8u`o3{aJ z@h@J6BJUpd9&i9!U&i=7od247ln;@KSR_D;<7grwv4x3b%ps`1F@eQm6R`>ynTVCx zx`?;31~i~qR$P|E=Ic=~lS*a)mI{gPp*XJD8)&)uZvdr2d&u>uy{)!v{xPlJ7)>nf za*vJXk6O6X`u@mbTNlivrq8u0)qW3#F)HUjw2B!_#M-EliJ1FtGMR=t#^83o`j>(ljrrtN@lR|_`)e61;8ST_;PzlW3Ue*E+5wU3;&RwCR=z{6(dE1ctVcD>0N0~Hnk0k14vi>@QY_~U^r*S5 zmIe6dwEkm^ud)1*HDEuwr;4q!+Hsxj%mla6G5YtMu49JwYE&PiJU#OH&&J4>10ybn zC4n7JHRscBXfnVP%edE6gU3o36)RF@i29$ZIzJMrW$R=}j|AuuUH#{M1;1R^g&QzzZ+=@vTE;9slz&`okZ7 zzXOp8y*K)g3H^VNCjWl#d*AagN-WTWQu$qtq!5l5!6bbV01w!aKijN^JD_2#+2f1TFG>1g_Q8(+@Zz5O zq*Gq-d2l5{P!T_n(a&Q%LnI!xaFzo7{&B+zs~(MejVq-gky)_kZhKXJ1(ABiSPI- z^?sb)>{5u4wbA{o2=^O#80`;o?SBv6hL86IroKAyu%ie;J)x6wash$^D-99?V7 z%SL)jj%A&H>2lX-a#{hj<5gYlx`xoAy(*Kxl{6;a(La-_0BjPiV_BA%-O!}Y+1 zd2BrZ05-(41^wuEc~-s$kNE8L^D;ZU7Jo3hiV3U(fJaub1_QpZ4d$Ymv+E}S_CxdZ z!_QeZjpkFuh+!Z{V&R);{Rx0zG+@-6DK>@zh*07e!p zcoN=@($%{E>-j(Pk{v2K!w4945a8r>{{>+*>GLOG02V`mSfmHGIgg1*PZMCiu^!oK zvR9mF#(QG=VKZLt7VvUFWNRQ%G++?`Fo07IjwJ?0F8dtZz zIXb7V=JcQ29$A|`YJljpx~^-D{XT=8$!GXmRRzHa(EpG6bqJ)ED!u%>hrgQldDeY~ zB8-Xz2`}>h`%%MlpwEP7{+@&Wd6slTIZdojc!&@g9&N=)fz1VK18f#HVg!g|i*%PM zKW_k|B$IL$<2pIdWBC$5+-7p=L!mfcX=Oj((T2O8kAAP(a3^xl<7{#KQ+Np=&Ol2( z6FQa%$CwQ7gEMC*5yc+*dE}Xti{v^(RAIRZaDlLOG(Q!Y|5F%ACTpx*ju1Yq-%>Iy zb6iqW9t5?E@|i3*V`PL6r@n`QN||xi|9{xhIdQ!hHZP?8 zM|HKN=*OdXjm9y`+oMi%TBqxr*drshlCLo*Mm;{mASUnEag4;f#7GE6R;lU$Mu`4n zzs@X+QNLfuygK06(LDR~8%FfaOdHVb>CYOB#HGj{iC7IpCwo8IQl|vQ*mM&-Xd`z# z`12(Cfqu81{&-JgTvT>sd-h#lD*X?opIpH3v|==I&zaiTfG-4WD=OBeqBD$;qXwLe zSSRd;2*D`e;YVH-G8|k$C(n6I5RWYf0L)xOL=&Mk)Lgf|M31A;pq`2T`rJLz95`8G zXwYAr>)|UmG&2w-3p01JUHdDxe>&*rSpZDCeV9#_^N3Npvjy)6&n4yj7uS%?Zy&ZaxoeHyW{_MjsXJJ=u;~D@I_W zPUjnbDwF##`X4tn$76>j@^?b#qRSmjpDt2$o66C)DOejhxuT2d|EXQ&IgcsgF*AE1 z0AM?sc&VKH={vN^9t{WP?Y#7JKR5Qf^CxUckO0%a41n2^VZMJwZB5t!ha^&fh++f% zJiAcbXVvnC(x({R?^U&`BPl@lNk!)SF_HiyO8@6$U%?36e;uM&TV_-H+<58&Ou814 zL-Hrt;*A&?=fjD=5kbUHFNv!Nm!qs2a3V*BGpT3I{lpJ-okuSr>q8+YzLe3QDE!%> zt0hT4ee46HmNm*UMhSb=Zcf*A-N$_@K6{Lw-rs_?XV%Ce`bwX{_Pl`PdiaXnZ@dqqx6_9BmAvm=7NVU0~#+(=LTPc7V}#u(cXU zP)`>8di!n_S7QHFL{CP)1{cW%sBaVuf&{zG2tfZ511%|(>-8$TK@1*gyaSu|pne{Y z1`pV?CiECn ziL5yd!9cay;>`E)uLMT7tKcyvJHP+I8f6ZVqZ0t`SdNlvz}<)(InTHR8B7}MItTU$ z48)09UB|=u?Yi3Y^k1*(}V7V3d%fHglS=N7q1n7)Im%_IUqBm%*!j1{)Z8 zp+H$7d*#!HCOIUe`U+0F(u(y35ncllgH@z8TC( zP)~e@Bu1*DB?|q?B0UAs8QzZufU9z({z(6(n~JVt^#1;y334PFdb29rmYx>s!lfOx7o%aEUCs5Bjn-weC)e1rbHNBe@>A^ zuyb6h+mGjcyeOSwB)i7HlMAwAz+x;qt)g=t+th{f*uaPf090Et<(;q!{GREX+jVXv?O-NESgE=n2z)gVptEW#lh{X{` zT#mxYpBVWnA3j~9&mfuxEXTiOMUFCRz*UGGSs-^YMq`b!iMd2P9Z%-N5hps;b@>io zow_=q2e_{5w@04Fh}$FYHK$%=k33;)Q1^O_Ca*ln_anH-Tn-?AL*j$i^iNXHo0@XJE}pDK_9$MY6++biek3_L z(j9_3cN&kkw+k(m6R(#C{G$8hv&-}JvtZapDj$S%#%(WemlcfONIq|@IY3mo7o&Lt zP>DAS$Iu=5iNnC*#_HwmZLc8_MzQYV-APq+Do5M)ow(~javO$$pzjCQX{Au0D6pF_p3`$4Kamw1GS>Q^}wAMF6-B>L$z_QMOX zUax-tVY{qrFPw9cC&W{4{7rdon23{PCki1B=xNaCAuI6%OO3~*#jgrzY6^c;RkQg@ zNg=k{i?h->QNUCwRpG`Ee6==|cT2%My!N;|(zUp%<@51-?`Mk@`PWPA#kq5?Es26U z{m>rjH44##!@WUm2ilT51G|K-T@%DJlfH2BG zR0KW;#Sa%HZ|9!-wEyzA8coRfi*DiC*dMXU2$dvqjJEgWfCrlC-=j_|-y`$y+I!?@ zv#D@6IXV6G=_8Xn`3;3vuW$f_AKCdHlr_8pb-%;TihRxkdi~ydz1|rrYIO4P{s4S|`URA3lC$lH_KBu2IJbp<|=NT^i}9%B|E`c=q#v zLBGGbX6_1h-3Vde(EtC`V(;m(n*(mEsFqSfcMPNyt#Zi0vNL!v(b}UD8v%5db4oWS zuEx>YG0INr+1cPfYlmy@o7XQh11PBt!cH2rlVSjbUZNBcQecM{-QwH3qGF+)ncCa@ zCpTA{OsWD}7)4ZQNoro%E#AY%y;T=);dE%~97e{p5c2-3DnGkiB>x+TJWm`Hn&qs^ ziu~}j8O^h{m31B?QT|0m5gq3`Dr&x67sGiJ-eVS43!KO!Yq?HTL+24*+KGu0VIkL% zgg%}})`GO(|1j5WK98nePi>#R`wMG^d9D*xz}D4u08kr+$mey|PFtUrd3rUSNk<|1?${pJx$KzV?)? zr4;Uur+I}Mi{3c7gQq{k_hrGX#xa6fW%d~F|5?t?MbX}}q==TUvIZiq;@~lIpU0)k zeGwBP@7h$?VRRM|VPgkGaw#Rs70;k58+*S6(%pegS$crWY+b62$6C=3McB*6Xumo>r3Q_a(1U8J1UrpoD_@NKA6 zRE`O=&9>C4kb>59&DgVR?;49bM)M;sNHDJZaqR&pg#K?__g63?YYpS*j)A0ZWH&U` zY<^@vhh3T2BR_4AWPYUJx^rKMMR}&}!;3;e4(`kV|L&aw-E^Pg!Q+cq(F7lPrkB!& zzrI($oX^isX9(*=kj4xn(8n-FtNBC$M;**d$WZiPgOH!ggMJZ^&QE+GPlTn)L?c;@ zR`VEn=lOBOXL{>4;?icem$d3*a`~_SUom<W}gxpNW?MhM#)Y$6_+GT<>W{okri|9WBjVHvq zuI07!nJ1f~sOz0!h|44soN%7*%oMQSZNTeahn>9kL6pHL)J70d^GyOHVh*^ z*V&JwOc22``iDBKH5iGoR9V0t@pEB5c@C)m-Rx1ga@|@rj(}fh1Cd=DJ8PdI%Vhxg z3uzz(Jw_oI45LMaXpi_tvQRHEKk_E_$YbAI>DO(x+b#ZIe0I5?l6UAsg?);e&9_ zWimqn{;|(_x01cxZHsclpEX#Po88U=BPy!^_$`EdkvWJBUq;p1gieM~M>JRlft%d$`h0II6GTrS67#}6H} z5AJh2E;6;??#XG=*Xxh(>-|&yGds90;tX!b(Q0&GuRjaG@p!!axm0E4=pw>xYMUk! zSq4^zwGM?cYdA~g?WdHl)qem@ONgq?nF1Zg z$Z0Uj03+c15&Fl+nA%hdM)aO_5tb@Vj0O;~^T+J?j!1b=SVjuB1rj;R_87&-wr$18 z@?W+Q;WnkFX>?rSTnCJ#ZgTsInZY>XXrN=bE_<)Xi08T(+msMSQ_smgMr{+DG3V=Y z5be3nd4I<^>K5i|tbY?@njS~_hG#2Png#3;F&Us{AxLIWP46=-#B~@WsWQQJ03ydh zWZgzL$8|R|{ksW_p#J%DX&}a?_v=axMx|5{jJ}0im*?BqVXAW){W}}|@oqXLMmgWW zs7R^jI)YGaj?@J^2+@KgF+XBtK&G=wd%P${>fdu+oaH)^G_gkjBD#?sYmW%O&UOy# zP3+MM+N1aZdvrSe-tYHdfs)KRU*T+YI$L>+E)KM~%zo+z2jTc#K{&F+mw_k`hr{V~ znpg|MPb|wys@#Q9GWwlN`bw(zUUCVk8~Kg9z*M*q0Gn%=}=AR2R7@@44%|2fdZ5+veW2oh$G zq}OgmB6Wp#LKm$f81kl0VYOB+l{{tQ=Xv9g_?hB}=ep62|Cs7YRqbgH02K+uwe|S} z&dwpW%I{13;r+*d7ylC9Q%aM!#YF%VZ;Sg60q{~)FV#NP(?BWF(L^#SjInl0e@Sn^ z7i+?H3$W9K>Qp-C?&$yRaV8sBc4tkV>q(1|l3=7KPsZfdTDFJCMXtmP!E77y?ayoe z_F)uY7zKjCH0HnET4QoOed_*nzjBM7PRWqWeIUX`Rneo(xE3m3$3aQm^?eaD97c9) za-%1=xz1gQBRw%K*IAq^0!-@;n0Rx26^|o0(H$YZegRkWby%*mwlF5u8YQ_iUSv|7 zFk(0#P(SqGIed4(q5H z``_`{M|DTc|6maR0UmG{7!}0@M!K7(P=ZDzYcknvN&!al z(!mJQ{Z~MaU><1UZFq#J^zI6_7?m5X^{r-9SGp*fkRj~>oL>^bNTEV(U5o(TfBD%K znT99kvb>KWGGZr;%E@$c1EW#Em+?4^FojfN=`T2adF3afJ*jvFEJwHDfBRs!%a})dEr|A3-9Q`!>I2w9398W z>(AFsxwhMFwXf(xfx2$q-+vvQ<4=`Hr!=BE>Qi6wGmzZNe^8}bDrxDvF~IN>R7Vbg zbH8~zgWfh_FbtF23W4qiP5avmNe<~@Nq#`Ksj9i)<`6^FNWiq#VD@5Kl$I|38Ai$FV!Xc<{xJ z5duBm=P{p7zpqw57-LD26h$GWW<>7QpU<3Q-Ij(`U5_K7Juf)?$}usj?XxdcjYccW zGS9*25Jk~u-7?}@Mmv1Y8%4{GREiCYU3fH=ZGE8KolW zJj1ZRk+A+HI8uW191ZOm=nIdk(mKkrLo*-2GrZ}@z0r(pE(9Vxer2>~EJ_+ie_BR; zL=Fwn#TllGYPF9e|8+uo}?M7R)QKA$g_%k6f%+wGp7jyS^^ z#SstwJ^LHSrU&{X+RG1p(YE&-_TXRoOT@Zv9|Zk99-pwY8PfLAq>II3zZWpifgkkB zAnGVUIBwE0dVJiW2m>RF^8g4*QO;E!_~}0mNNDt)QK=an(bc!xpLci5`FtV7-t$a4 z8lBS-!f}(?tkcmWiojDrr7DYqe@7$2SVVpYdiizv!N2qurAjr7o}U{=*zWI_))5+Z zzu)_lNpKq&YWnrtKX%S=*-a3L!Y-?dGr1<6K2qQRS=y^%LdXlSwD5 z7c$&cZ^S5Y&cx_gH@%8q*>2#Fu{Xo02)vxO6-|A-oe`|z=4j7@;4w%Mk-Ec%QJ4&) z=H~)C#05$Te-w{lq_r=j?sz=*y?V*C0e2k%k?nRS)&+d_!RDie81>8S%@-Dc$F!nf z7Gqf1nju8QsID8O`n%m|{aX81xbRVBYj0ODgONw=y*27Qx;ltRjLMP+&Zqqt8TAhf zK#vcZaHmtIi2K97EX(O5Z~V#%=UfQU32~AqMaEJ}4@x#|@(~PTzz{Lb^1LXDya;xt zU8MyVo#;9tPhG#RRjQvUe~*k9Gl)h;1&_nXynR^;(V9p?jHDbGDPKgJh{j+e=Gcfs zBt``-24mY)0VD=_6(t<>51T8Fhw{{AA=c@&*wsB*sP`rFou_ zkD^=x=LP);k;6zEC3>RLT6gzw`RyZ z>N>xgVSG1wZq2X}a%%{RjAykFxCCX#jxmo^@Gr zTQdk^B&DetHXjAlbu2|3lM%^b6#53hN{VNAc1*7|XZX$DStz#_!%#5iP5=Lw_c7CL ztSGX(XF5=_$QQhZ%yKzp&SjyQEHsm%oTsE-De&iU-7^n%hXqGDo)%FyWT(alcrZ?& zDswfVbGa7R1r7ASAwMPRJRvg-&r%v(U7-I9Hx5-x|Eo&T=nu2T zp=>-jysi|DL$k%$JO#G8cL3xl=EF+C2IsIptbU(!+}i*Cnx=k1e^M3JEQYpFyO-lh zw6a{8(h@C){x~_su#mp_!m!jSuX6;30vwoA=rlhXY|8M_}^nXFpf9ZdXaxS8Nx%-hHk-ZZAzgD3oP3}u! zSa^&~B9DkFe}cdqm}O=)1*0;=C0oqGj-kXL5AGP=$MiW{=7+X+pwgeT#09%v7HOSh z$&~ca*yD?z%jrmS|LrFO`cJDV(SN5hiYcZytjsEW#yOk@9N(^dc8MX8;T{&Gu+aDCH?=m z(zZTC`hPvoDvvs-9R6WR^j{_z^~@ali*bJ zUyz?NcUV1RMf88AVk{JOPN&DM0Mh?jN&la#JgYxT{|g31(*LP%0WS@CQ__Fwzx5jL zvvUCbmK1N2jWWzq;rw zy@lnb&Xn|j{>Rly|L@MTO7Y4`D6r)6e^37Ds28IqteQ-U{yq6;Tx+y6z@mkC^3R3* z)Vaf|HJATis90;7X^A;|eJrr_U-~co&(!`b{r?s)(*HBY7cV6bYp&N>N<)^)H6f z|AIU_2T(=-FIbZPFEuFrZ?cu+5S{2>`aiBIy4s+`PNe_KZ(7{SMxWCERhP*^nim~% z4nX=Z{g?h{e1Deye+wJw{{iERmzz>bDW!H2vuvG3|L05eZ!M(%_8+A@yGbeKM2jw$ z@c%cGAN8*2l{xr&{`BBf_MVGZ`=>`;SWMR0JK)4;1yv16|LYx+gw~657yi>#Gft-e zboP00`Tv?VDxJpV|I2aF`!>OD<3Z#AD@s8vT>gLR){yMyb2?~yzmgQipJ9Fe^({F8 zz-wxR55|TNmGpmGnI7i=XzL@={{l(>rT?P;DRD6%htmK3#yi~l#i~2BL@51ljF76f z`p1LL0Z9L)|I&Zy|2JiK`mf&AKBjo{k3<7iN-3UCJ=iTn(tqi{Zy@~i)vNh&@zfkj z|Mwg3u;V)bEpbZ!8{_1FoYCKoQn@Kl+EM4}J#lBiA|VI`VMo)r7WDrAudH1zs5)oU z0=n~f3AeBx5ID@Uhfg&M=*={h2NVEjt#h`q*62i@zxu~NA#g+@H%nci_N9j$TY3bF z*vfkedIh!lLy_q!KpwV&vY)eG(5pyhbrFj<7a(WE7~^-0>$=YKvO)4CXQo3u$LW~@xHx>*KNDXx5M+5OoI7=jRzJ{|4qI0K!|H0RF| zNgaM0C$Ec+__Mt7{N?NL24&@8>A@VwqT46@s#Lyj7OK=Xdc3(c0+YKLe8-8UFJ3wpw!e}aI-7}-8 zjzSnUUK=E|>CwMSOh~xMkBkmFVn*BbW(_b>BQZ)_!|*&AKOeb)hVNqeC}gzp81-}i zLq=BzM#k`!h8Za$~u@{7o(Qg3!}$!w+R@zzJH)!ng}C?banm^e8$SB_B=9gc*@0t@Uv-ko|zyw4pY&4%=Xty|8}; z|K7xVlLQ4n%Q*PsUV`({Mxvb&b!2otH51N92S$92ece}pB+-His6*oGnZC9X@gal~ zX~}U~z9ozfI$}nfP|LkU#=Xb_rkx>G(3b8Z_UIT>`WL_(* z7)qq_(lYAGNKkWzx7HR9UzV$Hzh??Ey1u^)7{#-t3f8BuiC?FhzkcB3NgjW^pJU=@ z1w9C(q_^)0qnsIK#`{6EqH%D0X(Lku_A~YXpds9#jGV`)Ze`?x;;gD{Q9LYHs|X?o z>F6fU@0pQL$jMSfO!)w5qp{_X2O;5FseU>_wwQw$g?lXADY#u=ZM7(h<#HJl3jl03 zo6Yk)Ge&jNk>5JO#7{A=!w4P9K@w7bM9NlnQ7nW}QV64YX0ilEogGT~?EY9jN*_Kp zhOkXlRYmcc8Kt=Y!ss^7=f;@sIoCzzNVpF$w2b10HO?sg7!XFRqpytx9bP=VFq(8? zG};{FHN$@q$MIL3j~2qnC7GAZX#Q^Q)eJG?yH(?qT)RpeQzYAaK8$lKXTrHoqUjcIxT0c0_twuJ#A-pWOn7QKli8p z`M3AEBbUqYb>3b}sG>~RhWJRqj=!($Jb#o#>VY8iKmb4eOqK1OM&s>?xAf&+A7G=q z&)AMXZN_%t?15{3JO4#pYpDv_9ub|xWm)$MlEYzE%PsN9cg za3gwfPIF8rqnRD3DZEd3jwMFx<@ZqtoV8Nn1bbQti!GXvvCTrnIn zkHcTX-CKXGt=~*2+cmf2q4^v?As+1jP|b({811Ql{8^yk4yHKh-YWRzn+XnpImIle zE6z7DnA zhTcixr-3k{ff%(tjvtFl1P1sl6eA&WF&g5>->)CKI~e_zgwYpAF%pqPh-icm^*4bc zoa)*q@z-jMw$|2uPsM05WEZ6q{kZc$3-S0n0Bobjkg@IUbd1{VcC4yPlSBAB2*llg zJBpPtn{lVe{fI;RQ49D)bHT2^jwqUD$LgbcIHWnv;;*%3Otlo7f%h@e-spsbCT?k9 zT}b&XBazW%js#>(oxe$D{~hQzG@*t*7*3K*<1s|_@kr@IK*#ztPA72jF$~h%1PXd= zZEJA-_P5869~bEvVFy58=AR;Qvj^espZ*^ETmFFKlK;irFaR9(b2oK-Adtc=O z!m?p3EPSmu#oC7ywIOA_LcjqKGL8Ym%PY+?1Nb6VL+97u$~-eL`(I|2ng9ALby5kQON=5M03}9W4?3YA#gtI}S|)fvSC~YQ+>a>9 zNf3+#<7}nV`9AooS`tP}gYPd+r~Zw0w134S z@o!?R7k0W&(QFyJemw=F#l^)m8FrOJ*7t$P_hD{j49Qsd$UVdR5m)U;^9!m=a$0y> z57-zX(a#*#EgmVM%x6JO--k_1qihD=$7p_jzMiqA-fitU)}@`Y%>NX*-55yS*@IE1 zKNk>(GXK2$?t54ZZ+xa|X}0b45r_Qc9{ zckkZ4G8a&!1Av(e5+{2lOLvj`6XMA`_V|yVU8+`j7X)Toh>s5d*1y~7>0iFg|M~Z} zh~QO!SAY1v(EEpX;&dJZ*qGIrp)em@S=h!?z3f)F#)fu}LN}c~cOfSM_qB`*jJ_*s z$*Kn#vJK>1!!W{g!P^-5Q^r)RqazsU!AV5&UDQGpsab*? zDd2`XegLeYSBW`wgo%sXzGu&#%SAAIq+Ca^0)?r-6xLOe~ydSZJ(a94hck=!VQ5KpEOdEhs8fHW~;$JxnMI_KHb zXQ0i%2fD7b8PZ)*OyuE6^NMC;_IIdzI;3f*fb-ciXL9)TJ2QXy;YUT@e;@jdp*arJ z9%?%SFk&>r;^^ta;TQhpx&$sm&**d3YC{bJ8#|DiRjqMk)Or5$_U+pud7J~FD6RSa zd+)h&xz5+(_Zk23*Ijx3*WwWXqkV}SxVA@!-nm=2zn&4+K6wBA<>f_Zw+54lxoNpa z004cQkN~a*EsLwyuiw6N7g6mcM(-^xF7(|e$1CqUt_FaA1b~$S$j7MzkurGJ7GdHmSFe^BsU{V=ZfQw%44$AAsopw> zf%k(DSh;xQ2HhKy!@h}X$~+`x1x8m2YYcP%eDJ{s%gf8gBy$(rz>lnVJz7ap)3%Yo z8mtnaD_1TDFrpreR^YGRd^Gl(4@SAK`If#0Sq1Y5?_hK(5~FX_^v1@-#sfu$V>9?4 zP|z6t3uE-5!br^#I?-?T!LJ3Boo5plb|j=rD`o8R<;zhRt*orX5`06GLt@4pLc>2d zh{_n0bf1y^$dZx|Km2g%z^-G!K?~?KJnuh%Zx+-c?3N-m^Z5RPB8{$Iy&Bw)_{e^= zw6t6!8I@Z!xkn*-pM4YG6T!LnV|4A>wE`oB1#tY|VSmriy#LmF$VI?I0~z$5xduj# z5di*Y|LbdXMz3Y-ML6?O1nh|+?C##Z`|R1%I0wKxjfo=r6#>nUtoMJ`|6%-=ka_fH z;Mx%az~TO^$Ncb7Q3vB8VQpq+da~U*SZqFJi`gO9VcCGw>z1<6{T#R*Q#|71OPRLH zO0%FVd1iX5-D(=Suz`>(AF`fmowoB2y%!?9kQaWRqgfQYB}ULvFPBj(pj!m00RXWh zfd-!B5(<9EiMXUkU;^X^43Ic7gRSlD_4S**-70ilt8L}|H);SNsq%3dv-^}kdStm1 zCk77Dh+$M?`@#Lw_4xPE)qqiqX6M@NDP)drx&Cz% zT%bLgtFOVh4&A?FngsmA+2;X?TM@jmgrv|MTVBxy`c5ZsE+@l`?7-@iXb zjADd8SG`*M^#k`YRmjLNBEjSbZg_3WFrmOS3i-ibgLYapCK?gCZlWP1cmZSpBBAgc zbLc%lTUl7dgxEpGAPEvs${LM#2yR7ZJxRlCPM@RW#*khd*cl^84ux%H*Jw0iFlqz@ zasL%~&r$dB$H+xCgv14F5m6sMjdvo}QPEjMe6}P1K9H_+w;6_S^F-^qzBy_cvq@ed zap(gGv|mHl5zv79*fJKY002S%zU$n~x^x*su~zomuvHx{WATb03ZsdM|JXarut|UzN7a8xrBbP+XFoA9@$yg+Qz`NBl3TFT+TPPa0+u8L_KlQ~k_7k% z`!aTj*yVda>simH(icfKXpY?n)kIF>b2fh0taKA4Vsxk)*rq<^DNh*_ezW!Po4NM5 zeYk)45V)M9Xx9L)rXc`GI@H#%#^p)9QO9!@7GZvBD(9BarRmba%iJlh%g1nf^7HRz zwuffNF;hO~d;y4Jd}%UFPkY+a8@2Me6RBM?vw{<#Ny~q>ulsTS+eUm_fyqeHwQ6IA z>Du7U_X%YR?`?041TezS4B)h11K_^_k%i*CtJfz{f?A!T+rodBfH{{pm89Icuockd64B^Eo=xBlEfSTgxB0h=pgigqz4%Q-Zu_WdOEL zW*%%EDEmX^c>3}_vGJg>q>VC0@jU=r-T19>w$3UTjlb2wF|xYT<0HG@nnI<-r$4O& zqicinhU)u5)c;#D8{jkS@ALHQQQ(1P`hzmc>^TmM-8jN}RKMQ1;@3T+2cu_faJ^3{ zhe#g4a#S#N-AN?G5D2VC$GKYulUSC3T>=>K!<*Tx)N7<*mk|H_5HY&bO}|dJ>|wVy z&#BLGd~TI{iJ^W@ak_0eGb2B+iD14~>!iNIk&!Or6 z`vq{2C9WP_6&1Nq>p@H zCwBU~4&*S*5fI3hb@tGH8JpS4&~NKx=E2q(=!Y?Oj-|zqFX?0X2Qs$LdNl8YQF!JU zjJ$}u^B)EBJU=n8fKk>X=kyTOe#`wVd#Oj=#dYVLjifHb*szCb5yc`vUz!bl>gRKpBj=qX@7|2-*)m)ezLeaX7TYv0@J;A z@8I8f+W_zn#^m!xX{hTjC5C!26!{bF{>a|}F3dxZ~S_>&W{>%MCMSC+>}9mj8*2b`jQm%BF`JNqtm}GZqdTw(aKQ=A$P0Bm+Ys5MK8!9EFuGV=c{HVb z13)m)P{*hvXt>j5Ka zx^$@nqf22kzavDIix6|oXQ;176~DA!kHYimdSn76?7;dCjNNFeJzh;+W-``^(I`FA zP&ssI0=*w#MrwV3ea|@&CZ<G2c-Rca^gB3 zqxfBjQT%TBqrv~ecxPY~T?>__y)g2~QJzLpzZQ@MzC$^ni{Ywav>@Ic&;flN%%@4% z<#A04b3C?rHn;Y2o#8j$0j>?FT-yjxv{JB{d=gUAISMPw;no*ky^Hn z2P<{xIH|nfj3U-g5(`aH858G!rBU>c*=&-Nz4I8qtzhikp-dY-l?)0kS5Jtqb*g8T`p$lFvl@B zHoPnSRYUmCvG6uV{B52EM7?g2n@OX5hMj$$itk;?^k?fhulqm#HbB++7O(q1-me>~ zM;a)HpdUbx2jy%H+aIMoa6`Z;-p6iQ$^H_HZ7k}gO}QPblv?HdFW6N|kck@t-l^Hl zx6e^Sn#xX7$E`RjHjwKWz=a*?RbGYBg>J;kTte1*+1m9m9tp{5d-Mzk2{T zo4of{bCISH(9i1rGaDOYapYRO?t9?J*fF~E#dl=yN6CBb%Oo0BkgtI6S@I7oG5T)j zu4USIk4rlOpfv!Fd0jvB!&i;befNHCcMkwE6A6|8T4?U}K3hcUnF_(4+r@_2>cbDXqqhT~U$hbukug>S>|F1E+|Nd@0ntfOwEco3Cl>-7n-fiZkNOPD4^L(#*;q)h1Q5Zr zUGl{M?&SIXWu};HZRuotg48HTwj&+zfc^#t`@q^e2IXZe`0uMd> z5R72mamR~K7k=aVSmU7*eLG{)m;kQA_&l3NeQ%M27X>xbk@|t_)vIp?HvqsjLmkeM z+_Z=f+>i*)Bd^6nAkM$cy}*B}&BbH5{N8f=hQVa+eOdoL8i2Y0l_@GxWls&Rux;P? zv3iRMbX)mvUkZ|Smyp^xN&lltDX&yyzT z*R?3U|r7rffKL?M#~t6kxTL@V@J)cGh64Wt&{c4 z(L#wc4|BwFctSl2On?C8k<}o44%W4ydSrtPx|^wO2;5AkvUP`5Q9YG09{s8syWto) z#mLQOy6EyTc|&IPuBX^m&!@yFR!7hYTn6_oj*%zN-^*ukGr!r^E&Z^y#GrlsP}73| z`Smfk4Dy@T(^;m_R39xm{oeN>3>+l-d^Z!f6*=n(zCex6*3_ZryP4;6JhksV`z%dL z{kpacyG*0^N6Yh13sPiyG6Ql&djJ5U2RS+G8di2p8%hRc{X$>~GC_a}$}boqilg(o z{74>DZXl0iMEP4Yv%bs-aeyL8dxhVu5Pl1I4UfJ(d2;`|;)m)CKrc?G2FGt>Ob_am zdv}?j{sRDyf9u#PCo>;k&OLk=jL9egEPMy^?`8hgvILy}K-&v?iCC%D7$E@Y^_;o@ zm5Db2wq#bq8@AqTZeWr@ldfL=nK;9=r8?2Zn1Paj;BbukWQ=Ey*ZAj|W&2{}t^1P_ z*>OV8p(`+Pyg{xQMs*phV0oulWrZu!f>9Npc*94E=U=jdiSogVp3GUiPgi)Arj zs&<AaA)7(}s?4A-M-_K?6?HDPs zW2g5SJkg{0MJ{A0KsJ(OyDJixLoQ@WF;YW~&e_y)J@Ujl|l$nC$%ZSypB(2*DVS7@?NaCeh z7MhY$KOg{?^lXFVzDxMcis83ok5w)D_N0vd8;>8V8h{=Yzg=vzKo);zKY;Mv0Zo9F z2i#@mwdP~vH#suUiW}cL$~C@|e|4?EkpIG!?Yei_27sT~j1!<5bvFS991p8^Ig!9( z+i}PIGlcTkk<(pHKW%IRoHSA%h!GF|7MfO7`0tD7RERYJ4hoBGR}?rHLp`41rFKSG z6fLJ1)n$xfBu5_6@ll(a0BdcIUXa630!Sy;qveIRz4BvCed__K&E)k3sdb7Q=RV%n zdDYg{i>ID`J?h73NEvf3hG+wW>x`JW+sQHV?M)T=6qoVZ?il$^&(vN%gPAGOqs93V z>t6!8z@+P`8>3{Mtt*nYD^kC$II2g^*CX!ooWH5l5`1pWaUb8?%@e;4H<}(VVXjky zbXfd*YE78S4+*$$9&_-oOH;M~8RrcgYLYQGMmmpRR(k44LI-}fHin*ig2Oq45fAEF zDe$*obzH_coj&~LCpg^Ikm%dF5#Wi%54Al2y?it*e(M)MSSSHq&`sO}K&I7%2{$)z z0E6Sh_2*!%0>8TkFy`M!9sjYKQ*Da{EF5@F1^`#8(ZH*e_}_h2g(-JRCgSW02S?hA zjq3a_uF&d+B+6>NoXe5HM0XJJtE_Xw$a0LhL9g?lVZ(*q97FlOeUN5`CqZTAzNlE|?CBP_F z#ef*`IB(>CPh%&UdD&?I*lGEz1JAGdMO=@FUl)V9L57Kp zaZ^1CB!0D%%ZYo6@7SItc~IUfGT`prWor6+MI1d0ShudKDl@<+3GF0doA%ExufNzc z@0P|+p4s{K8pPMB3#Jp^7@a=+7N0rjIrZqQ zxD6xcpP=Q3{17-Xx{;QizPW|Z+MO#$aAMvJeqcEC*j5)!` z3l8q#9Kn4nGDj=R;r@Cw0~rf&cp=y{gi?^WL0{3M@wRRrW9xt&*w@&3+xHv2=vKvW zWV2sc(s-X@REyc3Y&j}mblyG#X`JX>$VQh2ayxTH;sHB`5mmv{o4Wnoy4`&5r6Di~ z?6wZHiW0UPNQdLyRLoG0?>{d`Cbbgjcra_y)EvWY;N(T6#}kfNa@(Lq zwoqUFw>5(@l;ASF1=6F4&>Hk$lvI0nTTM-*R z7`AobXV1XYVLh7NB;eNV>U+=9bj+`FW4A)bnQ9J_n`t9R%XrlHi_Xrq4S*zRy+jze7d^GHJ`njY_<}F|g}?9@+I4#OyWjnX{?H#> z-sk6h&gcBHU-rxGI=%n>@Bf2;@DI%M95BLmdn&|&x@3&gnTOx@j=nwlNp7xk09q!q zG4WfUXH653&+S?Ng%Us?n`VzRN#^_z#anURdLb(eMw^GOR@|QOuX-V|4b}+oU;AC9 z0MyM97ohPs0Jvc#V%WZ>%AF@OnC(UEQvLpgRzz54PU{HIZkRS7o;fh4T^Nzi2WI+P zjsF}9dM@b<9*WUCk4dG#1hc*JF?EdQp%|&+;JP_J!j)Tlj%KD+IrQ~8`i^?EjA_c4 zJFt}GbGKnsSdfkth|T8iV{Dz7X}GNu;J;+-*2yckF(L`HmKY$0qtbV0WUH$ffp?3} z0QeMvx>JmN`QY?EgC}~FO+d#c;6%v!*HbqWi2hdHNcQH<89f-=6%W_UzqUg#fh7%tpp!DwLTqjYx^^)xmr#2I1pGNz1? zkH*L?kugr~<#z#0)|jK4X;ltEW57N2$lMLc*u1s*q~e&N6l69}RtUWHrT=Mwt#dPt zw{?X7(;7Pmid1nL%GFSCy?}mOJr`^>Y9_p{MozAL^-pmgh>`a48N6SQ{FVt=zmW0u zG(ON1{K|^tX43#2om0VUEJpkN%n5ka)Ujr%YO3m9e zyD5A;s^4&}E`RhDzw}GL^vC?@AN!1FJmVX`@f#m}@c+K|z3)BxbD(iLC4TVZ=4rXJ zN=>>zV?aVSLF;xvN2C1T{_Wqspb-AocYMdUH!v#1mT595EvX0S;~YNpZQte5w@+;H z)%c;CXpq@;elT!B8^>_nmj}vN`=1qTZ!Yt z1{DgMK>+#%=zqL23#=4mzMhjSb;X2{;@uPg#Tm=jxFHhZ{#QRHON}BkLkM| zKZa+coRqf&BL)$I#yc@82dB6r(BAm*`moxJ(L4~NT*i3TxwB#lOK>Nfql5Rbh!2F? zWhd1mXEtgsTK(}ZcZ5YJ(Ia;oW9#Nq+d9!X_OD0Wv;ai{qEQ?ZJ}su4<>Yfg#`qX= z;gg>MfGI9Us*F*5|EKjC+)U`1k>-Pb0M3QAe?5(SdU(!YMe;3*RJRrGRR@|WLb*Xi1U&8uJiYDobj5DS{jtX!Ynq^68j zXngps(pMmD_*{>^$vzPX#t+?GodIYaA2TL?>+@{b58ReG)pr1(L?5AKN#>j4x_k^E zR0Q!T|JyVh93GU85l34l+j=*tki~!EgMm67DiT_P*t$QgnOmgxl}WPS2mIp-Td^z& z`Y{FMR|y`ZwKEYU?T=Bt(O->!3&fg56HvSxBQq)+ZExr}h1i2uH-0kRlHKFM>EDWx z1B_^9ACLzIR@0`j2FMQN&}SfH@qNyx(<3(%+=-28N?9i0be8leK4*-r^POxRe-Hd! zwaB5E)SZU@=cs#*QqOwo<7Dh;4N3m4n8NVoXs%$5(qzYG*DRU~y}`ol3i`oHZoMg$|#CD*K@;q#|_%BL>x@H@ZrI}iWY zU3cAm>Cz>;PLDkD$VWc%5nG5h{+&SWLU_bhxCy;`_$|kXj~N(!`-G-Ee(2`H0ca&- z#tIOu@4u}ykR_!1ANVnLjP88#9W=h0OO{s)sGB^#Z=Us!`5&LHfBG?X{-^HWm6fh+ z)SYz^;3NIe4_`G#_ulh0i}K(LCn<3U*GT=ZX>#}8-=ZR{UR2^UlX+1YzVh|o*mR!s z1V&%;Rf(+HAw#$FL*|KVv7yt~+HZ}2CNya|M&Ga&5nC|&>WC5V0g#g)nmV5i?}#2H&<|hMr7jW?%S) zU-(OZ$uG4V^!VeC|G7W+XFFwJBEJht0D&>NjlFW^N|2O1&Tuc-n=_0+FBt;|X-DP% zC;a%I@W2DFwCnU2|I%N0?2T_+O7{QAANiwx%#XQ<9RBsc{?}jgnpbxn)=C7U@%{52 ze)u7nUvkGCcZ^?8dEAVT`Tv1*20w){0t;b%9kkxwkXNt1c|#N6YHwGWc_CR`9(m#A zdLaJ+q~S%s*qHie@AUjD1z_lIuii62qiz5I4!~)uw7O7D*xB7$hf$1wo`V`hFXe%I znjA)WES_8uZOsxpo%48%5dU7_zt7Qh)O*QCVwB5CJA)EfmR?7HKDr6y7-e!?IGABF z#&1WaIW}aD^Qs&gkhfI7=2PgAAH~RKSp4Z^aT|?Qx1~#ffOg=fX(qfgSz~pvK}o% zj@!EVRDK=!JSo=$Z5@ZmC`7e6*4Lw04v6|ZCZt6`TaNP&WNdjPuhUdH+j8&2Xqsq1 zD(uC+=X<{A`(OS2pZOV|X=c|N$^NJR^dCEAV9G8Z1mn*Sdlrgg))yxTk%pY(JJ2Ho z;N^e<>6Ya05b5b{#@p+y^xo&G zZ{Bz}kp21RMsTnI@p3@pNK#zN@eGglQEWG*;i*8qO_uta;N3E3#fEY520%Cee1qqx zisDhZ&6}bm4$xU))Z*U?{A1=}`QJboBWUXu^7b5=Wx>~bJ#Y49CXSJ}F!Do;!t8q% z`<9G(mjkHqL4Nq*KDXu2%}gMkv#TDtyMg9NnYHVZGPeQbEtFKW6$?5a`&;|kI>%<9 z<=SX~jDhd+rAbz@b-u$S=j6LpTaBHDT3(04Z*gO%T?CP^?d%1~tmv6?ki6c1k3XX> zhhFgO)M+f1FW+hv4p#Y+t>*m0!%7Dxqy&*FYPA1)eRA|9#*8eeZbt+j%fcnpUe{@}|BkhXJGV zhe5t2!RUhJrp(LCw_^0vr#|)NFMs)s`aj=s$oMo(ci;WVcAXx5^pSb~2w$_Lst*}d z1cO7P|K||DI(4#9_%43bZBi4Lk?~utlmnVCMzh23{sRCT7Vlj~@mmx+_Ds3?P2W|! zfEM6?3t+v+=(Ouc|80O8|3>*&0F?;A@B;%bKq@r>K7^oLH_dJ3s!re-lmMz^0jsz1 zSAGfYNQuJU>(!N}JS4*xIB4CqCP!r?ZO#ZQ@b6~bRSIet<+PLl0;IJ$0@rC{v#&@# z2&0a(S8vGJobUkC|2_Y|c>`oOQ+tjMvj6tfqlD+E6}2{6O1@sA^no4@#xVRopP8-W zOF^a27ICSH5c#=Ia=!8T-2QHXe@9M3eV?m=YUKN2etn6^&$IyBG-Go8u`HWNbUEjB;z}!s;O)9ulj=I4x0dT(E0k#aMAMl zat3hi9ze)g2YLbAE%o{N+06ifpcRh(3tuV&UPo>dL@>(tM0eeN*R?ADO9Oy|$?9b< zd+D_%z;>O!<2$~yYt0J0K%17tG1y)yAz+GkjbD*Nh;jWdwdt7hHaU=iG4WeZ4#RR= z8i|~sKgA&R%Xa*1c~@)ltX$4zhxZA*+7ZLO()RldO7v9t7vq2bD^9#Q@c5>SX%B#{ z+p_k8)S1y!tf%Q_T6Z$kaZX40uiIOG)1?q7JOhkQ%RewVl&bZSxwq?lj&*ltWi!Ar za)J>^aP&P>8qAb!iY`9)nbiH)8r1vhkpn#fjx~_7QFyJ_{d{6BzI=ZEwvL&B!R7?8 zUtgMhfUWc4lk_d&y%I`YIJ(vJCulQ28cDr)VVXw0i&u-fO*qq(F2%uYTsz#2Mkk3BWTl> z5Ww*u3o+RrZ>ImaE_n)sTcKs-tmriyx|RR z;I-^?jJS+hPU5#x0uN^qzZzd+h)?7;)n#CO{8ouQJowk836x6fJ^%o71o9b&`})eM zwL>qt`Ff#Nhx|7K^pSXrZg@yg7nB13w$8scpE~+j0YWzn$`lkSojEr1U_lzw+@@X| zG&&_~E)V1%%0G8^Q_l$1<&RFr*@FV z1tWL%8kn3=@@92;Uz_{9Du;ek9h3xWqDS)>JtDmmK&=pF^@owK^#E9OxnL`Hw{;`U zKq_Ok+W`IK$ky#Y$(c>E-dDieP7hZjUXH%rN@GWi$Ry{+qC2j60td;!b3l;7Wt_@- zq@u0k#$w&p&9bRsC-=A2GqiPeh-TANR-^rWZ+=6xZt5i1mtyl7zyd%a{^Jzu}t z81*+nWlMw_GRC9-`^T?Nn)OflzfJtroj!i+i3}gFK_b6Y3nSrMN*-34|x6wmLnfF$$7{my*^3K zf31;k=a{*;9_=rPWRf#qbnBk!=|PIk-*&=ih^-^Kc9wn}7^8x%+g*+J_q~q0mdr|Bn*osZ z!<;bQ7&8;$z&~QssGmKKx3uVlKz2$x`sFCW{4mz8u>D%n9M-KGJ9auY3F5~o}e;slnJ&A0c zlfIsTl0Z@^h(CHc@*wu5N&1jUdTElJf9~{fH8RkTwobBL1+hIz-p7wO0j`2%1&{(e zY*KYO9B1p?Ol4!C81VWy+v?eUyz6~>dp>GCa^y1z)`hQ_I?8{Y+>hx+zz*TX<#3u> zvQ6YaJIq^#!S@z!byO071dt@BD6&9txu6)y%-4F|5nG{^TM^HG&a)qV^ieZ=-}~P8 z!$15(hZ6nFXFl`0zx%t*?1LZt;A4+H9@dv*YXra@$QZuFD9}(H(4YWl{U!k%!wK+z zhK2Xf^QZFn@1x?kG0@LSqSbEz7?d}102T%wf2PpNDU;Nd$_eqgYb ze=+{)1^@^|Re*RswW7J`ZUWrmSZ3aKhJ>6XflUIwUe^|9g*m1O@$0vOI{;3{9sQPL zgfd6^uecsk9V5WMHt^5Qk_TU|h*3t)no_RM(Mb~OVjQvzuXK}eNIn>&fJLt(>$!|^ z@??5xLp-H(bg~?AJ(`Ppy%)f&dCZt7b6mq9vwiJIhjMjT%&Nx&VCF*6+vR0&`W z^`f28?}o+*#68FwDo{#`>6BLAzW_$$J-q9k@BU~1?4KTuvAp-a@4fh6AaGnxE{Sr; zW%am>^=Q_f@vC~41SjBZ5xRW_pmo1UW8$}gpJTE;n+fO|JpiCGnIClZ>I;01cLmA` z|9Pf-KVajZlaDz)|8*eu7of@+KvXm|D@1U?1_}%|49WQ9I&dM8j%`T1(fO#KiQ|Lg z91Xmm%2n2RFh-~19|p)!+@Ow;Nj5vG)4?-~z2$bHCT|x5W;G_MVHokNteK4Yii|ny zZ+u7!@1$7{D3ZfD?quuC-PSPj4c5-g2PGu)uPX*~2FoG8w(pC49?D=Mx0VodbLx7; zZCyTJ{_0AT^dXa+^GWhGm-Ao9zVAH@@W%LFHPTLk*ne;cCV6Vl)Hi_?`HAn4b5hWw zv9>P$E?vjAA|B!B<0r)zOJ|=$a$i{jY9{wN)0L8m)Xv~GxIe4bP(K&o^h<~0QHopEo z=b!%;=U+Yi7YyHM0pibuI^5p`I1mXqde%79mcgJGC3B2;{m{Jbzk0TPe)y*sy`Fj} zvUZcwLKYR8<9Lk5^Ir|t)G@NTC(E)m$CjnrHxj4QqD@gz9<}-e=z==OL2> z+>QikW7*qC4#j`idbGbF<}+9Agamn}9Hb_zoDvyJ=3B*RoUKa`0&8yCxPE_I9m$KX zcO9bHG!@inwC`=8IVukv4>WaSOQ#-=_k(9v`klLb`#mrGqFXYt+Lp|H>N`}Jkbapj zP&WPlNa8oKJb#I))$8xaPfEoCjFLG|_SpVvzO)f!XhJ)#5;y_Pvt9CtSk#;C0Sq5OM+|EZgQ zMLY@{kCFh9XV%TdO$$L!Jk0mlfQv~R8ZZ>D4gCeEMQ#;)JNwbmTH zR9`g^onrx`@%(#VCKpIDC}HHm)+O0|tnPoB%nkH0$@-a(WCppp`EUEpzfqEzedvQ9 z`on+xPYl3lcF8u#*t{-dyi{?l?oV$>#Jc~y(X__uk(oXJ`Okmh3tsr1_q_XUZ-4uT zKJ-B|t?ALle=}#UPF_?bGhbfGUbfEpMk~KlLlW@@p>i=wJMkYuzsopXqb->jE^V_DjLK>;cNru6J@VX&PnE zwasU^<{o_A*Zl^&PCxjAKlqpa(w|@Pz4L~^<4v9WQT|ogAH@WkpyS{y_!#IL%JP8E z1D}O*G0E?Otp7l)2(A*LM~#6yt3;cv&T#_oEvfq-hD?RnP64Boe_140M(nsI_0j(E ztN2GL{?>Q1p+L850RbH;#&3B;;Mq*^^PF`513%V|(VchRQ9rd9|J_7dX(#0}4+?wn z;@k&3M<;v#qYNB)4*agzcWY8oA+_wCRD_{Q&YrevQ(N~8u z7hB3!pne9xn!pVAe9RyCJ-_SX0N_I(`t85__pV{&>ln=dqj;Sk)wRF!@WW}d(rD}M z5x*|Iyr1YohB>yE9j7upujt5KFMs(@{V6}?u9x5S)TchxuG6c&>s5d2@BW=lb<%gr zh*_S0`O0Nubl<)Av7rC{t{Kl^7++Fg>~|M%4#!-+@*u|O{+ngh;ft<=(S*a|JPcy*z;=`y&{<;#K_k$8aPQm9P{+2 zKmDt}`kv4Gyf1jNr_Rss; zdv55_Km7aO@-5$V8ozF8@Nb-d&f9{~aZ|HhqohaNIUcii#f zo8Q%hHG6KoXJM=0CyKwtFHv$kFOog!NCp>%@q33iUwt#Z0RS@D0cGFKnWn$npNX#< z|0y#s@UO!T>?h=(zkdyV|NI6({UnoH9m+%bC@(H%*-UtyaoJ5L;S+Morz}f|UY*Ow z#2x^J3V%8OBK&W(C%MNICOa^rgwL^#QJw!%kWNXp60h`(i&)c>@Hoe;aV~Imk7RPi z4W66F?!;n^SVQ#aN4)ZtKjFvy_-UHRV#g1h z#zz0kisZ}mfvrGl#Iyf+Vsw8J`NHry*=oydH75@|3)s3MNLrs`M8Um@QD&;$+z9&% zTh)p+_4UZj!&v02lN08M(XdG#vaRcX{P-XLlkdO(m1g#tpZVF(eeU!A^MC&LW?J*H z&&CiyxVT^B=C;4Bh=bkS-B07!dB(q;)-UBdC$2_Z4D*sf^*Nd!y-7I%j6l8kL8i{V zzCUW~ox9f>;3F)cjOn03nfokFEm4g8%iRL*y%aDNxN!w*X=!UG?HHc1^*M^ov5>KD zp=5`HdDUf1>N{L?3{emHR_8-${7N8xbvW3^#@{0K-$wp~zY1`Amfd!ZpI4dy!;&?n zVE5^77-$(2#JH1x-8^1qej5Jq`?r(6|MA)Vfspa)FC~0HL>3ZxqHA z$!~T1fUR(sHzok_jV+elax6`q_JxF zE=+uxrj7%uDUNY7Hxt&KDZc^JF4>ecd1l8qs|uhVh!UbV>}6(Jn5|Wt@kH0w<*7H9DU=uk*mX(Ol$>QgQ1Ayhnb~qT|V;Jce z|1$GV{&kEuNj{i={{D6P_fLWvT;@-IFi@tLF+@$TRvYXHY#4BcY-G5Saz+tE5%<(y*tSfLm)?_J07O0Am+#O(~ z!fzo`{(f3L0OCWC9QNtaoX+tu`v2~Czx!YRyMOcA*S=QLM{5DOCkk-zIjGHDtrN;D zEBn#5t#G*Ek!+N$0CITnN6pslYpa*Dv?U%vX@!T;AUU05{3&Sx1to%4*{}Dn9k(9o zyeFw!M#?nL^E==9j%PgM8FroC@P^l~Z~lD;L%`n^r?a;eVe2KG&ad0wFXd+dRE;WP zDDoW9Ihw}HnCVoePO9lq)Kk{y24EMyTT1*oLeG5WGoSOE=U%;fHGCKHpOgSX{Q$%d zaor0gNpPTC>vNQufjNS>jgm1S?28YRxQt0%VKXqMO4=H~I&>pLHbhUtkYs*>_?t@a z<2F^v!NM>!e!k@ZApAh36C7cB_!#B<%gizV%K4X>kLI7${on2Vli)iaQ)qxje;4Q- zx@OqJfv+Si7@;-CbZR$W;u{8&I*v_z@U_s&GL*|I`CWiJo};1P;u!77e{K@St?u5a z8No}k#J0hhqRz4=U`IZ_<>eFHeH2DBk_Rt#r;YC?KMa^{RSt*Sib$XN8J}S{=^c*Yo2C+U{{)<5|t|KL~ss$c)CXFcn&$KLSY|NDPl_lXN9oag2Daiz37~PdE>8;gQ?94I0=&9C9b@X8h@rDN#?p?-`;i9hitz2X%QNP5d#-tyP~`d@q7+umje1o1ljmp5~k z8EBk7G@-M-{!T|Q3Ugeo`>()%I!EE|X>D7owoPC%X46Ct2*H?P5KXoCmCWV~a4K;# znfcK8n+(wHT0kdenT0=#@!LWPpiLb&hW8BETo*}ed`fb_zubX3)cNP{dD`#&n-}Zy z_kUjR8KBCDqfWoK!Ea|4i#X^L%|@x$VN}aC;LhtRpPYYluVk0Q&E8s>6ziGGdxyaD>1}U++pAyu8k3qb=4Q%dY-k{l=lsni`oGWyTfs{-a9eQ> zwhsRmm$9%S@?aUmXe>x{j^=Lp4FH@IG7n?lyyPD8^~lWuMr1wm^+`Ig3E*?Lxv?I- z{td7DJ-_F-z3_!EycQZezTppCj5Y+-S`2kPn)kL9@CLvRw$4o|@K0?uCAYF$xBq(7 zx&eSEAQLQ;IL6dToAs!Fy-*`c!S!gG(ro>954=zR^v`(UfmhmfdeMts^fQ0v&$@O7 zP&-H?C7VpNe9F4rll4&^+F75Y%v@`81SjfDDuItzI0$qHb^izVr{^?{h+oN6>UkNl zs>k1Cm~Ni|oSx-ee1^x*cWMI61JhyrD93aV|F`)sY-|cmfcp;yG~574GO+hN(l9g5 zq?w`6-*}LGH~dytbK@L|*zl^#e>r<1lrs=&!j?Fx=YSF7KRya&@$lE23;Ga@co(_w zvw0Q?Vbjgj*bHP49Yu#UWnGss_c})IGmuY*C2Sf&sK8oo>#QM%L-go{FL;67ptrvD zt!pwi0~xC;1OKk$@3w7)b2Z9c18ytaOy^|l>b82pqGsp$9EX5Z;G7U6!VDdyCjjhW-t-*7)-8i}HuDk4j?!No3pcmwKd+jRfTtAF> zybj1Jn4|46$Aw|RX1wk9Fiodz>dWbD;#Z^NZ@1~(DTTBif3B1O8XvIcM}+a2?R(Ch zSA8XUlYcS(B{|{0ew9Phe(zt=h(M!rssjVDGC>78z)>Vq9^5wY3Dq&wdZyA;&FBHm zjngG4JJ={?T5Y1lR=`G%;lpCB$?;iN^!@N=kNjLRQPVLPrP1Q{C=WdMcMQv3IeS$@%@m!OeTljdNj%BBky@Bhizu>fB*ZNGUgx!$bn<* zbqAfRlY6@Y71HrqbGGxhb#+_qJ`Y=u=p5@HfjPF_I>{vTQ|2ROOau41xgtBpNKHio zs+!cx>z}0C3~#5c*{Ks7g8th88lp#jVq3v&-H{#ur?qwS>HX62ZrwmJoJ~`INxF73 zSebj8G~N4tl9H0Dn>z3kQ!^EHP(&}pFjbd+L79B~@yG0d9((L@c$zI z0kH6AJ$_CP0P0r^cyroHi6Oar!h?GFmzgL0tA~F{e)1AY+VA~qe2E_R-Nb!Tg9nY) zeo3q5dHLL%fE{&u#%JXaCk(m*9jiN6@pObh!N*MsBdqhq!VG5Hf1$&Z_$&- zfFw~et@U?{0}W2G&M{&##^=?hyzy@guDO}kY#qRe>ygk5Nd4}@Zouoe0r)WYkvh)R z@vLp#cw6lhwE7&!f#hZ?V#L+R&26xZsh~zgvz%kJq5uvi2|Ob-N$;AcT8)1PfK=?R zI9`w3+|JXl^HbY8zv($D@IRa!v^5zdhHj=r48x!iwp#4~w=7WZJBeF?IuaEh>YQ8n|B8PQqzpibZ!q|` zwJdCiFHeR9fM+eAxMK7K%%?nX;DEypIk?YvsrSyEJ2!9HvSGuBv7!Gl@{4~_*COK0=uE$cUIh(nN8x3y)~0MK*; zkC0N*ib6W(>v+2DROUE5vMshu_RyuOT$o~BY4Cp@~snZZ=YFhO1 z!Y{x4Qrh%u={I7;NFqw2|JHr64t}m3s~uQS6sL0exT^|@ls*DAU^0sUH#IdKb<|NU zE&cm8Hy?07(}oS}WB<#71q-)s-4a^I?9)iDa|Q1|T%0+o(n&`Zu!3C#Y`(hI)*-Ef zha~@L#fs%?)~wFBKLryKexGbG3OJ7MIzZuKEL+0uQwfdU?R{cissIl z9sdhHH}d&s1OMT%PEmpIYRGcvy;?zFzX-6Yc7pzXCy9XUPzQS}v+td*0pJSdp6EER zVFRysN(}&y9(?eDXP$Ywxw(1e%9YIcMjEHj=9b;CDRjc>ejBd3@#fEwGekwa<85!ML_@c6arLi?{6F4Ef=|6A9lul4|R^|AY(;SB(+5REB{ z-=3z1SvDwHId+Qi@85@+D)BF~6BZI)9jVrF<4>+aweix4Wbj>3!az1uaTAzJvG#N) zS`9GPodepCt8de-Teqo`Cr+6>aqyslE=5tqOP4Ks{>7K)FIXfCb~*(RRXK&9$-ndX z2itI{WPbTP$QOgrkN44+(UeIO;?LkggItQXY}xwW2OmED-1FPEZD$+*$V-=V*=-n} zjv-{kj?=iOhkrQAJc+B!Q+0DrUWdN*^{>yGIpfen4sj`3vUJ(Yuf95a&Rj4B5E1&~ zt;h(|vB){6+~0UUK*q-(!)&bc)dbMPlJlrWvG@O~E3R}Y8aZObm6w0-`kc9QuDjv- zy)HavUB|E!vFwVp3~1wki3H#uFqcb4QE^zT8#r*#teLYWPM8?GlD)=Tw{Cs=owuHQ z;n|HFH#+AIJ><~KFWW1)d+xjY)z@C>0IU|xRoYk_WDpPKh2(%f0+{a?0UpxYdhD?$ zjQY;#rY2ulyLRpR@S_i&eDd+Owl<@V`PZGJiqnXFPYIrW0rPkz-hZT%fTJJjBzt(9 zw;3>I^th8wIyGth&_nk<|H5kW(b^^?K!MOU0p}6R?YoR!mt6$7mf6SCPCxUw<4#Dv z@7}%prW>!1q6p+aQfvkT|Dmx?l-XC4@M;)2SJkeNxPFCj9aHA1cU{J(g2g~t0W^>- z{6V*;go0QwZnlY$5R+|Q<7t}k^e@H~XOuHUDc25bn=20MBbJ_?iZ-p0KAPsWq1H9N zXKnZYP<8(mWo)`gdrN?9`(FnCTi2wo_5k3F>DBz_h9ba#!#a3Adep(qOtN@8pFsZo z#nQmP+z00$Z~#z;jeq%LN|4J5FL>g&Ck!aV5cvyCF_dy<4nFx}FvPXON<)XVUV8Bb zt%C>U=hUOa4?8seeDKknd+&d6`vBQMCcpL_UJ+pZ)Dh*2P>fvz|0vmu01GL`eS>5a zOXsqSFH~gIt5?q%)256W{hfR6e`wzP15vzQz; z9oTf`r57J{VIGx4caqjf;Rs-S6fJ`$5}x;8Csv9sLeq%+6)Y^)O`AIX+_TTC)oLz_;$s0v z&zv=G?6_NQyCpsiuunJGbre=JIoo<nP(q!?D69LzwyTF=FI+xh!Fm{fPV+`-!WL{gc_=b>M28ulN#4C z_5DuY%)>2)Ku)jB&0}(e=>`G&eOb}{HGkZY69Bk#pUCGQk(VYT2&>h+|33e?U&1fx zsPs{MN=j`50ymz4ng@Cxb%#3 z2Y{adpqaBya#_?mcp$jC20RBC{yyRPN0ElR9RGNww$f*|QBcD{5J*%*7=W!>y+%iR zxiEd&6s1uXH~0wv-OzyynxxIpp+kP`hp+0{qledK=gu$VxB9fG7cW_Q^>sJJuOi8P zDxSRe`vn{^h6|TD=2u>Sv)GTE$Y{!>JO~AzRa1G!uRFbuabBjM_~9RnGyb?b+O%o& znzd`=gRcGi^{eM@_wMMXTW_DYV4A769*4S(?`f0PV$oXO<(|M*X3{3{ks&CXK8UVG=y zBSv)NmDgS^@=cisF29 zUVu3>Uw`AZO$RjXdjjBPOF>KL;C>aXM_fN2Uw-992T?4eqsz+(z~{(>=hEha^Dmq_ zb$W8;w%cy*)w}muXPzT%l6jQOth5OJ_y7KT;lc$7|2Us^n?c$a%18!f#tdCXdZ9=x z@)v1ezK_rv~@&f(tI5 zI&H?@d35Vd@4WL?X8W_wI(ODF$H`%u>#x6h-rPC7_dYcf|KVli+GPY_oi>liigoyP zhdB7CeryL082DSi^*hO*%aj6@>Z`ASA&JwbO|R9w@x=O=)TyQln3< zW2kYxZ);m!sRjUEFv>Y40v$nxu=fehzi0^b+@xt|^N&Bb=x7q-Q>H>xlz)FJey*~q zZ3_HXAQnh7QZ@nwaZGywdOvvOrLp&4e8=y9_|Y40zP)O7TkH<&-o0DDmX?DL9(lsC zv-11Vq)6tY5|4JTSkg^-gJ+q^|Y%(gJhy9WZ&WpYO z;s|^Au_r#7GjH3rZON4b4{VAv&zyJG8O_ao_BdZ^mtS(>-~aQ!Z`imI;@^Hu5~^Ql zsIl#P)*yTXmTMr2N_`ot)#!(=yrSOwzh&#z?`Hd%J$LQ8b+IojF4Hi4_^??sXT~Q0 zoO4GVc|@EhC^I52`6rx=NKFOcm=Py0Wb^1zY$Eo|h_;gF3dF9oYR<2qZpXiS_00s^iG;zYDDU+wfsey>-l8Y{TzTSyxz&aTUg?}Id5lNwD zmr=?4Gl=KqVnv1x8!=f-UcwD1BCU@BQ0MTd=gF84q;aRDc6R_As8 zHDT$I@=zazVKjuVR;7>G`lHX&B&Z+AehulEt{aG>+$@Mm)Hds-adjpU!o@=wg%S^VSAMZgpXKKl`ADsDp= zC|He1sa*=}y#mo6z)J;wK6m=G$#Ka(@ho3^!_7;VeJV!7mtXE`TeCL)y!+k<7oKfev5W|aTpDxMPmK|Di_={G&yXfNlV`6C@)x7ZuEY zZng;n@Hlh&G!acqbLY*!?asU6c_a~<8{-1a^B2U|$Br3&(fQ}afw8BYbYi_;k(bUW zjEuAwFnN|fkAP{!dJ$lxu(^sAMK6bTtf*x=ApGKr**caDc7R!kS+V#;Vg~O6Mov*< zu#OA6+|ttT)RRxED{8Xkn(O}W)6YJUXYJUrWBH2DA9(2VXP)-e_VW2q#9$q0{xA~%ck+=(9(wkfOYn${{-_Qxt_k2%zJYm!xigh z6bI}w3Q|lvpk0?{C`uZabnnLGJ?orvFOUHFFTdP*?KS_qVBvxs{t4&5@iK}UAfw;~ zJnFz=(m9$o?b zV~%owEdDD)U{C}7Z{!>+_iT9VJ(p>Lv18|^)ac7e3fd3$0N@P(V`O^ZsDEa|IYT@D zRE>XP<}Sd0ZhJy^9q~M9rjr3we9VgS{+sozP5lr;`|L(1%==$HdRl$aO0~>rOkO@073_4gP%+C46N&9m z7ar?;o{R5u&ROR*H618L{Ql#={#PAW4ZAN-kfq!Nr zR^#&smysRn%0|%w_i;Ww{K$jPJ@;&;*|=-h?s#wD;E@L(am10ym2qPyJpJ@jf%vBo zG7`B1FO~|{0ZxA`-!~VZ7@*31q>O>>3N{bUKTN`Zr}U8u?~{K5Af|KAy=UklJyl>y;_3JlO;@>f2SKU?<=7Xq_m;L@E^(tHlX~#=5AijQaHM^Q~`wORhZj#3SPU&&0a;G{BvA z-S&$=|110Ks8!-WicC7j&ebyJm+=IE5$Xgov)hy}aF?C+>dB`bkG=o;3;6>N-uFwt z_^ZjFwYIhn7|?(1+I8kbr*<6hbrp{`s}|`GIFcgeo^q)&)-f}X0;nVoIC5mRd2s$= zD!h*!>o}7)!34dJsS^Ow_`LHkipy*W%EjLQrArnkqB8K`kur)u6iPbgck%}!Fq}Z=l&%ox^Vj%B7L`IjgF_=}o?#H-yjQ@?C<0Ag07Hx-y z|Lfd0F8sf&J=74#mEeoLVxc-P}>P!6z zfI?q-$$1pvSdlFwy$v%G>;mKrCCS$*RBa+LvlZ&XV_j4Y>qdzy8K+(_&|tP*PYuJEKnTq<+j7wZP} zAJCo%s9(GRfJ1eff8%wVo!eX6M z`zZAQ^gfEV$m1@&=+eoPrzYRyDqL6p-+wJ#y2M%e?@$?uW(1NES+K&6bv_QeF!QM9 zYI*N>Wz&lx7DM#~iMf8XJd@Sy7gppz*wkeK)DEl z0ALLOWHq)q>-{$NZN$+0yROK;ef-Ik*9`bA99oQnU1Moqu@r8Q!$-^UmpZ%+k{faT zo}#i+c-Au`(!htmFx&YzrT|ioD;jyTw^_MrwPb2K`NZQsUa~Yk6%M?}8Tbd%P$0r~ zq)kDqjBw8xOt`KN9yCZ!&qPsNI{QOuqZCGq_j2ND4fQ(*L}btn`O~Va3e1BRSUT^& zKDL1RG#u+vE%kZC41*nD3IaC*+7JbqMigRf*&?G+-x)1`zW2eqU_R@2-g|qW4FICD z4p0|N#}sp^)1WSVo4PA;ivJxucOa(d+BI#m0npO7FHvRQI2_hRl~b1}jyYr>)Ocz61TYurFf8ycCo|wOI zk=#MKe`&en`-}#AsqP{hWCVDg${!vCqppSzA0}6pE?XAo_a{flJeo6ao@@XJRgw{V zGSYQyPj{3y-r(Tge?N{DD|+c7MKwy#BTv;T>b!n`M&AXfC{ZMGBfSlWgE|g`6>MCO zh7BF=+G)<5+29fWWy_Xs-n^-I?>_Yg3C@2#P8j&lh8$c*;h`><8EcW@`X+1Ewn@mX z9)Y`d?b^D~frB!gJ_!DVvw661?RH#%b>$2EX5Yl)N4byHuJf<@Ir2HK^5Umt1oB_z9Dw0!r-t|NQgMh$uq&kBDl{r%scRsI*;1I9AxPuJ~C2 zbWHA}IF~Uz!A)`TC$bxKSCwn@^xiP;r8zI`1NKwE`Id!5r-L-E5o? zM>#8fgq`5ELcfh%Q~Xz0z~uv$`=8~9nKuWdYnKrh_Ho6^ zRnNWn^6|$Uo%|rqq5K0^T)JuV=Gk-REn2)}$~uuE;iCr z05$jNqmGf0)W%@^S>-eTIKUBxsRo;{4(%f|N1!Z3#jQIS8&{+0(W8g7S+#nV@?7t?D^{*N>d5xVScZS*5IQCiiw4LE z40UY73jJAiE#m?+%+NvK_{f?Q0-@UHpTpq*+tAKG>4k0v^|rbKozFjaN&fLnT*ka+Wv_R7 z{cR#>=>Uq3O3(;mpx4SqJPjN;VEow8t*wLO#3udwwGdIzLvB=TyfWJ(wz!h>7d#bY zI9{r}ut9x%_W2hMY-*Z5b&5Q#Pw(DSCr^w&%x=}{)r*%bows1&lBLUb?b@Y41yBGM zbOzzmF?;pt7#aCts|*wl!W=rid-s;#ZrQTMo2u+`<-TRhR_75eBcES9np?jPMiS|i z?eJp9I9B*@K_Tan*NgPzE&np66~_0V}i!yRv%N+^4yIHkJDArcE31 zd8E|Zt-wDPRodZDN9CRS_;vR^igxcJvhTx!*(o$x;Mes+-#FS;#X8C?mR?*;nD9R0 zMSyXvOBen%IF1ecTTTGju}-9A?_>SlPd)97zI|Kd&!(o>)@zausQl~B+0K@c447R; zI9AxPjvdwV@!ZP4@4U_&pR%Wmvg-jTV~11rspyEPRw}TJnL!y*a=qs7`)1TpfOQht zw9s*e9g99^%Lq*V!R!cJ11or2RSV2XufDc!-4_u5{!n8P z770~6B@kXl0M?b5;GjdNckf>Eee;$rzB4GlSXrFg*AGsy%SfWR{rmVpmmWBM2yyR! zx{w{1_g`2{-N%k~{_XwWMp{8Oe|$uTvvmwO(hE5Efjo5qr;+ex!3w*KT(4f=n@wA{ zZt)(i%V_JitxgEzUv3#6Y@lYp#1>w1!Pxf?Q;lI8Ym|2SJm^~dtS?|Asb!c&5 z+%9q^y9k{}I1X?<|BaeQw%_`^1;RRtus)W3+phQiC&!_#`hg$*$AA30IJsFR{v(rJ z8eT@yd%KJXz={x9$N6|0NXMw&JR<^d0I*Ae(YI8kPpcU)4tV`42{`v3Q+=&*LAoi-f2Umxurv1*Jy%ueyr= zO@7h&nSV-hPX@LEkN$pe4gg326y9N7c8gHHfIOHT?k))bZ00}k_!9t900;u06B@AW zd${o1AzLHm{iEMCD32k5DS*E9jjvyI#U*KLAc}ZfOxw5b`Dc6lPyB!Jo5{rSV>40! zVVJBOhcB7mHv78asHCc^+Wo0oQ7I97sXi|Hc=5mf=l{gM{&8bQ$AXJ<0m;p!GIM+; zVDiNAPd@$Z^Dn*3?BMa?vIUp8s$GFjAUtXb&->3x&;1hsdJ3Q&J9g9!`+?GcwCMFD zzt#cuvZ$oPoU<9jC3E;PkV6yo{>%8_k^V*1A%J<58-bn#sgaW6CY{5YnF~}5(BZ6! z!PrPJFyQuSq&=d%9s)7~@I20WEo~0!(W6upaF2s}I3c*0WI`7H{i21+JnAs0g9_-` z;$-|>4bZc^pOqS)P&&pOA$jfbBEV3jzee1-b`f(9;_2f<1{rmrUFY#*#yS_-`WWpo z-IXH1^XAPNFknzj&bj91zCZYbKk}dd`LDZo@2<)}bsZUr-h`J?c&yW|r{8)j^G~S@ zIt~DKskA9dbW5f4%IE#gv#-F3nT`L7>{Q)DbQ_r$a4?_L14zjNh$z?V%vJN#F{2J~ zxJFS8aAP{hy8lXKt=%UjFcsR$N!AktT>z%UsEsd@De=C2ci2SaAzr~A_bd@7cIRE8|pvqPi079;_!X{$$;1NA>EcvAupHD>M^q(_# z-uoZUZfk2>vvysaOvW>|;`Xuu;FG>QYB_Up{=*Z#2`Ahr#v&#oHuiDls@0D^@l^cj z+uVHkVTT-X_+jxU{$6KM)lNC-g!mNs6Hh;@jcxg1$d87`=YDt@ne%RB>#ZJjwQ194 z=Oi6dFPMFbb2mAS>@xE2BPy3+iiS1O@Hq}_&X5DK&M7Az6qfb*tBftEW1jNssBbS_ z1qoeHXIu+ zJoe6j8X6$e9&K4VZItdz=PW#7;WhvCl^<}g?zJ&2RHfcYT@_15S$HmU8JS0f+eJ8V zRI(={0}cTEhb_~G^Tu4i)?4(@73iTnD@)VfefOQ)Z@YQGfPug8i@y@b6FBD%J@l}1 z&N=^{d+tnb2tQX}Pou2+5Xiq}9to%g(jO|`q_<<8@+b@cI%c|*jHCf@N)^Wr#-47-pz^t|uZdEE9S#J^Fq=;yXvd@( zE*F6~*$s|zbo_n#zUDtXc~i1<1~ol`7&LnDh@ML?IzLG^8q>Nj)?aZwsIQZOsP?O3PJFJBM2 z7Q(IrurAv&BfPFagyMjme@U|w<%~~2taHFx59wi<`=oF9)?07he*4XPil48%<(3 zbdaojJ`f!b>ABxU)uv?=|G>%Jkh$!+uvj-y8TTg@ZqmrVMMc!Rg#WE`z5h7(cyMan zzdkV#*y??$u!j0P$QO~FB2jtIGK_M#BEZi173ipRp*$u|?u8brm77wzqb{;J0a_e7 zl6lv;$}U`K{_$At(oy{T2mhf-XI$q}tUWK9tU}=<=Zf3(?AaqO`J4P1A2hz^x|`y} z@$!?*j!EIubP6CnW&nI?QH(aQ4I3QI$XrhTtW*e&Mb!2_re*Z$XP1S`f^X`xT z@DIj`fD*1pj2J$9&Rp;Q?O)jFV3Ivqy^->O@G_Ed&R0YSoK4Ud?1a{=Su5XooC`$d=ZMQ~!x{6) z=T}!T8K4Y%CTee#Y;6##WzZ1&cTscXA=6aQP};0owepaI4^963);GWX z!b{J4dY%~wH+7*q@u0M-GHPI+80 zR-0eI*g;6gI-YZmvpdI@u-QedY4|518yxPS9@f*s zh4UTnh51)MUv6D|e&F!J{FSuyM%H{DkfO3C3|6-knokzN>64pZFw__*zd9 znN3-G&cF!DzXgjil|0X-+W;k_<_Ykz04Fd2dm}X~Gx;Z+e{<1zDooKs*g(MUPtPre zyzlFq1fB1H>l&_qoO>>{uECoG{t^#w5=fh}_!AQ;-cRj}k}rNM)ts7ga^I!3ZsPeL zVJ}m&8L2)dUnIV;-qs;0p3h0$x^?&NU;h!#>-qPd<$Yw9XYWjKL2(tYB96zK z435%9{YW#z`0o$=H{Sb?a_Os@0KKfN+RF?Vx0j33X5`2buAM&neEHgS>k8Mk*4BZk z6969ndD10iS2IC0n18>Go$$FVA7-PB!uOGgmaka(!b>m9l|x33kcYBQ(lhC|=6FiC zcjN%u%aoC)Gk}ar z=@{3Gh=LkwGIT{)=UA*6Z_LqoOz@b?mhXG>vB zpB$iv5Y_?M;zPxUAAR83Y0T)cAPkHfJ1)y5?R~6RN7Ut@uJikd>zD^Ig*xU4uo)t9 z1Y)()#z=BoApp<2j?Eyy{r=E5LRQtcOoN`FOkyus5Erd-osw!5@ty zZ#)?2V*H1fk=-tm)zXf2I98kI5iTPJWW>%+vS4KKEMN5gW>?kDSdY*(4tN%ZML7SC z^JOHVKU`q#I=z!V|2U<`5bWc=&JfmZSNVC~SV3|W(JMAdC>`_seyWVLHhvG%`k+IG z;yzSxPtj+&-ZlJhU50S(1vB-vHSO8=t^+s>;JM!>`y&m!X9e@#Hf{sJTV0v56;4-B z`IALhb@$9e6sGij91;E4kN)7E&kx0g8Pm@aVkvf}JPUan6F~ChRc4|B6CP}18UOu- z|A0g|7^S(CkG22^>5HPiNK2cRmcDYU&6_u8zQ}p&*5rv3@=gFK0E7S~JCuLifW}F| zTYoOgr<{yjH5oDUk%u34?pbG?bLQ#szoWnN?Q9v<(TbI;TssZu->?2zLY{F3?4|nc zNn~vBNClTsu_9{7BF)KLq%&W(cSpNt&z&nbIq8JsiKx(dJ$~HSe*OA+|20!ao^Aj# zDun~Sh-$Ei6wASrih_0WQH-sCSeFFA%Fah66=U*oAU!dlO>sQB3g48%iE}9e^bo{4 z8ItT5`zUMre(>SK&F8Fd_cc}Go~NyHS?g_*|83HOvp_-csXitAEUZ9 zc|hPrv3azQvKQzW@^ao_#l zMeON=^74<_uI2SmXFE;=v})B}L$0Nz<;tsmh-%)g8o_@Qb{-+wfLSAaJ#wrpxd7Hd zrYi$jT}P(%lo1_sfQ-yRw_>yj&$$%g8-6wGW(;R;9LiwAm>B`@m576n0e=P5N#P$B zn4-`6obs3~$A8xNQ*jpw+xW?(@|((bzmx9F^}4DM;6Bv)sBM%=n@;k-b)n2ZIQMlD zMAkTU!$8`E-(1Hx6^gx|T;PvIGm~;3p`xKn+E)v;^6L;l z4r_cI%HM~aY5eye{u}N6Cw!}bl9PXIOn9U0}wR;lJ7in zR22_H%LrFQ#^$m9VlV3Y?)&vF%aIetkIOvKBGju_uhULG$z_l(BW{3><=(?qW6dBl64oL0j+QdF!?C}L}|0qq>)u`GqBrb;|Gi$otRSb;m5BOfXRtk!+J zc#-^h_8I3k_vxGG>~`c1=-&OJ3onTyWb@3-m?Cz8_y?el?NDc5j>7lRQIQ`{=3PFy zdQx-@>I*AQOhW{8WvnCJ36-R?2f7r-u5+wK;@9_5SkLC4tvG=5?~3d?N5QbpIRc{j zATsNrkl%jij-A(C`+wWFZ+Cm>h$D_X>#TF-K8@r*3O$dsPUo*j6m~sw0M)c%pEAAoJh+gfd;g( zvZmuF033QQ8rXOi87W;PWaEbv9YbZrL8AWUCPj|gVtFC%L(<;|(^3Anki^bT z826>tHTkpjhC%rI=<6~Udq25I>Si(201<`Rp~7=jAotOS&VG)%Qi_1U{F`?O_b>h% zPpopB4pvs8rND>=+|XRPa+NfTv&K)IJSj7>CdpfJ!MSH2f9%oOFTwTv`+dZts!{%R z!%nFIfL12Q!z>#tBT4SReftiH=$|%al5#vSKFKudJKy@=Z$JM$EAq(iV)=+y87_mj zDV&UOMI^{1WbmbW$YaJpk_}dUO~fBfE|% zFG3C_-?-7S4vCs1ht4B|8bZsvzZa@c7(~m8i2+AIc^PFNjdyyKBEBBwVFk$JJ@?-o zSEEV3H#ax`+|T^Nz=4A^UnUPasK<~0=uaJf_z@`u@I++Cx-JQIjqfAgS?IWW{X|oA z%yFrxY5=QohnfNF;AmgFU1xK?`@LlT{^H+`b;VKhg0_f1N{<|-$%aS&kE_iZEOl4a#TIC+ZRny3Lq#05&#Os%Cq3j0H(5OZ2Y8`PsRLGb;tbMB3|-dVfu3w$dE2QP9k|N2h2%t740mYp|&ffd_-4(?pT`?z!G&S#!~K`x$k z`f0}>JFBUwDQ)x|ddR`Q@H0Qr(zkEYa&=qVN3-Xq_@Pn}Pf7$XXrXH%JtzUWEtm@x zkpaD>R8W_`U_bcqBiq`;^tyHHcF9E-oOR~u&CPwh69D7Kj{TXR`0*jFt$12MP^G=bUDIJDB7J3BWo--hb&AK93?+)Ub~7RE&imWUaU7{g+=BMT?Y| zk^d5&eEc!D<^9(_tm<=|_2TJg|DU_70GFc%!pY%M+^w%T#hnTc#l5%`_foX(?utW& zzIyQr?$ps@b$7S->N_lihHLI-_s=HpdNAL9aNU>No9s*`$z#$<%Sv z5ze#!KAL(+QPuWvM~~oijF8QhFdU$`ttRWuJjL5OQhfxX*K@P33t}P!g*4>A@E~4~OVRl`G$J;DHB~JpaOV9Kj@+=y-HK z!ehg1?Kuf(%@Ad)DVl!)j3ZyR&RCJp}RY32=xb6XYkKeYtk+I(_rhlTWN)yZY1B9=r9X8^ZH|+itn> z$*PY$S@q!~k2p*S5mpHv^1(;{K8>*CIy~jdo_}c&ngL)&?_}CuEQC@~z%Mi@LPmHW zM~oUXb@~i#+b+J~yxPw_b#vwGLPVf2A>jOT&kjF7{_q12-h20+d+ec_ty{PLo%e?X zL4ZZ++M}BNdyz=G`on#pSokZih`I@OK!rzLty)zy@U6EuY}lYhR{qR0t3UnJgZJH2 z`TA?Gxa^WUZ@aa|Gf&-A`TE^=-%SXydiCmoZ@r_%9gS5A$cU`$03agik^!Ke0oXbi zUs&Lrr`e30F5`=O%o)3~xdbM#ZL`pg7@-E z{;cxPJXyVY<5u-*)erw$r$)U?F1}P{(gZ=!r(faf)y0{cVd0@zE*vSZ6^S=dFeQ%k z_uoeXO5B0bd7C|p(J>$unjCC3u$hO4s^%@$@uWJNqjep{7gIGNAF}fwxYl99`6ruV zut6eQr%Cv$8{w*l2JzAQpMUo0*s(vWMqz$umAmiVX~&&Qp8vpk9N}vQVHGLQ1^oaa zj(Fx1yk>~B)edzp6nV3C!hy`~J5+;2#L6+?g9h}=$FYmti~TZu;@N2_&UuPEKpipw zm~55UK0>}7W==n0A&>@GEKIfcsYt*RKph4rk_u4DF>Oa$jmA5(537aQv|q%AI+_ab@@2XK!_X_MEw0yZ2hVcD*$i6ONaP^UvdiT23dF zZG{pDA^?klb@cNXQdoC<6e;hBg;bSsVESt|q*;N`xX3P?8lctYrSn4@>yl#{Vy<;rev6fR$}9Eo(pWE7nqD;OP%Ux2C){%sxRm|!<- zd{&LV$rQtc)zEB1l*JANjGjko8AbpWWHK31`UPN&vi3Gz!U&GMx&(&590WnXfqg&u z?BmSU?XJ7-mX7$pV#SJ=UVSly;Sw1Xz)oKE9zUJ3wIRR`0Ja+8pM5_(|0JwQ%R<&HX#2LHIBU5 zI)8pON*5Lvi40DAggA&rd~thX><>c#|CR&?Py#1TNizU4FTZ^R3M^xXYJA{A9?3{h z3Ba9!_QZa@!RUVu{BL;_`wwwXE^`+1T}C(X3;_E~f{~*}YKH?yM;&!kqee~k*kjM^ z+E0-8mb_*FXyHhqO#yo%hbyc4&t|hnm@rDSlw1zZ@u^4dmVY?;h{fnhaGlM{QM(4=?{vB7n%Kc@%Nwq{41eE@~^cn2Lzl! zGc^F9O*KWf0iQEr(&Ua^UYas>nqVk|p!sIl$d_O17FLv%(wq+g1VO-nV*KM1VIp`L z^&yDEu+Z%d-e_~)2;m=Zvwr>h(04rW?e{__vS3IZ6$~Fax?Shzr_Y!v4FVQw=mNzY zUefMCsEjBke8Rk-^)_CR7RTe8I(^y;ue|!}Z@)*Z+9yn$*yV+nX3d^uv_WL#cZ~2N zGRILe2%tz?C)q`kCi2ur(oHxuj4#q90XqN<5{L-WLtI8?jI8W+4GOL35+%v|A=@p zZCyYyP%0!qJrus$;12rr>(=+^@mg_lv1)e25l3Ee`BgdLpB%=K^_szbJ~9JALh^0% zO-l~iYMy@{0?V5mJ;G`jU5a+N0|9Ny2vAH7n~1D9{kuS>I73*56Q4b!?!yt&(By4T zjN);9)PXn{a4!~_ZoNKHp=>+suzg6OyDZFba+MJP#R|MQ|1B@P{|NUO0-t{mZ|L%+#)9<$ERiBVjX7}C_;Jx*B03f*mNzzE#NbH!FV!!?OtM`_9{M4ed*&(i<%8x8J_cJyWfB&#o`M(4lpUCOx{o^4cq1uD#~U@Vlnk%FRw) zr4T2dbV8ll)%*7D{?dz`nm23Isbia-Z@kv5X~Xj`IF}^CzsZ|*8-UQ1AM^T;@Gs-} zmm=4M=R`1z;Hao8!lSPEHX*G4Yu$Qwdf}DNzx*aV512b|{<3AuLl5%LV}E`3{UOa; zw;%f9$LrT`R15#~%dp`i!qE{zlZS^f;c3l`nKOrv z7}=ro^WA&)T2-`4iD34eIg=(&4zI8t0Ene-kM9{UIu<1&&gS6zdB)a(7{o|~ser~& zpxZ>L;p#Q3Cr+BEuDSE(nkp6&U4kmXXw|lPpZ>i*`s9N#-;EkMYQ%>h4K3{bM&o7;-+uS4qM}vmyIXI)jpm_vbuo{3 z?>kaHVA}}hw*Z1nom(F%Iy+576(pyH3l~hBI6+-2SFQkI78Wg9q`$Rn*)pwTj2+-S z^6pXC_;2w<@#81}F!7Of9d7Hae@ibo#U}pAswgX9t5F@Z<{v);2q|C=nSlAI1hWC= z&6_)J+#l)+S8>K~8P8v`cu8Sl4?ThoIPjqT_S-)v{EH;x2&eSt0~r9onxFAg0rnhR zx^CF8UJGKz^yz@DPRPHM-fW%6Gea1VuTGu1Wy_Xzk`d3pos6Ieap_M+F~!62g8}B9 zh!XX`hqvM?|%LDmtOf- z-%at)1ZBs|=-aQ+aa8e~Bsv2S_)PcT${YUiJ(`lyH?WM(&c=`M(?==O>@%}=^|QTpL|Mv z4r7*EwrsI>?OK~Pi6)7>f60#{O|~|6)TogHqOh}j1Ga_S*KGWEgOc#S(Ux=lgEES3 zL-^j)V)#0@k%$MDrMvIG_tHx)6GD9T)t4{5`~owN=%-r0w=fdO4gv^BGr_T_OuF{! zEAPLrO6ZGM5ZJ%``rAA2zW@H9q2GP~qsk&LD1As6m>=SsXPxYhEqjde{)fK)k3adW z-+;G1`uNk?v*)P4?ziv0&6_mXZP(p0`46*}nl!AZz5fdqF8t)v&(+r_PoAo7o_Frq zO&ZnPdFP#cV(#1H^1HwPJmp`;@vk&E_XMA}x~DD*v}g<-X{CA47K-5?0%?+Q5i6ef z_aAb}lckJgiO2|!&fp_n`HPSG=kL2^0FZ->fIbT20*d@#_l=7gM;>GZ=vct%(w55r zpy+Q2LdFr0h8&ppc{Sw65vXItTRVMW6t80xMA!kG09!!>=^+w93ET%G+4%_lZMWI3 zOhFmV=aMB$L`m}>KoO%QB_p0>F6N`i2r2a;vPc?U?Aj2QgRO?M4WfziOh!SHHA8xU zROoH-%D;Xm0mDBaJFn5@j(W&n?rR2M9OVQ5(F;EFB2O|R;6!jUgB}ZaDY>;PYv=L# zh)*82A4kIA-;<8{!m(vuR(zpmK@<-Q1{Ak9Sm3gYcG_vD&?kQW`RA7^RVvARXOcPY zq>wngjJ|M%QzTGg*DcXSjP-Cs{4>D2Lf3w}mu1TQyK);hZd^DY*~9I5V?E-2tKTFCfd z3pa-!03<8o3Oc5@*=Fl2ue?m%`uvNp?!5bfhK-x|>NDVt!aglpwR`gE8jBY%`TGcN z&#SM#B5TZcjpv>Uz5l)Y_ODv)xmRB6Ht@}NUVXhswWq6h?cQ@!@ul6W+;wXv|2I{> z{;nEi~6j9LUgGMxOcz<6Sbp z8=Z=n_9tLC`kM(Uyxe4@XDYsrLR}@DnwLaIv2Y)ljs={K@iOyR1eh3G$G=+wZC$j} zjR5t5`bhD1AP^K|?ZEU{Z5ZR;C}DO0C#^GPo!)>qb-bRZ2rn%nCtFRX_7KZ| z+(6A289D0VzWeT{8!TSD$P@p85R}e;Hkc_t1@~}r*F)pV#hO7-{_s!s0bV2mp$7N8XkC zVC@kpNDJKbF|AAA%h z1gJLWoL#X@K|wnI`|PuKSRp|D_1j@1`VV|-Hn zb3%((Gxs~-^NW8O!~Yic{u^%rsk*=rSPaK0;*WPq;{5ZMj5~Gr#=lUP<!@ zml5(?!0%#_uz;|+<7p_Q%D;?+i0hiMu|#kH6GvT{<0z7lf}eoggJ?YgB6J)gT!dt- zM8vxVZC#LT95H?5zYE#{0bJPZ5T|2M%>x0Gp)-J~gKP!x94N|u{`~p-?|*>0F2C%` z9e3Oz;1SKuxd6ci}_*Q{AHY0^Yn8Htbp{s9{Z z*k_Ihlpu#Mcj%5EitsYh-<96|hq)&;5;@r+#e30U3;Y0BaPtCE$BR2K#=W;@-@|$U zs!f;$1qK-iW{fb0D8K=LBSZ`sQ9gRicU7xBQ?=T&t=hETxN$=!#Le%&kNf8^WVc;I z(4Ndw*%>ouz4BVutUPq0kLWE#JFTVT$7D4I0YF7S#`~8m* zBS(iR2t-u2>@i4j-P}X;;O{?=_?OIg^D6eA?Kv+AhQO-#giILrtmFLSPC!OL2>;s`#%xss2n)N*F1x6I78MmOU%t!-{{hdx-tRIp z$^j+SL-M4D|4IHG7Ir|d@jjBsRHMv|Mf^A-bnWWCWDvkS2-pE3bE;#wC5)OxIatMX z(tqNMJPQQLl~_Bx(~dhDb`LKC%=53hm$LMG*ej6c!BY|7=&>(h-wyk(P%O zU3cA8{pt7Le^)h2aT$e#_@*T9EVghENnoybmX~c-3NwxneNOrGAL3p0L_lF)gdJdy z3`F!Z4t*r*9|uQ>_ud8>ec!loqmFJjBKiei+&GA{75aXX0|4u^DR$z=@v1_iaIvfG zi(;Fk8KjDnj2ZL2`h41Hr=x5|83iMdhn5| z;q}Wezb50~$7DlZ-haOEFJt)66YoC>%UBv7zZF0A6%J8j=AX+-z4GD0HG03Aaj zKoK=h9^pcQ7&T!cYam-k@#826@QjD3afIlY5P-FV2+%PB+5z14&vh}d$3bQm%D{8@ zHbq6N`VZ`@iZ+F`>#n=qaob&u8Z>?M;i`AsR^^84D&KzVT{WJq*{pGk#~yj2OqoN) zCR(s?L65?2M1c$cyp9P9fNTIjMhJPV6NB|J2roVx0JC)>@Pt(zjroq-Y7zSmGozfc z2_vU60&Jc2n&E^KPOMVp-e;e!*|ce^qmDX8Y@(q<2MHlu_{YXk;A=irmw?GDF2DaZ z0~(QjY0ha%0WIC{1h3YLyZ#w2DazKix(|-KmFbHDz zF9=jV1=%yP#*H7B?#vlG_GjKPiu2F;K&0g^A5bj&!(HC_D6z9TioBpbCOCHV%Pd{G zARYh5QbrOAJ9M_CB%-6~aYCcWjlO$>4Kxo4QeOOrIrjbohuKh|RRBR+`GOBc4heww zhrNC7otP0ee1=2-Kno^=0Fu1I`Hv!3M<1n1?Y!^4`y5)PVC${7&Qg|j6HT8nBO=;; z=B(N3ZwKtZU;6JJaKHiT{G}QVKmYkb_*(`}bXnt$NB$xw#>x3- z+VCk_Uik;CDL}Bb&Mz6^-{rap;H6sD_U7NAe;E-0C-aCN;yBlAbO|aWM8*8+SiG78 zI!0bnH8EQk0DTOYam4fy7)Sh<1z_zEB1FgB?Et_PXzK8kRo6mTe~kO%)z@DxE-p%k zXAH~yo_NBE<<2U9(upVSz4tywufq-hE3ds=R8*XZf07ch!^H8A%Lpg@`Oa$wKFyrh zReS@6ewS}!Z>z!i6ye{$jB>xO3(>TWJMM%K6C;&MrKih`88a$p{Ns^&?$Mfgq=)W( z%sv0u!p=SF8SkSILEM~cr-winfjQCB)`1^KK6T6?&A~VWiu3XU&|%=5Xk;tmaE?os zEa}$0>-h2G=gyn^#TTCs88X=IuvU=^rhoc(fe3{puz}3`0S*fR9}AkTh#z{X3cxxS zEu4>RWCQ>Y1GW@95M}kjUPeHsEF8tJKO}_-^5cKYJ%La^`~_t?dX3_T4hhUQ=7o4a zO@xCiP$*0`p=~XqWDr0EDjbeSF9oG<6puRU$g8fn?3t&Yc(F@|K84)|^zGTB>nksG z>Cn1WGn0+YC&d{vW<{JR&X_S%=brDd!*;5{cH3>Y!w%c4`_rb+K=^l$#K&E)%muvv z{O4Z+{O6RUdl6uDC4!ML+e;uKMo6QLC;qcbSH`BYN)gjv_Y^$$BEaV5AS1kwUW-O5 zLN+$YkVS^R^e}t~l97}EM2V2j8*&0t@^KjfQD%O0jN%Y(pg?kKTfyUR3N&q>@1x>B z#b!kqeRQ(}LQs^ov&#yDbj;n>5zgj?xOa%l$h$pHykM%V-5vezdMF+A5btAt@{cdlUTj^Pk)cm@CuWDZ756L_EqWL=o_ z_W|eB?mfD7>eTVWk3I~70C1`jhM&&Ba{!q!cm{y(4vyTuQYmwe!yU=7I$a67z4g@#1xJfcMFJ z{w2VF9(n)qBEXr2LuG=(F9Ly%5y(bV5@Gy9$46uf0pz}s#wlSDU~3sU_R$?*SP`>0 zgOhgfwJsbw#s7&=8O0WAi`GLdMKnM*+qjGX6%$@`4Bv=4_`}%ZA6${-6l?1Uf-cd0 zOj#Xtu`=QnED$l31aZ<2VRg)tts}(L1%RmoYy}1ZBv1!^QSqvw9}a2UtifwtU;W~% z&wu~pw`tR-g*ZPmXUz;#1jc+f`n^H#HgDCmUB|XR{rr;y|G+p3*i`otnvX2)dEzw# z1plJdgtc|rm6HgITwel+P{wSv@Uv#1JdhEuhj<^uy~(e?jvY4an?Zx#?a`xa^X5&y z_~O$L5Y?IgAeR4hn+7;v{73yKE28VJhrS&2x#u5W*dd1jB*;NV20tQthe5>Yp*aCW zchUa9o4EpLK8m#i!q>VKAwqC$DeAHaauPrr2|^CySxVNmOiUsNe+%R(wD&LbXA04F z1LYq(c#iC1Dz%x6N|o9rtO1}t|MJUNSVnd}CD%h)8RJZMC<4sb5Plx_R1d(X|1kH2 z%aJb|0Kh9T_TN)I0F%Nv@|$nEwL|+(=bn3B*|Nu0s#J*?M|R-s!RCRJ#2mD9j{YF& zJd(n|C4SegJH+uGd@ugSWwC&KaQM2f| zZtuPK9M8Ie)JY1Hy6%vH$0DcRtd0-Xgt%%n#BhZ=5$qOShZiCe^Yde6yL$h;!OdWO@ z5Li1_!n#TmCXO32ba3}Ky1wvI=QizHc7DD?w;rzzc(dQP!@gd+bV+*gUY$Xw{u{?X zLE}h7)$Op85lq(hJc*DfZa!ii{pn-baO^T>IzHW)eA#LWlFX-?e@&DJG6M7v>EjPS zd>8ut-+lM3ufF=?x8HtQy}CHjn!&y}ITx}x-yqBuMsex0;7qrgHJ%mkYNk0|A7nu1g0#&4mAZ42%TY{ zUCkeg^L9JHqy977M0bGaA76KY82~uUSFDVLt&GZ)DNr|;FJC@m#tc|SY3~`}->v2f zgR}1-Bl~PrlLx#=GVmNX|62};!=vZq$U3#rwG(Hz)dwWQ7kSL)D@kbuIe~;aF7ea)t|HrF6Q@dW{(C^>B z|679we-NGoj2iv@ufP3MWSo0W>C%U6`a>3%<{<|kqzeKU7ZeWIBmCc0l z?;n5PBnJ$~{N`VM5BV*bQ};ecQ2AqZNgxUyEq<#FJyCwzTFc0}k9d(EK7tQ`@dVbiA(5j;kYZGmY-EHLxdkKjcuaQO5dg^uP%*J( zb&TmdWb2}%6m`Z@ioyNo`xqE~R)gJNg6sviDYCFA*PP(OdVJ& zohg7jcc!zv}y-B z+&z{Tbb$p{e8SlS&i=z(5+3Q#I;^3+1Dt7OE7R=HIqtaQTDEBQ@I#O6zT56Xh>aUJ ze*E!A)v8q;`^#9UUK;Od)sXl?2=!#Z>&hIMF^7l=GXQ)?cFVt`@Ap&3iA2=4edqb} z7i2o|Lqs4|1ejCq(uW+JjwxjDaLB<2t7hTD)9=rjGgp5-G5<-U=0O~M3I0~T^Di;} zb4Ac^f#=jb4nA(^Q$SRgVi}m&($;m!kCLQq#8Xznp>Lcr09cF5TX%oa`gk9a;(Gu; zz+`3!)ukpke_S3ltjJzQ`~>VAc_(aB^`!u01gMx79pm2v#p)PX8vwI)#M!!(4emeR zNnH-@7_<>~TSRy-MG>0~dxT&*W_?nkR0W{-+3icv8W1SHqJlkpk z6KKy}asPP|6k+SMWCAXFPFNL6^%f;9TxFzwnsOr}To3bP&4A;w*Op&CD)Ab_BHZ^*#_oIT*=Kg@mXKkwYf4|U?- z6=0u%g8?9W;J^b9s#U8_y}AwbF<1y>TBGK(-MYWNYSl_9qYn>I@9i$7N~t#CSmT_N zNI~F$dH)>Aisx1m*=XN=_Erq1u`0Nz0ltlS|M=s|HmF})2(f7K;)fr3B5RvVFS+Rc z`|eiHz3+iXmoHx-1f^124d~ZX-JCLIYOOjA!lM#{2i2@;lln&0(xlfkqFe`bkaUbXqU^HkRFn)_2zbmlV|^#bfFD2tS^+$AeUk#{wG_^??2 zucGqh%QL3}o7rBOeY~XN#+p9&#n+9nZu7)OASn)`?NXBY4w{R_=J!Xc{SiQW@4a{C zy9zA!dY;!6z$6O!>j=+!zzJXX^0cV|^bX-^!D&hfE6Cn-Eit8XgsEk0Y;1 zd;bBPIOZfD*CZu!Cc+ECOU2XY`BU6vlMQfmt5aN4Oa=fhBfO6|CNJN{J_A4^kg)pV z+hE}0JjettBRm5D$L&=Y-zM_p9G4LgdF`xYeENB`js=)u<84JWl!2+|q@>RG(FWcs zW$FOaM>cGa(J?!M29gf#VC3i#qo06b1dSu2|A?)l%#>$>bW9KhQVM(iRee+dwuK-J z6C4r*pL3JIiQxF-gvbag%$su^!-?r*5UGc`?;|lXvevP{w~htQI)=-L>7zXqDqzpK zapd3D3G&N7zOeIO1&qh~cj%*v0!W5)7ZSKX!sk;Vz_oYG7>8^%#f~E^6(H-ylr(a~ zuO|v(i}xyNL`UPs6_UlV-N|YJ3_w(I3giwOnB_8}q?t0J3Ff=_Y#1R>-R24K5dj24 zoj{o@(nUtRP2dQe3+&z7?yLNlMdW~m)9{ZEFT?yQ`9Q$XTRZe}FK7AUy(LGgePo-qK@!f0BJ)1RYP*D1iXiqK?U4B`m3okg=SY%WvUoH&uS8c|8_rrvV zlhS!uuwYSGWzkjB^ zZ~i63fBt&^*(J6#ugn?%$Yua(Ba!Dw))1gbFuH-X-EiW4#3#aJ5I}s&a7usv*SU!D z=D!W@EMT3a(VH1$-pAYUvyIu9nBfM=C?q5`8`nc35k$0s79~=|$tY$|>Pdg}d%$%} z0DC!#vvrcWq88jTJ8uLZsAS@J3Sb=RmmZ|=)Xj^b7mh^ z{I_+weUJt7h)^BV4*ej!vhh#pZ5aL;TgL=0;V>gORESF(cmoE=NVUt9Q69{v0;Y^U zGBAc)ypMuF2R(lY5<$u6SRe%1>XO;GWS!maiyq44pZwT5VO}o$`)`xTH^(1} zdyx?Zpcf~)jhY=;M+rWk3PAyYWEnTcNr-@A#~MYAqjWDDKye#C1LZw2^jQGR^~gHk z98)|+*9i#X_*WG0PJe#)56lZNF2v@9 zRG@|((_t~*4?g@@{q5q5FYMm+m8YJ3{GtmlxaH=`4eHhE)UnM$2Oap%yYDM_A5-Z! zQM>k?gCKb1;Rjl_XdHgA(#03vbmR3+8`lpXrPQUUsJMIgo|!!K>pyV%^cm{zU3cEr zrggJhZ@H<`#TQk+;kueNo@v#hi7M_qZ~px703depBx4pj5Dr=n-#^ZqJ^vEmKhIfK`HHWI+)EQY{c!O-T<(3h$2^%GMjZw>HU5#BKsJ9V4ja= z05Ed*8Z-v{7&7R<>eTX=Sh=on6U-^WN93HjgDF-I9Oh5hlp556!m`1fM#SYwUz@4m2uf6IM`B*>GD z1mdkn+VHr{?(?azw*$yH62Lg}=r)i7KKSJO7@$Ed4$;$!FuNKc{No2y=D|{O0%|D< zB6jTHJg3PhF1Sj{G#(se6rp4||G<2Q9<Ok62!>}mm{uY ze0>-EU?6gPN8+%<4sYD3=@V6}?Yr;3>PJKDwWpqXqOh=Mad8niMsPb^YUfgi9e(&7 zcidU4W^GmVcHH=JKac%cN{0*prVU413!b9!q|}`RScHB14NRr}LgZI~KNZTK6<+$w zUw`v$?>+;ry7KY}2%w*S9^139PnElFKm4#m!%J*V%a$!`(yaA@g$pxz2!s0THE8n8 zQ%{_D;_*U=Fx9}wHc$`m(DC{32q9fNxPEQ=8^!e9p^f+V@1Hjbw8>}hKf^tOgCDaf zz!wb?!AAxj0%!n^%Z3_j9N*bpR75=ZnGk|_;4~thZJ&LF2*(Ws<{Oy(NRt4=rc<;E z5-%gX27n^M^pHGY5h~^3WrWuNaL_RZuanU+LS;{0Y#k8+eT4X7@CwtB0N{SHI+n?c z!$2a65R%07*&g}F4daq1FKu10`7;A4Q|XxOEHi+PdE_5Q{(&*p{m;3{e~Xa$C_vs@ zKIj<8kB%-E68PPG>LaFOA;}WfF_Iz$>zIR#r15-UPvpP>X&h=lwl3OO`{y6p>p2j% zPYkb=2N^N1+7{rMnC*r2e5(4vb7ZY!yscJ0h73mVrSjr3YdGouM%TBH*$?AWBEF3z zkzHIw9`;H&|B)|9k;Hir-XhHv2kfpL#nab)6 ztc+5gWE8QU*H}Oxraz=Vd>heZ&i&r;q*``yM7bi`cEYc_h zCJLX{r*Hpe&07~072&6C(sxRxV%Y2Z$H|_53Gkmoa{M_Q9!E7!mb$1uaJc_Wd*-wg z%>dwuuguOztVHlhxz7N=I++4wg!jdNR4lR_!7|IC3|IRM0MMKO$J1CJAw3iUbDu0T z00bbTc*S(qF*CZsY|lsH!%hSs1HitIDaB8GA7d~{WlCVfSgQzAW;w#b;$H9 zK?VQ;rVi3WqI|P;(Xc$aUy;TxB#{gL6_Hy8fcu<_+cf_f070x%#^ZdNy9@vU%(*%4 zqj1asP(-=Xu^=}Y0JJNV@$ao2sd>o#iCxcP$* zSAF!cr@kFFLY?W3 zbs98l(dNmgs^4?p!#xXohZz9T{D-Fw-+VKyX6**|-v3CATJ>7AZ2LsDXYacEfx7h@ zzx~epS|M%Wbo7Nd>)ng-@+9+)|9m6t4MuL3*c9?~!qdKd4)RD;&gc|!`PIEw8R31zu@o`b8RPPfI_6%zln@!2BH~kG{ihb1IuFSRQZY!!geM&fki}vS zZ5?6bNVtq6Ovm`}e?BLZA4q{IZ2!Z^zp2YJTPK8|I9o@8f;eMGx#u5`&IZO2Fz4oh ztz%?_u6goDM)}`IeDnO@*D-q;0l4|NJ!hWd+ty*mI`{nB?=Ukv3fXDe% zUmWBDd9nipj6vj?2wDstC;-hJ`kzUOY{!}{|B%n5WQi-(NzR97h|a4IUib&>3Bo@x z??{2`n3t|WYj|WV;BY|v0keSoZ$1cnj=6q7f*82_z#0sB{}}E+KkbYfGpe|_SmcU` zX!-KxGiT2D`s=S+wrbI!QT;`W7BQv>fCB=8gIytj!1NQu|Er&~e*K0C6DIKLYd$lR zht;dsPMkO?84S*f6)RV)SRpjo^RGq%$iFibkN@{CLUQ3>V*KY7$*8|jbVQYrs`e*) zXAv#OZiL~#CXB1cv_D}6+hN*=VVP{h%*@PLhZ$F4v|pH+!C_j3sQ=8#eV(Uljnto7 zeS3V*Nu7S+c27@9^;bz#DhQVPT}~5A%pfcQwArT?vSY`Fp7PIAzq9uw{Nq&j{C>N< zK$)7-1WC~-qy90n@2Y>V$9F1GsRTwc#mni{&157a`udQ^aHt^^tz|JXUA7{yj5x${ zxm%K4mvt%%7cgd^N0vuzok6*YbYw265zr&EZ2r0)S(1|vGix5aghF<+Zg8F8xnGU? zOmz|?(5nYgIP9q<@@af+)VSy$b({4U31Z*8`(#v ziztfhBs7APRd8D!V-x3bO)J9$mXVAI4~`YXd|7wW_oVZ-TCLWxw;OK1@|Car`(OVo z42tR+x5=P{^6cg5z@Dw37f|maYMAFGu=pAWY*Cr`+UMzIcG{_Jeop(JO6eiar|tB= z{pH=v9Q%-R+f}a-l-s>wq!g0WTm}bpf-6kn$zS~9(T{%Q{qO&PBS(&I;QiIFer4SN z;N;1Zr+;=umT0&vbN4eZ^+Vg?t<*;J#E&uWZ1Y+FY13PrcA8-O0UJ0jkafgPx=o7F2r8B&oep5wW($TSANzp$Zx<@jBedr3-qx*2U~U)3SU)+#;nHI~{21fh_v3J5>^ze_ z&ne5dU)ERy{&&5x)92W`FJSlW59OB(jsSKpR+Q zI-UP@zs`*jiZ! z*=mIUWDP2p0HX8EWz;XP(!Pb`kl|Soz<;=)_uq0ZBN+9c%6CAS>*e|9*I-eBgtweeG-Q`|Pj-_iaR_S$(}k(!>J*&Z(rB zE2WV;smtUA`1cb0AO872Jmh3XKwVT?qn6Y-1GQzdG}UY~%B%6g`mN>e{D6N_w{gQg zqrTdp^UH|WrtGK@%<75rHX?cEXnhW;j7(&-`Ce8t9pEt2)7Bct$u+5FeTdls*D+R@ zha3+>1!H_Cm(2sQb=o#Y0X?e8dULa^3xhp4p(qMNa+VR>UI#gOz7AFio1*1RT|&FI zbp!hBkk73YQ90D{0rM|R^VQ`)Xj=!@qhYqX{AZ4g>=1bWqGJT>5x~+;F*cO>Z z7P1u`b?xECD3WWMt(#)3XX8J+n(A?LGI;;2GV)N^G{8kSmC+n+1)-I zz?5SQ2nipm0i47As!JtV@*V&a`A6#=#Mq27qK@VqpZ#S6llK_R^U~gbST?YJNMLuA zPDMQck_)&$Q-}WA`@cQ|c=3y0_?zGSM$#3oaD}_x^=_|xIId&UrohO_yp zK1Ycwr|!5WEayL;pYi~>y!eqQmC-z71e;g*+0qb;riCv^d=9%d7`e%;i70oh0~~^= z*dor;I$Y5VF=hvb3dZ=R#~$+cuOcGh0mlB%Wa|XX!?T^KSwqQ-8I3Tq#6j?@QW zdp8`E4CskIdw|dyMt`{N4Q+jc{@p zFgA>?7yUJ+vs6c5&-up4g+-U*q~BQg@h`PJ)9XkA@1I*n9S9-VF4il9}$l32Zvr`WLFLXS0lkUuxWfu!&twJP=*lCO5u%yxAlrE`VW`%{`0*- z{g7a=3(@*4*pWxUL-*&9zucey!sj3P$cMl2jj#X9U;ZNLs#m@0eeQF=m%ilX$BrFK zu)0(CEj=KaSOUn*Vcp-r7Dx$fEXvpX{QL0o-#`D+%>V8w=5GRQO-~7rSXG`cEFLqr z=(039B|H@E{I?IFzcXffHOr`HjQtG>H?%EMqhnFY=egTMX(po-h~+F67cu|>IX+0) z1Png|h>`SU1B~UxQ}^P%Y%Lpa1!Y>k(UX=d^VkV_-cxLohbECw(kCMkJ%djj@9(0hD*% zS9F!i$)9&|L2?TY-M255-Q_J;UIizuY zmJJSNt^SPXG!NjSi!RFm_{Tr~{=*;sD4oN--9g2v$|JtVqSp=TC0SZ51E4G<865bL z=>7xE09cLkAK>7*17p21vPr|$APsCMHPAMjXD?j&r??;B!3VBH>w`w?P0ibBwWRG+ z`|p4M`vV{Nz(XJU;17N1ga7%@e#jJ@I#;Xyysu%I@jI2`3!X5@(h4DcDuW3 z8=ZU3S+vnad($D_J;C@r0r=_X-*2s9<8Zp@?KKBJUgd?}Sc}4E^F3AxBGJ^Np z8vp_VjbVYhqx+^E&}>~Mqt96MKFQq3IE=Qo6j8ov=|*bdK(7B z$b{_XHCNGV>$o1}bCrx?`noyHww@k8{wXm!di1t!Yi|1(r2sM=sEj~!>F#Fu3IAn` zNdfoyk$QX zwl3xok(x!c+AgAzCaA}ce?|(jJtlA^vzU9ro{M9dI)AuNL<-Yyh?|wU>2S9%_ zBJ)l(`Fq^*9%t{FoquEg`{!Yy`RDvc2me!j`qrWp`>v>-YEC=(517KXd4NZn?VT>-$nkAf+BwCa6tq%0qqa@PH$-%Qet1xZuJ)@4uvPed}ArIRqI1 zt)=AbVq`riQ3W#9s4CM80AA*+J?g(0Z4EN^QjDz_|6E2zj0t0GO>UM^wx!K-27d-#zPk-7^fBKWXd$+jx zEnfJ-7vJiZw`y_UdN=M{UIJ)=^h5GaOKyITEc;;ix8%+OPE7KP&Ohfry7@1#Lcr&~ zJtU@F@9NFaTALt=r>C{=|1_5HWRpq`2{MNx z=u?HVMLij0xn5Ek<$Tg!Zez1pmF8EFqUn;TQR1v9ks%cndm{Y zraoKeh)OzVzaCk(V+HUKN^vDy|)5(n=2T#D5%lr$|!Re8--;uOkMwZ-u zz$0q_jrH1_-g{pO$ITyej5Th(!_o%N^T-G{fCcw^Y=tFf1|8VCo$?O~1Gg+l-M=vU zH?K^aLO!KQqkHdu5e*8>1hMi#uO!iazu~b`HcWJ&bcq!LHTTQT&Vb4|j6g>~-H?L1x7Jm+14y_t?=UfPdWhTiA)D0L&p}RkP?yJbpHR(e{}N?_?w&B zV^ESMi#OK8hF&ldy!;+;lHYrj#G|Aq@t;uk1CI+SrZfa&y!FedH6jM^qi9|X$`{}L zj7(eZG|4SE$h)+n)WBFn%BBZ4W)INI!HY#EV^^AN6=P->^Hccws*4ITpJ$dl@Twp-XE>sZ|e>d z|BKr?zIpA#p=>qny>~C7q8(6;oLsUT$U_Ew$mPT1oZ6ka7himd{zpIj;Sc}*_kYyq z+$gw;^ItF8ZP52(>Vb55j4*<}{(JHUp}snfBa()d-#Lj_3n3m{TpBV@JBwh znETd}LvD6IPdosKp3eTf<9|L|F5HKC5zct%Zz7oX!lp1 zTdt1wC=gMaYF$QAbf8G8G%Ny9lNtLPK2g@l05Im#Z}T>c?Vs9|qAD*GJ=$*Ti2tFg zN6yB$UB!{HlUQ>?5nGq=-=#);xofl)(`4jPTW2yz742|xsr-y^2gZ;LKn8?V2M{E> z>Z*i8y5@3QXRsdiL@2jn%<95e$B+3%^eETdR6s-DdNlAzf7%eZ%zwfvY&f}HkF2?5 z#3SO{y|&E;T}VgL>rCRm%-hViZpMbdWgME|P-A=V*+k^oAhuP}Ngmhd=niB=@bG`1k&xH%rd=pFIP>{dN7ypDmvdmcN%f z);%BpZscEc@V~(PBmQF^{zEg6XUhQKAN5EIwhe0J&EN=>eok-QjlrW8RbP zd?Hu|0I&7mJ4O<92ucHylsA$&3W|~s;0&6W>T#kCcxwhatxpaXMHgwhsGt`pZ6d*oq7%0Ebmu2M1}A z$7@&`sBQ=(&)|UL`>r{R-6#%?YW)*iN7tj})>B0{#`lpJqA{yorQCB~Y zQ-_X&^MjLo&Mk%d^)y{~cvSwCuYBcm&N+AQnQwjTo3=f8JYpTxrsw>VgR3fTCuRWT z7x1xk{6ua~Sc(vc$_M_XZW)2P|1_)MzwDhsZWb{Ng>6=F|Fb~105_uhJQhe*)Xq!3 zWK8;lux5eK{2eFHu@lF(`L3?1qIJug{f6NUW&qTC|M}SvoRv)7f0qHkO_L70KXt@? zE6BeL56V!-e|ZK#@RBclwyHJ?{I~DV|9}1u(*D=FQIRHW3R=#k>YcGNmHhUZY^9L_ zC>~?3M_gV?+cobFdlZ^Dio^d_&{eHyEw!0YClx z?_6qmz9%$}#hbbg;mF76bsds1pzVnKsK=;&8F{>ruGp7Dfp@?lJxJTSntylyo$-E& z@6k)G?!F%5_6T5f&Ylt+jXjMa9au-e=$6=t@~;{HLOc{S0XE8rA;Yg=axF?d9*zI_XZTO>&SN?Djrc53KiZr` zT4gqAR?{{MBh5kGG~n(c(gT{*?ePDG)=waDvk4n9wEGx&dDv?X3_zlW3Wp?lA>#|* z3nH(b3NQ+3Jwi6*>S&Lr&|m~`$ANu|GG@hrfJGuWBJ?J*ILsKO`54FR=pvfTh#^d1 z8)>_K5{9}CEfKzqJn6zYu-!;JrgA8t>)0Rz6!KJKy1D`VQxPG%pjdTR*+tv4y6cW$ zX0t3ts<)@HBV*`Wg!nq*`kWixGJBK}n(68`>l*?0Jk$|3m*)zMgyry1G<{zPXk#6n z=bwK|3P9|H(Tr>qX9F<3iuT?$5CLavKoJApf8fOv@f%o3J5c9y*rd?XMdS1H&!?v^ zU%q_){{3738(1m?IDbWT9luyAA~Qx+TtZ}o3NEn_|HL=7*Z6lmsD%w6gA$O#$v%Mx z1y0`yKv`Gr|853=B7jLGq;}H%spIZj4fq%1U%>rb(*&50?BciBX`Tg+^?XPE;~(HZ z%lJR){f`UQF!eK-3JnfyFN(WqK!InpH(U8nkGB(qwsKDJrwwoT|^nnnTneMEyVaN%J$i z!2Jse%887@JKV7=bpOSis%;!$Eg^r4pP7y!mRg=3;+a{-^`g^gUlEsW&wy` z9kt9<1G)}?G%*bQk4I%R=yF*PxK#g)0b5RO)>IAy=`=FPKq+bKx>{Fx*D)3{4$@Y1 zs+@x!8@KIIpN(X6wW02}h8z}TTy`Dx zGNx^emgJDt4JlRV0oKuj^6xxbfZMh5K82fCaLIZ<13(23vHR}eBDUz$>vW5`jB!yp z()eCRBrv6^sY$w9!lj9bv$?D_WkL=A?gEMHz29`Nif!+3H{Yd~XWbZSQ|s-FWHLVh zqs;(2E@K54^=1v0_u-dA;I~Iyt2&#lI0(_!!Kp=3i%wxub!&b`yWn@g^Oz^#VJL&$^1GsNR z>;8MQDa(IB382am`@hpak-mEQMh?b#{^PIXKkN9fpj>{-u#YHb>DZ$ta-9nQaB0|j z;x*-YKY-3}468r-$Ha#e^54(fMiXF^f<1mtVB~-6X$vF*cJ4-v#Ue&m{47G`=dHcM z2-aEV(U%~Z+~7+#xPBfMWh^o;#DuFnqwCsbX&}=8*)((R9<~-*#w;Zt$hCUZ+4&z{_CH$1Xy~x!J^Xl| zgO1GKT%)YZ0ARhTUJmD^{SCOwKIi__!?g_j0H76NeA1 zBrZ*xY%x$>SA~y4e=vI0Rj6YWgbeENk}ruXdS*q3Ykn$8 z_vOM@cTjZ|RX!55^rG4Q(u zJ4fFV>mDBOjO&<-i>pA??;HK&_%X`7b@Jz&9v<#6O+3OVgo+JhyZy|!LpbeF4|ew7 z{XZ~D28S8A5KJKfp^o_kvdm9g?Q^*QRMO_d5RMW?#mV#Qqb@MUHQC&L1D|s>lHq z$~h~4N-*BFAPjxUf89@xqZCpyK;n?!bX}2V|0(Kw6aL8{U!jeRm%2hdM`#34a zN@kWN%R3BhWFQA9b6L48fv5Mwz!zehs5KUMZ!D4dhw&v#cGuGg7w)BM6MP+mE=5AMs}L55&u1 z)NzM_PJWbIeq>s=cQY}xO$?JJ7Gr|>QS}&C;tc>r=iEMXU~VRwn{)_hd`W8dv>X%6 zMCP)qb+WxjH8(zknOCa_GsPGy_2o(XE*+!#znVS!-}pxrBhAMA82R7cvt-l9xPqB- z&U)D&d#N99sbO8uUh?()cVCQpX-dG5^`B+@^dEn6^Z1srB(bwG0Sg`9PQ9`oCJx%B z9lN^0CVA(9ye~D7{7NEw{eAnxZtjP6$$wAdCwbSR+cpdXPy7F0b(}ar{79=CuuVXq z#niD>vKk|bp%_$y){zuV@zII@6yhH;|KBtEFE07~{Lr7X-nYG8iuQze5|3*#3B$Pi z`^A$64;6eKDOW0->K^6n%Rf@uwmW317F#uD<@rJ#+N&`V9HS6O;@}!Wn$D9Szgh}L z8)PbrK|e(G9twJ-_fRH?XTfe|*ct%?Uv+?0*#ujD1YJW)wU}&o6{BM7?EL{B_oo<| zOahJhooyY-1ld@l+?x{s1J({KjT0;W#Q|1cJFsorU%2j0241(#-ou2J94a-p1W55E zb!9H(|62l#8asQ9Ehn|DBS6d6^*)c{f~fB^034D3ZQabfvnECavfnex0Ny5ts7U(T zZ-bHFuREk3)fDGHBf-c2j$cHBhnQbi^FV-IoYxGnhaTl-x-==A*S$oHU~a4-ke@?T zwp|)5k9FBfU@p=wDFMwb1R=CH0hlw{XrGH_;!9?NaF1pr;%IxAlJ`P4{qpNp$h5Aj znmAH^kz+(Q(RZI{k$zcH<8ELike;Yl)4Fbu>GSiW=pa){UO(SC51_3_2vBmbFZ?6f z^8iZEA5^5xL@8@j(I!CK{UN}&hW`2W3xhX?Z$Iw$iskkNz>EEz_I-d08M)SzMnm{@$qo-iwj(w=t0PctV0a87huZ1fo61{TW79 z5P!#s3Fwhw2Mn1pV*(vzY>_ak7uSO&%h6I-NEA}kNYEn+?-;apS(wd(Hix&*=Sf z829WBhtYqpM{)iQpW&?-9Z`>@^YovK*y6KwH`1&CD8C5v3nhpQKSa;Y_5@V{7%C+s zX-T~KDgbV`n+qeO0$?Y=En|e{JEHu=D*%+prG>kWQC!Au^UZZ3O+p;l8=nWzOeRBw z{BuOiq&nM<>7N&6O~3H%L5O%~_?Fo2AMPQ*%eHC(Ydb(+2ds@}n$Ibej5m(7_Yn-) zGyYRY$3^Eq#rfASD$=2H|7-S_b=99UU9XjUE)1*rv3CH_b88(AERqD&Q9*+JNtU7S z%l|Z8Ak+0ad55iO={o%}5=$ThAUV1b$YtyW=^CS}2cv5YB0V!gZSSLJ{S$yT1Xy(h z?NV{Sj1@EAQU@r zxlDTU$aT7MkFp?#`yf3kxbTv}pp|Y2x*0ofV7F3@Do@9@b=}S*T@d3KvBKzJ{7=&) z>2txTHV&afm+z6oLWJtseKU+M9=~py4yi|Yksi^(zu_~qF`7IW*|x5i^NLP-#FidO z!$`Y{7}_F+@(|P35&LwxoKvbQ08Agrwm)o#D+sm|ILKz8Gb=uDrmdQCfR)WPq$4JC zk!{`Y#YVt=PbT$vk)22+UrO1P&HAw7Xd+#F4e7>cU6+&~wD(ae0BREUwyfz#DN+IO z_*4Fq6fQp5k});>Ny8QTE`9%XBHt6f{Y~4tl$H7gz&!h$)P%+rMzY>G{v3T*lyY75 z!k~z8^f@~JsWbmD_&;9fpL!dXdDfpZ4&!6MODNrfO>~y9MJfsERC0IakT1!p7ylr~ zafD2#)5&PeX_R#<#Mfd}Q$LWD_*fFWWJ1SMJu-X!|5>2712QTRJtdrR zJ<2T^t4;`xCkIC3a7sXh62OG?H2Wh{I206H=WuqdYIV~y;@@YVE?NHAQCZfq1DPDh z0ibN_hUXs-Xv-lX5E*|-VSa$y5X6mLB=d9}PelVHj9&eY{V~cFMn~hH1*3|%i&14F z!iO$jFNdzS4+OsxMsM`%bUK=?qr|`9m&$q+w{^XoS9H=N2zsRWb?hTzXp2~`Aws1` zCO>6yaS~clrQE)lA)DQsgpBMziyDF2Rxr14-@N;ykWrqMjPh!K_5$wb^BFRYlY0H_k_GTA=j zvT;9N1WyWo+6iF?i~bkl%fq)s5#|MSRsgK)wys;WG_QaE{dj*so&W!y|ASG@{<c?1d&UR>LEokB|N=6u=Gf<12FAC{k}07d;CP^VqhfLy5=Bd zMU4boN8ueQjL~sgyFF5ET{CV&#SSdXZ8!}cjE3LsXh`RIB-y%by<|MvQJy2)>Ym2# z%a;f9ybOa!kBY5((RuV9jE=?synGcS5br&7Pt^0l$&5PI81^l}ISC1IP$muh* zFzTpBIj%=qWJUeH`zIo{Eb}l7p6v2zDusi>AaSi?gS57}m>(fX%0~(Wd|KYF6EO_6N$kW`LYYQyE3}5pI3cp1vnI30AUbE~WIsukWmyJfOw_Nq7`X%PTsa`TBNPblL?7IIpDM*iytOs(SL;<(isBUs6ZU>lOp72(?rC@3qjE*-*1Y}Mjb^jGG zNO-4M`w`9yWJyDt`IK#4>yG`tw41nbnx=nmJ&KQ!0x)Va|JuR`Gj{DZW0XYnjIi=S zs)if_4_`MOqtwReAJik=06hZMQ%sL=j1uP<>pHK32G!If1?UkLn5!>h$`4U#i5M$I ztJON$N!r7%Rx7Qs1VOyWwEL{naO)4|ni0u?U_8JosU4h*C6moRSb%)JUUj=|-(^d( zFzPTyg6fkqfsCp2VG52Bc)rAq(J6SK8vyY!Qr;T<%OzvfQ801io0}VVxt>y%Rpdqs zetRHV^q+uMK*F3N_r*5(|7{sV!=L01-;!3BC5rb+^q0c7_W$2(if+3Td;rkv_C9?0 zu-m@$-#5@9C;Zy^ur2-svi3X8I=sw|&A&z+aibV#KH(g4O0UECR{;MqpZfMi{|_18 z?Y1nyyUtRxh8;{)t>u)z;!vi~lUkicP`O z9)uBh$+8^IsH*=Ua2$+m+1PV_$H2ReF?X=RkzNsX*ct zMIqTitZ8W90FdzDxQoTix2A&Pxz6oBLt%?m*>I!bN^8uHS*iK5*?$s&myI* z-FBF@6BOi}^3Ldn(*p<7z$1|H^t4A0q`|)MWlEpW%72F&M$duG{T0tgL{Tt-$4wWH~Hr z$YD^HZZk2;iekglu3$14ZElSo=_cusyq;>e9u-A6Mr`Xc=NMx+ukrP$bn6kGjUGY7 z$S-2b{GMgG(`TTQKEvC$Zyr2&uy@7~ER@e4?(r3-P?!gaWx_L{1uTMZqe_V>NWFEZ zou`KnAHI3>rrY(z8Ep0J_j}ys!Gnjwg(9FN5tMO{k5QIk86z8Yw~R?x#KXwFw=x*L zeG?c9>hZ(Q+wIm}uBVj8QU;YOlI5R&ixvF`NR#rstGDN0%JhdH2Zq9*v2+se1{%?TlrJ)&cXlrnm>nog%m<9-TpZw9e-nF($4;@|5*AD1qrZqB{W9y zjN29Ua!`Z=|}|(2Wh ze&@*Y3V8{Bv{ zn{Ev`<1O+!Eyn@y62azox@_*hd<)$CknJ9R0{}GJ2%_d zd)EcPet$3;jrj!NMV@ml_0z|`Iy~5||0rdnN$GG$!Ss@yjD3gTr)5Th+|`R0IY<9Tqe*`-RDr}@hQsl4d4DmVfByVg%XDbC ziRpkBaRIO!VF7*jLZS^};SjijV90(aoPR!AUo7U!`}YT<@tGKnDvajydtAm;zH=LX zH5;FQoAAZ{aF-ATBs^{a&qKv8V>DkZc#?;VQU4r_7+i*UK3{MdQxGC}ZV_h%Y-8UH zaO;s|2THdy8m>nr_&FaxePlDWTrPRC`-6U{pTb?(*m3s-WAy3s5i-&n(&2W1!rIvK zEI(9>TRYI>3Xkm&BC8)hez;yNR?8L7cCX)4fy7<7BX>9J(I@wM1b|d3LI)Y%COjgd z;~Ts1Hb##sjMjrePe`{UH%8o%G2##T^f}IY6u(W0V$?|fjn8nsSgqEB{vk$$UZ!D; zxO;`sr_WIrUBXI`;j)S!bTtp7#WgF!F-8i;sBiRW&KNaSkEo$~qz`=t?ZC*`x_TI` zc|G!B6w#hjeLcd;$ALAzGjSmQg;^IZNoqS&K}N|-R}SYk>EJ^aP0I| z8dxr~AtcA%SsLk0RTR~OGR1VCPH?1GF!V#T__p>VIK*)tPN#eQ{vb^=sc^h@&ytO{ z2x0J5h){0+n`^#TuPjWmCza4D}U*0e|N#cJ0We`kV*9A!18nposLT(TQ z{eC}96Lt6S+nZSEZ>rN^_>7iov2Q|==5KmOojRMLK1R3dEHHZc5*P)@LyqG#wtRy_ zJP#cm9YYT8YPHg2Boy+TztBYYTR0jOpzF8(mmAi_;)gnX*{0^tQk&d$|E>SB`0F&^ zax3V^PoGYXjuArKGGOHZfH&XYMaYYjcyAgIybpHO_~vH5n6sQgE7#S&G_T{&D+t*~ zsq0lkuF-E&yHm7PYZuIe+N112KHJ=X;|}+KzbgM!rm~`7Ia@5}&@92(MF@t58pk&X z`BnJ8)f*fLhlez5wVK1>5aa#Rv$HHq8Ds19x*-o{iVD{z*#Hg8NOQ#?WS5hoZ$0p> zzH9~%8q4z}P0!CS2qEL~sNHVSkh*|q=aC(wo!v*s^Wh|%(Eww7b}BK_FUB+vY50tm zsf+SRXbs86�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�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%0AJfA;(sssn*c(0g0oL+_s-Kfy> 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
    2{s-WzJ<*!w-FcW{)KgJKGk=YkLQ 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

    viwgxmdxV1CJI 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 WlpkdlMT!_Rd6JVO#-ZAtaN{3aPCrfn diff --git a/fastlane/metadata/android/en-US/images/sevenInchScreenshots/7.png b/fastlane/metadata/android/en-US/images/sevenInchScreenshots/7.png index 0618ae0b633e54e8e31b77f60ee9fb851aae9728..132736514749124f9286ab74a57f00fc0acdcb55 100644 GIT binary patch literal 387416 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

    (8oJ+8Vokkte%SVr735YFs7!Rfg-)40el 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Μ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 UIeK`NxTr?~IZ64C)&_IGNRa8iI<9 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

    eFS9)Cc0;70_Sn*Zos^0+zALF>z10mZ6JGef3 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

    KDRy0;t6|NRgn;ZQR|tGv6@c;a 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­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 FKLAe%;voP4 literal 388078 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 z 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

    QkKfPd!aQ@~y8Up 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

    );oKl6MY=aqIYxj|N9+zxgN5e}0cT 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 z%0A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≠DUbLm6e%ul0*}G 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

    oXjAr7HbWUodZ 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

  • hZnN>*! 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

    WR;v&MMq0+H3tWGz3y?nNeGw;9X7_y@K@2E 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

    eskfo{+pV^73S;sQ{|D(0e+QDR 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�j98Y|u+j`>Y9;B0;uRePQfma=dD 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

    9kyddVGYn;J~;_}7c#io;M7H{ey!JR`_LWKi+q& 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 Na9Oi7^B2L1e*vP}os9qh diff --git a/flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index d05404d3af59e68e46ab3009c3684052323da15a..116904a84fcde25a6cef1e3e4429de37dd5d12d0 100644 GIT binary patch delta 3478 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 Eg8klx0RR91 literal 7492 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 VBOAhx`d$D4002ovPDHLkV1k&Ww9)_o literal 6161 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 diff --git a/flutter/android/app/src/main/res/mipmap-ldpi/ic_launcher.png b/flutter/android/app/src/main/res/mipmap-ldpi/ic_launcher.png index 814ba4549c2ca6e3d5966a123e66c8918a85c505..60e95748c9b3e0e851ffaa9e3d1a449d136d03dc 100644 GIT binary patch delta 1507 zcmV<91swW=4fG3;BYy?ENkl^sghX>Ta*3k&bxBFd z%O8IDp&ce1Ax>CUR`#l{ny2!C-Pksj0(43lbFC~h#Y)1_e0O%W|F`H_C!i?oX#G{5G>pu7Nf)JQ0j zbario2!()pMFipiO=)|%ij3p+czK%#iR-H&Y^;K?*$rV^C4`+7NZeh4myWrRcC8j$ zYJzbAr8)uG)0FKq(D`%_!s0pz%SbC~A*`-}u#TWMaDONlgdGG%P{Q7FJbI)Yx@AR5 zS+AH=mgO2WXK+FOg1t!~`A%Z2VY{cy_$hv1QlA1EZ% zu&^axhkr1o9>O#Nnh}P2Y?&XKheTxg4QQtA1vJkWb)2kIAsHrHa}iXJ9J=R71$NX* zP;I-=29#)%Gf=VLMEX_*!X%NPLP0z3_9H~_(ec_rCc9-Mj<1Xx~ zmFz`r2TFDX;^7~7L`UK%8N!$#gG!#?mmDhet>N8AmOwt`haOII zY!ULyjcC42hcH}$FiL_jR>E5gCH}Bz#IAj9PmRqID$s(=liWS_l(|I@-Km#>`Qjj=8!53@e06OABg3UbB z&Uv{VI7G<7seQ7A<{J$N{RwK23Sp>$Wtfp2yO@yLSPd!GjzOBMSW$#Iw2kFcFMkX`mjR0b?`*=gXO zVH%Q$sd#OMijP*Q_+X8Km*+`HBuBr!_dP(TgtjN_XQSAhI`ChG+GVSWr$+vB_a%%_ z$fu;RqmLs^5;+t*CHz50mz!QA!hZqH!5AsGjzB7<=b?cnt0|$6!FM0?DKbyy=)BEv zsP;!BcAhfrXKd#ha!#3(w%@RjzTCu%qeGU!BE`*^&Vk}f z8Gi^b+#-*K?O7HE?KRPY%rl)FJ#DQYaU~Gt>t^K z_uh^OXC`atoMVvLn{z@;kRKD=t=_wMixQ77D-jC0dZu3JPahL_RO`-7c;x^9002ov JPDHLkV1mqt+Xnyu delta 1651 zcmV-(28{Xi3xf@iBYyx1a7bBm000ie000ie0hKEb8vp}! zg;WXdkdRQqZ-v^V(5eb<8YS`Or`y!Y#`gMey*uZ8T+GgTc7Hvyv5k0deD-+eocDX* zbH4MP5g-RRHefn_ry=>wR@z&}PF~sx8MD>4(5_HC(2khnR9zDvLGiSz& z#o{4j%&3TL8eLU833qL)Y81H$s@fXIT6?=vseE|i#EJ6Rvu9hu#|iWO$*nbvOb)jCb|6z7^_GgC<9V*5Belns$q42opdB=<~dz&v2s}#4>`nt8V zAR-QKp!Xf4j=-m5UOS>bzed;`?^*BIBR+B{V;OGMDC8{4Ns4I z{NV9k9vU+Hx9&Jx^y&2spVlltxqrUI8@E^Z<-uKibyuE%P0F-f$|M9( zURHiPW1BWfM5fnp{6LPE9}U<)=wT8;`$m`=@R{rfktijcy0*+)pRG}8INtnpg@gS8 z`|@7qoF?->z|39cLfL_ph?Ena-sAJ~fq=Ozu4fT zm48NSNpvh~)0I%@ly`0^H|HfHWWiU%50B(|u#g?$#^}QCyhpt*5E`(C8_SM&=Ieyb zMB1^aT~|UYb)j4Z*HXtYRWM8q30qj3h`?l@7unNP*I6jn94l5+cUV_KYoStIqp6M{ zPM9iq_-Q_6z&FBVpN}|Nwl6l6RhLS}K!2k2AT2q@0}-hrJE@SIfHl$H$3($tYEo=j zmP#h?Lm?*#xrM702)9A1;goBO4z;w7??KOy_p(*av}_+M}`CZCXcLLmU*~Ne;%G1k1QJ-5MFuGaCp>2DbkUulvB98VEM&Noxgoz zH`bvOo+t)P7yL9b?J{LyY)E+Ni||0d@SVfL$uApv16XY+Z{KuWt~eTY6*5Mg3Sd2)~N z!nDV+DSy+QEMq|%z-`I0cn}fcnMdK^Zs9+l!G)VpUWRHN)EElAu%{q=Xh=0vYwfb{`}e)I ziU^)jhVoEstC!nr^5g|G*#}^)U9Qz?cjNi#v}|r}?t@$|_vd^*|BNxFkeoa#k?j=L z+U2FCrN37yl@G|W?DXl=rQ^qs|8!_*=v`yXzRoCP71D6Ot8)^nN^GOixOwm1z4PbJ zox4oJvbL`ufHTHWEEX9V8Nv5`eBZ}fOArJYV+g|#+P`WzBDzGTupuGS9002ovPDHLkV1hAOH#7hM diff --git a/flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index f16b3d61d9817e58e916df8748a8b833981e6b23..7dca207d887ba154276c43c4a65cfe59df9b10f2 100644 GIT binary patch delta 1974 zcmV;n2TAy!5yKCVBYy{qNklvs->C=SKU+5~2=M#b+x#9t?Dg(h{ z20V;-81lFrOas?mdu`}rANyG7sBc%WFp|Xr zN^PftV`)P?R<0!i2ou29Tve=yf$-}E(5)P#tc7W(6#Qss61UZMfmL>Z)wF}vQW_#) zjg%DDAvs{RjA z*JeX3w;@8SCET$wf^Y7RqAr@f^agtGKiFg9AG_o7ta7_dW;+Ok-a5`g@IfZ-} z`12+OH&2nlCM0Z#DFPyIA}}|GyO(z3>zfn!U6YL8wj}Y*?Qz`K*o7cL1nb-It}Rh9 zc+>IiTbx6ulw%-R+(15}+SHyj!A7UR#t^``B!AfWWZuNBbK>~a3K?tLbfgXUKr$xB z)|iI5=d);6%-;J2#3_P#|E^BlzDdH$m_i^W0fGhT+cowA^qu!oisM^#D%i-h4KY?g zZu{puZh^T?ARv8h^Ysa4g2bUL=5*D6eD*!Zva5#0)Ze+5L@J z*mpH_f>k^AiAH;)JDx5qv1J?JoT|@J3+y=!?0L#diZBrzlEt@bG~ccCSGL6waQ9BA z>r`M3f&o!g7VIa0XEYn)1=~buh=Sj*(tQK`vMEWMoqNY#5Xr#su0q~Bu>jad0Dn*E zU{C9L6W6?=;*To_0bsX`&=Pm=L~XdUBzprCF(4LO^S;hkHFCJ^Srd#PoF)P^m4CLLx5_D_VtO=$HPJhX25>=FzKgxJrVEN$&}REG zAo8Py9HGZ7Fo%hXXLZb_^`Tn>2WX9%_(-Gd>S9B5miWPrgzNdf42V`@C&!)762K$2 ziHfHTyl=9Bj#Li33EGNOxhpC{tN1WhOWZd<0=xdy<;Q| z{t;(&G8{X$n(v+LE;cK=SlfgwOwe=^XY3x8gBSm-K{p_x7&+Yh1b-I`n?2&(CnyEI zlj7`R1%xm`5P#gL;DE<@!iNFxEI-WgojDwLJVVu~aG&VUgg6x4F@`$XI)%>IW&A4P z(|{|QnS+$zn6!iAd-E;a`iyJGCJ0rWC+JWlPIi;`7zoQ2y_R1*fO7jAMYk7r-4P3m z_FGs;siEsfW4yn<$$wRCd{-e!k_J+R^5L8pT(`I=u_AQ6s73dE#jDVvLx;Qp=zn7$ z(lqTrxdsG?kH?E8l}a6IZEgLOCqPR}%Nr7j#9}W4mpW~2ZPgn#Y=Q0Zz#CYE^7C7NT9{ctJKLL5weQELp0000007*qo IM6N<$f+SwN@Bjb+ delta 2196 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 LNkvXXu0mjfQ!wmI literal 4348 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 N002ovPDHLkV1gP@wZ8xW delta 702 zcmV;v0zv)%0?P%E8Gi-<007{3J@^0s0+LBYK~zXfwUtXqRZ$d%J!Pdfi-@42o0d>U zAk-)#XcW;vgizrQdd!*x5@eY~VS=Ee2%3b1L=rVna1=BUCxu`}C_PMqq9__QFrm18 zzw9Ne<9XaWaKq2tcRl`po&8uls#@a_rSX?arSgTtT|9DfBnK?!^ZFTqnV3BE>A z^f!qsQ2_F4g0F%O&y&ELkAtl0vz=wpxfIXD{~(KI&QfGfo6i# z^y*yjWAfWf;0%rtph|2UBS1;H1A#jPU3B?6rsv2XHi2Cjo&)tFjc%NMxy%GWeu|$l z;O~%@Tz?nsoo^MFF0Lj`m|{@N0<1bz~xE~q2?H#f4rK<{z^=&?Ty^vG-jBK-oUfja05 k@G-6HrV3QBG?}6Q06k0K88@7{ssI2007*qoM6N<$g2~=PK>z>% diff --git a/flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index d9bd8fdfe4d6dfec7a04365db0cbcdd6c5bdc8b0..33a40ed83a4bfec03fbfbeb34bc9a49618c430cb 100644 GIT binary patch literal 4237 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 literal 4827 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 BRjdF2 diff --git a/flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png index f8ced45f132b86c5080b55773415e84325b8130b..e083cecf1ee4d0078f55a963a2d92a6d5ac09893 100644 GIT binary patch literal 7659 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 literal 9515 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 W6d=RhZHEv50000_H2 z@|`{C3!}(Q`py$})E@o|-PZBG5?|QTOreftJz`X;Nza%!lz+3KL3KuK8_H;Ljv=-F zv{q^L_nK1gRIQXFwy};7B1ikxu=~vzQZ_IqH|$0&p@=p|1BR`ihV4F* z`_=B{w~dqa0)Kc*TQl52uFp21kankQ+A%~rJRo;^`88%EeVQKA5#t4YCG}>g;7qBn zEE40@jAaX8dNM!g(c9(-70m5@sWW4|hH*`U)(;hIo7FHX)?h(jX9xY%sxRjEQs0SN zU8hGi_1Yj5(&<{cXLN?h?wXF&5enH^zucb9LS4QC(C4U7NS9sp$$gnURyH>dIJ&g= z+FW5kZhy=UA*IIy2K?^mq>442WmPkW2Ce3@r7z{+WwCr@E}L2<`Tv~YFZ6oF<@U6$ z<*aBkN4VX)M&)48YNbDg)6^R+{EKLDx_dR-D~38|v8^wZ_|RtYyIw`RT|2$tN0Z2n_|`M_&=#gckELwpd@uXb oFUAb}$!i{TnsqIvGyL!U3l9Z_KpThNF8}}l07*qoM6N<$f)bEsvH$=8 delta 1517 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 U104uxO#lD@07*qoM6N<$f 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 diff --git a/flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png index 0f46fafafe5f9940ffaf65caf7be1cdb65400521..b9975190c88ebbc04936fd22f5c67452cf14e376 100644 GIT binary patch literal 22530 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 literal 13879 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 P6AX}(Qj)9@Hwpb8pbK#N diff --git a/flutter/android/app/src/main/res/mipmap-xxhdpi/ic_stat_logo.png b/flutter/android/app/src/main/res/mipmap-xxhdpi/ic_stat_logo.png index 2cbe6eaf1e94d22a655131ef5ddae7ab5917fc55..f7b57b329186afedcdd97d364871067ef22fb483 100644 GIT binary patch delta 872 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 T;z9%U00000NkvXXu0mjfn8wj? diff --git a/flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index a8d80d2a25d2a667ff2b70ddf7d65e39ebd5e34a..463d20eeb7b6141d7fd5aee6855625ec265fc360 100644 GIT binary patch literal 7409 zcmZWucRbbq_rI=tjmy1VTqE-~a0z9`&A41UKbQW?q0&5mnbBitx6TqEmR6?L;B z8OgY^MTjC~WoCVEpU3aN-yiSsc&+Doo%K5Byy9>sdQb>I1ONa)4fM6m>ED)r4+|6h zZ9eJ23;+mH4YV~a0~l7)2ux8JgwBKQ*(04OO#XhiG?gbtLcaKIFs%QIQj5~yX%hv$ z2D$eK<7&H}^I{nSvpJIp)qpK6W(M+B`?K9EhrBqA&SzKCBnO29J0GkiCE2=9UvJ?> zhA$7~acY<;1E@MXO7b%|b~_s0nYDa{k|B}?LNLr8=z{^0lSP~W(5HW{-IZ&UB18;c zY4yh51nhIIB2qERtOyWiEC`4s6uW&<{QAZ%*X702jydIyd(&HMLSOoi-oCD)?1YZK zk`meJ1r!WidOVlc@1mZWX^?XMlZyEBc~V;xR)2=nroycJ+`EtAJSW;ow!7T*g?oOt z_ppi?PuX`@naZ}h6sgL(k)`9XP1aS%H5ZE7srURdq3_rB-}j#ceoNfP#4-t|gTHsw zH#Fcq13Wx>GP1IKjf{*k^usx4KDK$An3}TbfWB$?Y#t>iC8Z(7dsRaK9~Qa{mVXJ<>= z+uNB0NmeabA|PRYeLn+E*c|(P|Cjwxi7E&bD?El#IHv+xG+;!pg z+qc)4`B9A`?YrCCr?>9IHATBKrjLo1pfhQxriO+Cu*x>OmiL1Q{RAk&1_^GxA=8+} z2t+077T&)eU>>alkMctwT@i%6{a}6VfnU5&8G{12^uSD&7tElX|79W}Az{t@gO$}K zR`m;8j0}QR&>F2fR6Xw+UKAhO$95wVlTBZW$Nl@2<5@fUKnVz|5yu=H!v-7UpZOST zf02)Ee)j;6N=@e--Uv9P2;ITKt*x!c*i;wpNM1r1MGaj?`Yk-)Zx}0mo|kt54|diA zr;dI7DxjAX_~agUBXZ7ImWDZ&f?LJ*Js%Y5pPZb$svspRV=YBmA}OQM@fd)#AAilH zC||?EG!Xyr;gaP!uaNZg^lTr(lbXUqR-o?kdy>n2|8!@QN7;O???|t~A0lE|C1(e2 zIv-|o{D&9bbj6)P(Cxr+p0nXN)KF5}4misZLcSzL3uPFy zJO;IL0{$9b1>*7#-@V&xdpBl1CNndzt)~y&(-Su? zFTDO(_uT4RewKUlrR@PD$}?cG*!W|fgz|ng5g0}tgH&`D$|Iz zqETg!<9eJzz0ecdzW&n5mu*+bk*OiyH3?_8oCq}uA)l!T`H$WVNJOb9bbNm72~GCz zZKnR;2D8ip->E(~K$Sm7!h6e#d+Ow?yFZ0MY;guR^qmr3l>uz+2+39Dx(&S?hyD(N zN1x9>6|+1Ky$YbO6j+!c7`y~!SC^bC5#XeH`Uv%9+OsK9m{#sXvU7|T1p%lv@XQgC zJO;<5;U=UgEmrp^>w`IXKASU6)kRp@Xdo-ty`bJsY2bkLxWT#ur+R^1sW440^%mny zO!%fSOZgNW$5W5Iet45*%>2sdR}y+(xw)x$3u&~l=`9BvUdVYw*TIt^X(MTiby_*d z#`ILAabeA`x^XHJNe8!Q<v3>^umbMOnV_~S26e>?YK0hjRZxBs1ChWlqUd{y3`jW^ooI8A=!4yUypp< z4ux}0C;VhWPB+AP`aD)Gn&~d{sd;JEtqc)x&^rUS35Qt)m1Cc#x`q|ptN^H_G4slL zIzH!aX-1io#lGoY%p2uWi;V?+V2 zMtw@)2|n5N=o{OPh0af9OOQ2l6+jg~lsO#jx0>a+ za$|7?v!uXs8nOWJ3mC!$oXtW&k)blGCgn++ zo>Mr>pmf$m1*-X&6DPD}o6BiRfLtRircW{dG;nO=bZmPa*MN)#TN58q3t{mR-xv|4 zz=8SqE=eFI1x-LBa|HPpi4oIK$??%|<7|Z^H|oWM$t$)%0dp@#QX(Tjl!_kmyb5ya zMN9*^%YmYnNnU-Xk4>{Pg_@DcF}C=_c;b*}{}Aq_S_KoNXb?qTK1CkNGY5lZqOP+6G2 z?bm*aug_bvQtk=7y%Xo;LV+4AFmejZ#La$qSLafMogRa4|LDt;t5|u9U0YSpzoA9Q zvM20l8$Z|3FZg8YV;vzjluuIIsLtc=d~G{8X6J%YYCP#5l}>VY<2p+2rn)_YPCVaT z!rco7?`@Az7g9BxeO3LH3CmY0-;N@-RIfNp*(J6J`KVqt=>kv8#z4DMh)XEDJcZj;*gxDlrr`&<_-Y+AV^(*-nHiq5tG%7JRQ9yW3-&FK6H7A8L4A(dXc=ccj4Yi#E0d$>FU(6H&lSp3Xd;GDo#R zL_|1X-GCUs^66v^FURRVYkFLIclON}?{A4aCu)3=Kc=@?!QJ1EF0NjT+}3YEuA35X zetSyr7F;^_U5^WurF;)H{>IYF*H+!TwVeHP`v?muoa0VeFCEpMA1ml( zirV#8M(w{@!@X>R3djL*j;RuVnsThJHi!yX9L2fkvT@*}fF0M%+`ejX@2 zE|eV9BJkUu_{A`d7%*sJDB(C^4jyG*|zaBcLC^}5q)JQNw;oPF5mFxupD*;v5i&Ylc_t`ps z3JaamZ}w~(dl(2-8oozA-6{{fF zJp2MYahZ2`KS;k*-GCP|L<{=G!L|ZT)Ve?@L2qqIZiaCriKL5#s1-Q}T5|vEpERK# zR=LZ#_mw5zj^kD9C@D4}gM?6aXrI`ffF_UR75XZ~-Bgc-!IB zFTMbCPWl4%_u^Q0vVLM_GGQEmd!J3!7&tR6i}!-`^+pRN@-fiLE7iR~G8f=s<50f! zl>8V{n2_7|+;BM5JFf&iw6D*|0Ef&2F!06PC7e$(`Jn3qRM2)f6GzFZPS0P&cj~7vJDgQ#j&ViSD(%?28kl>-`bZsZspDfE z$Nz`sSDf>-Gr*R}D9H#OON+miTK#FP!}zR1@k%@*!NKRZ|7 z!4kjSfq)D6``7dvOlx;7iMr1|(be9jf4rX+5J9(#Ag5BZHg%9VSkQ_FPt+l2$!Z+|n@)cwAiwXUYAA`#N4X#y?6okSlWN z&TX$7Fo60Z&A3hR_STF9jS$3@ZWKoV(0!*lvC4)|v%4k=s91dbL!0^EF7V>qY^Q7q z7UWK);?@q`|D#X?Wjr62LsvQW@s`%y%Mus&3b7j5Rm_Hj?m@A>Y&fF;mnaJhs2^Xt z>$Dk0_g;Jr_mtxuUJ0^<(9Q%iR<)o=cSe&vNUa?oQ6NA&U0u}V535cF;gF%yb1AEQ zjs&&z=$RwGF4tO^{fIr=W8m+&Y^tl4pod=%lx~xLgRl5*N3wx8fibHT6$ZzJCiHCu z8=|nF06W-lS|u<=8nq*;*Ycl zliM47oiD0=Yg{HT5CS{UTL-_2uLeUb2;Jw|{2QeSP-9%oojJ@55oWJk2_vQq9iByW z5uJQyp1gexxIK7D2r`~}a@oQdCG%TC8;pKh<2}gE>Y=aJ4kehPw}{&k8EK|yaYXD= zdC*KjI%`DCB5kes2FZTHA{J6x|E0xh&fGE5ZL{Ib`c-1QxSo&lkGb?ZEyDBqLEj{J zC6FH0h2^+u%G#Zjf{QUJeFLEl@qc2(TA79|m@HT#qUa&(;@!@pXyCqTfm>3)-w#LA zFe)sX9)gto;;|gPu&-r~Z2KNiGSPB>@CysnD8g*=Uqo}wBze}g+s`2zhtyd1u~m-G zJ;S1|Pdt{J@)gDh2@aDLN`N`~HhY6|;Pyxh$D>q7#+5@65GZ0Ay|wvJWml1|P;W+z zlf)O`fIh<+zMm@g&Sk8xx{>}5Amsz0E!b9#PHJGeo(OLpY=%G8#1aJhxx zZsHe?pg&DHck*G9RliDR<3yR1tOm;GUI1@AKX>*)kNT|{mp|Nga@T>&*-+z0%n?ro zfDZW5-aS4;_wDDS7ZF|WCsfv~XGxajO(s_Hb7}bdBUH2)6?;jESrI1 z7#N*dd+AXg!J+TkMx2w}b+5QD#9NGxolwl+FWNbQFYjh~AoCi4M`+tb(SZkr1cL*k9u<#UzkIk7k~4SmpzLFJXI|9tA5(Gdj1~yH2?uq2 zf!d37KQxR*0z#k_p|^gFZ^xEd!>Dv2s)a<83v%bKGO}yHes%dI$VmUb0ug?%muOF&P1xKRBuO}Op={E{E!oiV zXIaQD1xHbR3wnadP1n@n$|}%neH864mtbWs{_-%$f~c-;_~Aop%(9pnjZOmUtWU_RCQ2SM z9PPKDaJpg1Xt!4fg@fk;@iwdO<*X!Fjy&!|!dj`myLwpyj+}Oa&>vBLq|!$~qR?C0 zH%_lSo*!!y=YyQT8Rf>*N!u2@{7?)4xk0QFkZ|sj5sGh}y8M)UfwaeilJaSMlQ9>O zo`oe^I^Y)@AGtMBO|W=$XM%J-=KF)iO;Bgp-2tV?E)6hy+O-Y`9*VNrboeU0v*27$ zK{a;cyH*kfZNsAGzq5$zVwzbxb6T~*rY%3?nRA2IzeXNgK!yyJ_;wi{f+;4Rq40GqFeqVxZf`}g-8$c>|3YiEd8cS=Ui3a z{`^bLv%=hqHL^OfuocEhIa{de8@-b{TwMzgv1$Z{?o^v4t8+Z-sPf@8ZSk(=rzCo(NJueH;@K`zi9O=H&-17hL81m?nGaG@Q{{U;o%X%^^Lb`ZW@hSq&*_Yo+jsfR3MpcBRpo|O ziSBaZqABea=t9n@^Np5PR;icU)u%@p7YO5j)N|kNKGIM>eh=(F$(=qq33+s~ppps9 z1m0Q9Gf)J}fx8biNKTO35I@ETZHO+!qS!()#@X3fhhC?(VwkqHKw6NO1_lPqAD;_F zxVpPbz60>^@JP~2+FY6_k_5@;;X@t~5s{M^n+rn1!hQF=yppv(o@(YUefe@=Hlhd< z{rdImJcpY%h5uoKpNI$wdYHL5Sa_}d0d+ZZL{(#igoI$~#bEF3&cQi4=5M5!7v%PS zUtixe;zT|m8B9um=$rx0O5o@v;la^S-np|7Y7MdCi-r*)0*7?QCwbqMz;dNW9}f=?FSwV*WCeY^UNjZv>WYFqLCjnw zsJ^>t{HN6XqPIXdb!Or7=g(XV3k!N#v@li+@W-B>9t3_%Eu@%{r|Gbu_!b_I z&z)eSb7p&c+r-7C#1b`nKlbwwb-hgcPe(^bo>Y{)1@dCl51B?iw2h6;--N_k;>3O$ zzofrI$d5k-ij;H|%lM6RRLXZ^1%bfO8NA7L zEI|_Yx_=+9Tr!-B{2Ge2`w-PV8NDv(-nBgIV*U4OW0jY$uWz^yjwEn8J~+8O{9&Mb zKJ;cwG7ic;)P9b7Dw@<8^H+C+%dHF}EcE4uG*|Dff_L+4S}*x;2e9O|a6Q@;wZw>O zTs!Rrem3c~@$`@lMNFP$eAf(dm_E427;V|S4zVMs24b<1ZAC+Z;&m(vFM(nbYLXGR zsBEGU(+R=4cMF1z)Xw{?9SCu&&PltU&r?m8%@)$=@F_X6bWC7D#VaRoSZnQK=1*I z@v^7yYEJf#(HhoQBeGEXb!0gCxUzRPCY@vb0nmUY3L{K_cby|eVOZul eSO}{BzbVA~WWNPO>^r2-1sLdZYh!O?pV4@ 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 SCmh2&11QO<%T`L82mcS4z>B&7 diff --git a/flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png index 88eafe8ddca0495f13a333e80acc43717a8af501..d781e2595ccd8d619eae8fbdfbd5ffe6831f10de 100644 GIT binary patch literal 31138 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 DT7{qv literal 41583 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

    $J)-6i8QQCvrL|PG%=z=KaRcRMT zcAC3R+MQ9#XVL~n0h}Q1)hOi`Y1>5s^py5ZlrmP@CQ$&pOB)`g)Jj_?3Set#HBm~P zwDtdOHc%U-Opvxs6u@rMMnow?r0p36&_mkyQOcLnj)(#{UD}6H%G1)Wi|n*;qqJwE zlz(fbJ*r(~rjwVXT^^+zCharxMrP(QL|VTnWn=YHCRsf)vz@dWn>MYX;kd}m)6zy* zDN32!$I^bx`wJ|pUfPG|iBj5l2x+@VM$SRn!&){q{_?O^k%>8dfV5-($zbbC3q>Xd zn1-~~q9K|YF6~>3Mi!Pd9ckahj5t%;Gk-c}8tgu;GKa*BSimGHJ46*y;R>OX^U1VW(AE?ytx<+}9*07y2 zo&F96soVjPqPb6%8kFbj>Y}%?D)*swk*2>Ie>Kj|k%0v~s8(b2j7sR}1AiKwihn#h zStUmU!on3TuxQpECWxuM` zG|!tYs!KD6Dat6Ft3UiW#(2dTZ-1|-F3p{!Mp4ewyxOOKnDL4+)n%GRHEHQAQxxS+ z9izIOWQt-;al7_WT{bjXQO?mJs?9ZuG1ifhgS!-Ah@CW#92_dQ=^oK0axsf9 zU2T-6_{=~{>JZp-tw?( n9c5SRTESde#7r~IR3-lhn9;Sa+3oCn00000NkvXXu0mjf**L{6 literal 3162 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 ATmS$7 diff --git a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index 16cef3177fb50c285857dd57f2fb57647a41df88..fa4ecad0a1ca52f07653451de8e0c378b8b9b176 100644 GIT binary patch literal 32239 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ð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 literal 49903 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 diff --git a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 298f4d9af072aff919597788eb7457c03ef23c24..080f311fc9d8d25ca2a21b850970724506f54f16 100644 GIT binary patch delta 486 zcmVg>Fl*!au%1`Wt`keZkydJXO|I74g}BjS0NIsRd+=XpPz_rfJlj~njMZ-S=+nn0|F z{kj-=JqZUxa5M-f0&vEsJX~|ZP3KB`q9*ohV(76X?25v^NPng8f8X~{XVozx4nM2G z<^*hyN#FZKZ1E@Uwx8SykQG1Dlb%QZX_l0JwId-AOYpg$4A!JzLsI%tm(vMSrAX4t z`{nyj2ecAA?t}>|HR*frNmZ3H@_zOIQE!3;%mwybZo)EM`X$dvrbd?iNUQ&MyWyq+ zv)G$Nm``AlA%FcHJFkUr`ANQh4xJU@*;M(vwed|K$=BbZ^TM-x%w@{2c*1Jo#UC}* zzpm%}B>!xgv3mr}u>7Q>)p3HL?4RoY@O#mcYM=dxFhvYl$?Y+$Do0;V=jZ2`-7FuH zbq~-UwdCI@PCUYvK4v%m^6P*3!e>PGFF!xFD!;u8R)lhN#Ly8(@_&Eu c6b2Lk07!28ARev~#sB~S07*qoM6N<$f{B3pMF0Q* delta 645 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 diff --git a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 18ebaab699c080d107c6faffc1c9ddf0819dec5e..fa5b04f7f39ff5a5943ba2c44d8999d3d4bf0ca2 100644 GIT binary patch delta 1528 zcmVYN+xpt?&qi(Aw%uOatnJI# zUeC^{+buGi1u$dK7(CP|b163mwt|hnVG->Vk?* z))Dcah29e-!*>fG)CaH1^T0|MWH}+*2{{hPbwIuy3hYp5zkj66@y1$j-HrPhn9Y&}}TQ9}O;bd6iPH!B2ld@$Ds^L(e`hH}eI_4X!7OCy?4?7U7o zeO3Tw`C+!7mw)@KU4e9=1%e+I$6#6zW&~hn67J=$B;DWc3Z?}eQtF7y;#sWHT9J~#eclcuZyTjp@%dQ=r5bNYaRMtPSGan zr)RkgcixHa9?jvT(C;l&p`RSzJtFq}B55zz_^=@eE91It``s_D@gzng;uXUb=qt0_ zlQ(O8(F?6ItZ=d1=at$CVgj@)hR|DqK1{bQO8KJwDm`tv+r+&`APLZoHVVB|mivZ@ z(tqAG#BBvWSnguEi+yqebj~gcJyn+bl?6&V(63bmVVRrdo@*BqpcibR&|PD>KVOj+ z^k?;9lRkEmMM#9+Ore{`a(}TxO$YkZ+OSFgJ*hnrI(r9&u7u@&eSTWduat*O=7u>o zF#)>4g3yJq+_#QX(t*A)%WpF86nNwWXn#ipp)+B+`^jDr`HGzqh52T4+KwnmTwE^e zt(&;#ZPEFnr!~ni*T-_7o#j?3CNAUeOsCL^>3(m4#uxokQ5fdMZx^eU#=P@)9?Ah%wK{bN{g=niP7Q8{v0q;x28WT*MUdxx5I>44AlUylS#Tz<U~1wC}L4AYHy{$%%!Ier~6S@hUCgx^kfYj=zwmM|Z2p;bF`+QE6A?e4i% zNMYQHDR@PX6WzBDBUVo00*iLuw6L*TLT=#I^y6B z%Ko|7*q<=mzpN8d-h0Rz-Zk*B`+w#Ew8f9ColaRRZA$L-)H?KMmI%fkg6+O?aUh^j zHkuvwFm}wtj``?dd@F2Wyl<=qz0}kCDDTYIW^dNru{gK1MChc=+H;GHeN{sD+-4;$ z7m8W}c>4%)a({B;80Ez|%7;tU50)y=&y%kmZ_Jm*9>Ub!p*n_${LxK*ynk^pv#(;$ z#fjZdtc-}n5OYH}`S8YpM*e2H2c+!2ZDGVIQvO%BEFrwHpOFVSx^JH!ZHpRWp6DO4 zj6BHE{lt=(Q!vDw(ci5=_%*IuW4k4DcZU**{XOP^Zt>&IeYv@>nk3BIsUaF-?r5XP z_bkGTyPlH!yiww>RccVizj5?}eo(~06?n&>l-)N?kbBi>ZUO(cqZ5d@+JfDR=nE6* zx!sO;_b}XN_g9{tp?0j$YOIv ex6m1M2E7lOZrKPpcxNX70000N`i6fJEk6dPa zh0EMjVr?$7EiN#hcaI4 z3kyxU(RD-b9pdl%G4$tz5Xa3x%#E8ICwO?dXZ(ZHQ|*_}_u9>K1uaPM!Y|P`eve3` zW2}vsGdDTe9~E2rCf`|9GAGa>0d8s!ZSUu0uf^FAQGfD~3pa~&2W3vsV;nT^3jHt~ zcZstbTGhz~R%U&5q4CgDJgoUD)D;j?0cQ|5A#QJU*V=W*Rh9<41UK%AbPbA#nT9in zyT;Cbv&8Ln=99j%w0Z6auI+>%JFx`WxKZL{g#&ww*itK*Kp@CNcUb6;N@@2dAM0$U zZwh2P?9lD~Ld(y5D(q(EUgkF4?zOJ1GS@g+)%OfV#ofcPPY0rH!yK90$>g&8 zNhfcy8v0I*_^Ak7)3xtGjmH!ZPWU7?w4%Wdqf z)pqjohlJj+xT3^jV<{P{;;sQe{y53O9ym_hc~)-1PPa*bK6+- z*(%3%HTotqs`ZA2rmi!6Q7M_A;(oZPZ}MSJp^G-j)1f~+ECxa-?JLyWtW0b-g!p7c zynnWHq%R_-)i83WV?4ZnD)b~Ri_@XsJtV}Re|iWixL;jrHH4TGVbzbL{wZ;~j8SyD z_2kqO3kx#qSPJx?BhoK}pq#4}+)K;Z4VPQao|xGFVC=|*knD?A5B@yKHx{Y;qCmGE zlW22Cio0c{Eyu{qYPAmHvsju*N}xX8mxuadF}cc7XVDk2dgF+ z3Zan@nx$M`TW8oXCu~)@1p@}PA12=uQAd>WdCKgrhVC7kaV!dVRUzXk%v0EDS%0a8 zskO5`5h4B`g_~T;0xhTK^kk>x_PPuvP8jiQGMuUqoZ%iON>piT=&9IjWqzq`E|`%l z%Oylj)#PMIR4Vp3PiAmC zGD<=N;ye^zWze=><)#jO6Qg&++z?lDej&+5LSkun)|v6YfjJ?mE%h*;MYMq_xWXL zWwkNG{N``m{vk0V1XJ7|2eaHwks9=p?cQbhkuTITmRLgx{`xl7W-cyuLtuM-_RBe$=1 z;f{N8T?vJl6JTFI)VQ#hc2#BjPKoQkk9H>fIHi;++-@7Q@nZTg&wmDOGvkg2;jMl0 z6MS?9T0k4)fpJ*iQ1?o@sO-MU?#cfCU{ey{Zq|CWi&AqwN zSz^^JgJ;uDRWAH`v*y+AQCPK2><-Ff29lh=+x#+<$AxR>p?P*$j08F89+w8gX**ro z>s2${w=|g7)z7B(^M4e4$49{TzBn)u?@?Kwkl~M?hnf92trY?)cVh{&Ww~?qJ-d9M zkDmeGds32EqaKt$r&_$sfxE7VXA4TyV1?Iu60y8bJC!?p(V96O3jz?%YRgEq(W42-*SO@i_ezT zEAoea;%fBeVd5m(uB>P0rOb{uUt_&_kxAEXxo+tCQhay=Z2A^$-is%={JHIB^w47S z#${%rIrK8*lRd~J|Kb|-*j4auC*Ilx{t<#g*7si<`ad3J+%fsh>_HOqOTWXlcB{79{8%MZG~Z z9D)!pUv*fByeDEAdyA2owmFoa8My>%V(|HHL|!xX+Z@?{{x?kL%>IWySN1oKj(a^D SR61P%0000A diff --git a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index a8ee14a31e4b0fe52fed14f5e6cd05e0b625d7f8..a4bc6dfd7be34f4787b077c79c7bef443121013f 100644 GIT binary patch delta 732 zcmV<20wev&2lEAxBYy(ANkl(yTQ2dl4sH57pZQJ&iw}->~Pfv*R7CZQPO%S(tpR4>LxsMAfi_HiA(66 z4Gz^*6H{{!*z2|Qy!dQ>~-D`M?7%cEvI{= zJ4e=fr{D37zTxRpXrpvoj_JBFBz_nYkVcE{#Nsd<@WCOkNDoZ&6c|_{`vwu~9PAC3 zRJ2q}D6vd8?SF-{dH1=4#O?{eUcX2WEeHg8jIvTlbEi!WApi{a_jtvnTyYsRTmVKk+*0VSCDsG6!!RdjgvVdXX5AwPo&%ZOM;X=IwvozD1fSR_=%MOBPUOv0EYjcBIPt4HOA%>feiJ$`7y znd#VlE2R|)>3T3cwUE7Q5yj|S>Fs(CR=>xBSET9#(RonIDE@E%QJ(-s`d@`kl(5|Z O00004K#YHd#tRxXK}|$sygZ0LX?*g65;aC4K_gVO2q>k1-Ckg4#%a54 zcgspKhLb+*c4mJ&=bUf8S%Fdt^AN&(K?cI@Cdc9uAiDon&-e{SDSW!Byyl<^r*{vX^F#t+Z!O)KVs0l z(_3M>y+xArq^4Lv_M4>ODByYcm@sAjBS@;asH%@_MR=3W{8LB-i*c^||+!w;>f7o`{ zapf4x3V+hVax5@b<;<`%{c08@E2=xHT*-tI#Z@&MjLg+M15sU~QmT?Fw~Dn<9gd^B z{BfP;EJa+)KNW4aD@8%aEzU#LHq<|^&hHOEr=QlB=iojWQU)e7u2gE_%0*7cW#L`Q zoqb7?*E~ma*#krr+VVQAErPeil1?$hZSuhR=YNQS1s-nh;yv!!TF0RKpN6|fb@tR; zZAo8exV28i&{yBU%|>qba&>msAekmm??y=D50Ag$mKV{UiG-1+TD_;zT<0(ua9Ld3 ziB4|^(WD~oc9Z@06(-KAB3R=By98q~+BuBB%Or7pWbDZ)a_3fCwJ05zttkz?^MM|` zOMftB)=qta#KuXTLmFZ{@=fT$W^0M4tDEsT6pGP9x2OVX8%iW=q-m#w9&8gm#n~KV zuGNeV*TJlg^+foxx{>ZNBsec Wlu{>sIKmA80000 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 diff --git a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index 331e7253110f04456f51ce1777b9ad45a383acb6..cfaff2b9bacf06cfc7a8f9235e62be38f07f085e 100644 GIT binary patch delta 2288 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 Z{{nEXa5>&a%N_s#002ovPDHLkV1hqx!DRpd diff --git a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index fd3b01b6d288c9a0d2eae79824afb420cba33e5a..8daf5718b31c281ed2db9743acc1dacdb47a6479 100644 GIT binary patch delta 968 zcmV;(12_D@3f%{gBYy*=Nkl1P_uqg$b zlMeO)SKD{KRj?>0yu3{Jt&}nZVe= zP3iA$%5?&<|4N%mX4Oc$+f~Mx)g%Niw7y>$wGi{b>q<>nAi*Muu^-)@y&bc1UdFU~ zq3@ip4N1QS6N=BRRbjr&*pF@z>$1d?I;B<|c+Q`{5q~C#uJEY_0<#sEs|>V*E5zGT zZ)(Sy+wa(^r0NQPb<%`cDr0|tNy~X0b8BV$9qWjxuJB7Mb(oY;`tJ)|L z-!?XnJ$53F=oUcsQy9hCv#%4c@b|Z5*uv(}kALoD-9u(I!U)#hRYpCj9l0d1sk3fj z>?7^ED{N7GW(FN-PrFPIJ*W)=eSCYiFMs#hPaIA%1t^;q*W5xF-eb?WovhE$Z!c3kNeA!ThBUVotZ% z&wow6NcztCTN{jTPnuJ%nUk-ZU!68y-KzQ)vb95>-Lc=-q9$i2G3h+D#}+1!fs4Jk zT;uE{rk=yTv*y(vf45WRfkhqtBRbETSG!}smz3!IEeu6`Zz;lX7kjF+{o-c%T8RAC zrp+X{>IObLb4c@ka+SKMz|<`K{n}KD$3ZLc)4lYmSq}4le2MDmjHH4E qA-vE)J6`ugG_K(P|AG9S;a>pE3GIopN2xgaVVP!o@Qn>6OLPfKwn=0H?tk3g_OO`gV%#$0HeMGI5f>+{i|!8^8Bi;O4jq(2 zDgAfvIXkzd-g^$Er45Vm_dpKKz30>O`}6(%P6doHxEChe6MyRc2A-4gNI>>R5D8L_ z4wi_#Md1D~u#9on?MR0^*gX;cYfi!t0}cZSl)oHUY2vr!>R&9#s>>5~99$kSL7sGm zKDa(Ny(=Ry#(s8%HIE#O))UwZR)~CX!0RK59)&K1O)f0&#AyB*v zm33^PvWbzS!++6$d|+Veo7?_N>k2uTjGYYp^-%b=Oa36KH)RVNNftPcq}c$0K5t}J z#@Rwf;LrO*`!5Hu;?>w$0n64RY4*FNmh4pNmKc0;AiV#lAl4$6%x=nf%=H|!v_g%oysWq)={1w{=ZtcN64tlL?zgz&4K zp-?31VVX^x*RaaaR3%nq^UPZ$r%wGHC^PXd+ePi?AGu}@Ij5g`K;OBxK%m(y_^WHu zm2pH@i^8^9N4! z8$JNlNDcd?PEW8dFDo(lhXJG>H_qPsm{3!g29?;z98zLL*Vviyz@p$DSL_8e=!HJl6Rev@SzH)2YoyRWn>#h3Usj%`-oPBFf z_C!#wj$^?i(?F?RH=`NBe`(0-=OxTfSb~CMfVrkHceqv8Bph zk(1tW`|e0z+z7Md3c|aKsK!NspREL?R)65~sycUMEB8uO8Uo^+LAyHrvJ~yA8g{Xn zd)`JVAO#jUcyKG&_x*elzP|%DKb;1(cU;C1 z4z76%_2}t-Pfq$M6 z+q&h}3o`lo&D~P99ah_*&7#!H*erJ3k$<0%<6|K^x9}V|vC$;*sYV~5$Q4U%?Luwc z^FuDlbH^xlxKVt#$MfBOk%{xu_2TA2-9k$0o5YcGxa}MU8BLsr)*0TYVx7DsurGvL z&&KynFmW!*=6UehCc}X>hQ)SH0e?2>K}`v~Ji^`;<`){ z&ONW=FZewYI)WhVga7~l07*qoM6N<$f`>$wo&W#< diff --git a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index aee7e4321be4c7803a4d8c12683eb2e5f0062d0c..85365e1852c6f25328b05a955b4d6e8cd12a0125 100644 GIT binary patch delta 2074 zcmV+#2<7*l7N!u8BYy|&Nkl0syP88S29?#*UA-IE9T`@Ck@`^y|9_GFpa3p_3*Z8{04{)ahHav8 zDxz)lDz%+bNxNu{>Mn7uS3VL^uZX(J@SX>!bhg{4{^jxXM}O*LqxJ=1ZxHqcV1ED( z1mK{*XB_gwVILgv!BO9^#+ye4SqkYV=+L%LcCRQonR2Iecdrc7|ZrvtxG< z_S|khaHkoLdEt1^7<$tC$(B%+M~LY(?_irLopVVZzdH(BBd{$D+rzNq1@rE{%m@25 z!wCtne#zx=#cW0*H^OT>8N z_7tp%!`irO=BtvPAMjz1UbHp|s}is}VPnqTejZitNq-wG58xdgWW=f@tVqJj1ebYh zcFc1-(|Op#n_9`xu;do=@|>H?JHZOWwZ7K4+>uaKhh)oG;uRk}0`2 zQd)MvBEi?Jkf2h$&AiCQJa$vE;K%V{3JphM^#hyAB5F<5Y1#RqC+6U=Y^(*>C#=2qJ-SobrWxGk>=6FMmH zwDSZ?Whi?NY;XQ|gMvBMn&-B4Kle6I=}2V`77322R-i<-%mdH!pU>r7JEv6`INlzA z)_*5cmLYiclLjnQpjhTHfAxSwbF8iHlz4KCm3}cp@aHybut4E4k6R%Gb9_os#PLT$ zJUPZET0)tC;|dO2pqgMFbM+G>cU0?^=E|#1c+E-fRt?AC?N=$xQ(=C;X6p=l?J7w% z+^8yl{7mdl^P#@YD}173@E?xoFjpPGY=6yj$s@#_8u~_$0(*iy=AS+pa}56A3IcO9 zTl4TrDI%jgV433m2SPmg^Bc|voPi0&5py+|t=XEtuv2lfGxUR|BxlVat}_SV8!?1g z1ZLTr=QZhWf@|7j&YD4Ek~jdLXlF2!@R*NxQ8&RCqQuId2j0)y0c5&5)X0!?pz$ND?Ow(=64^$}b zceKasjqudNCR|H90yCJZ+nOIJSMvbg6XB@=PPpm>T;0H6ieYOuV^42p*!vCmc9$;;Mcm;7mODMi!XVL`om@8W)$KaTZ!zM8JALB76RLnKF>azM= zzlz6vT`)2#;w@wF-&@T_pXRX(31ztj2W0lp#w4tX^O)arES6!_a(N?~;AhR$GWXuk z6%91k-)VmKuweD*Y|PstC4blC48ds?ADn7qo>oT@bDJLh;k<11=xoiScSK?u%e>Vx z=`g~7Sbye)=UA?j!HLbP)uZDv|Gq^SRBtIJ<3m#{^KEBXZDVe=I>q0eQLG*vk9qi( zXuCiM+b*4c4B_8*n#*!Lw?2`5X0OyoFLvcX=3h35S?CX^ReaUV+keb+>+E-}!7!<2 zvb$9S%N`>SF1LDgyynrHW8D(v0o(tYy78^^O>@r~R&&8#QQJ(%75CiFA6!mWKTZXW z3m%rS_+eu9F{~b)BlE&bN;W@gF()e|pib@o`pkL?)5)!|XVC)fo7?o#Mx(BadIdBX zTESCSiXH8wGaJaKw|^_cD|_`Nxy>Ixm@*jV;fwg0byjVN^j9+&GG8q!Rf@_KDDK^_ z%EUZoW3nyH8w)^|wRSZF`+k)}^Uzg^BVIiZPXK0|WPQb9);w!3nAO|N3(X<-GK+ni z7x!VVxTNOc3BZgK*8MzynK&^^JmyKwN*!${Ys894dYK2P4b8s8tni!1tPqYoZRG7$i%#*CGwjS$Ei>t5 zRxNX{{Ver9!#=THZcnj1KjS&oisPo{+ANK(70o!zKDuz{l#Yt{mpwT0f3|Cz->g{X z;T6)aj%yx)-G6mY@q8)#??D_h4Y|!W`+0PQ{KpfdBgyXS$CjdoOB(RQRf9Ui-nU9E zYu4im-b>GEJL9;t5r4dyy>0>5etuP@_T3$NRf};W&hGgK(=izvx^e51tnwn8QO716 zr{(^b delta 2840 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 Zf9$YqE?5@iGs=@AgHJ>`h*zY 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 mM3Mq6k)%LNBq`7m$$tSHK`j=s#+7#f0000d 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 Zf9$YqE?5@iGs=@AgHJ>`h*zY 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 YfLlQ8cmVrfj76gLL|3gs)h6u!0N77q;Q#;t diff --git a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 76abd423b27687314d56951abb83d5f22006ffdf..b60a754dfd34f4f036f6f11319940b4358b1cd85 100644 GIT binary patch delta 1951 zcmV;Q2VnT36s!-BBYy{TNklmVKL1kDgj4oIN52 zjZtWdLURO$N1QuhN-IolIeA9Q9qX8doOZ+^SH#gxbNK8!2I^u^AA^RdTc?RMoiMEh zrnmfaMPy1`p?^mLGNzIT7l>KaEYvV)si5=h9RrpqN z=p5KAgk<8KF#Uad(0S;hmC^Pi*D)mP8yUWloHz$I2{FYxA-QxhV=?zx47WDOMJ$jLTP)xRIHuP&Q?=iR-Y+RCv$vBKy;0~f2orRYw($BIxYJ7-a;+qapmolo#YAU&J18mT_ATQDSV>Ar)t`1(a-E3 zq&))h8ksc6sbeBeoT~)g1+sYqhL1JVX@Akre>W;AU+Tt1NhkSGQLE$v`N3=iA8Dr3 zqMu(cHT*#q?2utZ*w*>{#-t16y(1BPsM|Uh1hGHJ)tuoZ@4I?A;{thc1%eNBYiAnC zYt$d4hG}*hY3Cd~Kk5QGB;SDdb!+FjKPo97tIL>}ZGPK#X2b>Z*FPEXo{h6#o`32m za=>`THmB|~HS7wB{*SbB_V*Xre;jL@$9I|H201tf!MldF^MW6IMV>#BIaD5>Mw-q( z(;_aA7nNXm$HtlUnJOF9AEAV3R{cTqzVP18Kg^1`K;F|x;B92Q+&B&41q6{abI5 zFD;SHy@Rdu$E~t!B(Kub-zK)sC&wZ0gmc5_gfesQVB^egjP8+fdm_n)8Y#SL<@`qp z51Dfj%!=4l-N73n4N5A?z%ddMjq06SveAQuY{~hhKvxP$Xp`XJ0}M9_OA)9 zEIPRJ@^Y*p4|_PISupo2PJf&OCnPAP?ME)yMd6h;0wf%&&^S@bN1dN**pI_iKCQu6d4m!fB(77ne{5YtClF1 zCl5)d&rL)EuCKkT)4aN~S$rR?7=NmF=H zsZE}6_IGNpU(}vC%9-C=?pK^S|2B@-G4&5A>hxbld!MuIaWN;G|JLk#2 zi0?1bbW9K1Mf+ARbybn+q-kWQJOAFGtYz>K@yf)M&Ga9?w14%p6P<%9mF6voQhH>) z{4#GRy}6Q}^hSrA*kY+_iTDXW_S5D4;-%;LYI#2&fy`oCyB;8YXl_fEFw!&yFQmRp3FtpuXRrE?=N7UmAVBGX~}vS5zBMO+YzI@!|l{G0nVM lm_cTc8Ds{TK^Pu!^*?flgAbVJLKpx5002ovPDHLkV1oSG+X4Up delta 2586 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 YEi`7===YERv1c?@MNI{SoK@KW0OTwX%K!iX diff --git a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 46de51af67e1c4ab5b129af9ac5fb03cad3e972a..22628c5362a7cf094f84670ad8288b81425c1ba5 100644 GIT binary patch literal 4494 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 X=h;5c37vhNh0o5~=}ML5?fCxy!tE*- literal 6468 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 Bd>#M* literal 37517 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 a2it#tsAIaS9p3lv(b>V(zQoQq_WuBm=|rLc diff --git a/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 3bd2b7ede030927dcf652ee5db6131bc94df7c69..6452b8c1747d0a08905aff91568e296962f1c5c3 100644 GIT binary patch delta 405 zcmV;G0c!rh1Ed3x8Gi-<001BJ|6u?C0c%M_K~#7FtdawgBvBMa-yk^59pn;f3ALmO z$Jn-Q+eS0kwvDo_e>-mT|F%vsaZfy?tQ!Ch0O-Tg^zq)gVU2KJ;bDIou9hf2csQCw zU#b8T9MlE055T#T^M1M95(Zg~p3b_}C^)dv< zpAej-VNi0gD+Z!V3_)K^!M>M*T#Cc-HUSqE6?SEG|_*a31Gs*~au-uOQKFnugu7FTNC}BIC2V3G``QeJWYGMeo+3c_` zu}@62LkS1V?O4}SMwpptL2qyG6{FuE@Ss|8u-pz;Y_vq&ZudFS*jis-e?O5(c(DYz zTrR02R7C&)000000RaI300960|NsC0`T6649sARW5($XWmZ0HjGoK~xyi zZO%mk!cYuF(SITpoYdW2acBSAB27EwjdIVQeCE&CIgFdL)Od-Bs%9P@TLgTUpGIqT z9}!?VVHoVPel?X@07?(iP01y|D!w9tlPcIK?=Bz)G(go3a15^0l3^qS z+QkM7JFg!e0cc?BVWcRf3_Wlt=Rl9sJ2r=~27trK^(q|;j}3l(#;;)9f}b(H?1d>! b*kS(wqNfsT9EuRY00000NkvXXu0mjfqV3$A diff --git a/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index 88f2eee49a9a8162eeedf5df764e8842ac2d0912..80e9e0785d8f6a4f2b4c1436365b9172ba109edb 100644 GIT binary patch literal 6071 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 literal 6198 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 diff --git a/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index 18151e82b11bfd52df745f84cdc3fb0fddc45f30..14a4a5900b5da065747a67cb800d0506c553e267 100644 GIT binary patch delta 815 zcmV+~1JL~I2D=838Gi-<0047(dh`GQ0|H4zK~#7F?3Tl#Tu~53E4Ic_|4H-%oq2Hc z2R({y+qP}nwr#h0vC}&~xjOe{`qndRb)7o9T59nEKxY8k9mjc&|K#WY*bczZDcl;s zG3XLq<~VBv32cWZ$%=#Lc?-`A7LukDNkY7^EUOPfIQHH|;(uxmvHhPR+ulQVzJu(3 z3)%Muv6Js$-1&mz$r8fI<#OFz0;Xy1f)CH~Ho6>0L)LtTtp5br_z|+@gG)jVyoMZp zh4{@+fn8xOQIY!9Z{CCl+n!a>dUXo2{3~SD7j224PH-?;Q~si{XYr>dWI+nDsQR`v zsVA}b4Te9-Ab*TTjT$wTU+@d4;CTvYvoHsln|4XCBbw`Sx3ag{R&2Z!K@d-wc10;c=kz)eq4Gj=i)YlM9fkIYr{y z2M4;axO*lv1&m!LWI{oan102CChUYV6O>3iNa+j2W`9*6<4V6JVvF;LN}JsuTsfg7 zkSqc+vH}@X{w-nbDNU$@y48K}* z#kO%V9e*K+9)kkEC59i-4|($Mpz)%&apT6WhYuef2PaGl0muxHS&J4es$*heG6W|+d;sb?8IVJO8Z3d>mO^X^ tvM3l7>|hU)09c?Jcqze9Ggxq00st=Dj9J*sDaQZ+002ovPDHLkV1hqKd=3Br delta 863 zcmV-l1EBo72I~fp8Gi!+002a!ipBr{0b)>0R7C&)000002L}fN0s;U400000_xJbf z>+Amh{{R2~;o;%_{{HXp@B91vM@L5j0s;a80ssI21Ox;C00960|NHy<|NsB7v9Y3} zqR!6F{QUg?|NpPAuk`fv|NsC0|Nj7g`v8*j0J7%*cm4o+{eJ*``~ZUb0I%o(wC3;k z|KRZd0EPJghxh=D_5g|Y0G9CpneYIh?f|9i0I2H#s_Fo(=>WIo0GsfDz5d|!`~Z&h z5Tx(`p6>vo?Etyt0KDVB-2d%LqNkiOPc@y0hvieK~y-)t&w$e!axwkX_{cgp)P18DOLqaixhV$ zQg?U#{=K~r?#T4dzM0J2?fXq`_pRceG^bJ9Wm0RV`?hV&{-;K4JwQWhxkxcd5u!gO z-OH`)qJL{?bN@3VRc0}u7ccp@)wT5vAY$>a-f#5av!nQ2i>~YtBGc=XMF5A7r@_#6 zpE!7y-e3^Gz(HsSfQYv4Zo666BdVNXU`PV4oX$WndSS#~dh^WxO6C{=+O%@Q*pn(sRX_lJe*o_FD_}7s7D+MInZcmu_DZH059rckLd@)M? z67S`Oj#~7>j(W9JYCgbTLecyn06yvi62p55*2p%MaKe2MqJ55QN&q;W2=Ir5xDmvf zj#xneJ0rc3I4Jp!6AW(6rEEwPn6hTX6;1pPld0eZMyGreZ30lPB ptY+h|Oh%K1Q4q1rkW36KI=}E|c%z@Oh>`#R002ovPDHLkV1nGD&MN=_ diff --git a/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index f8d7befb32a3887b3afe7cc0e3e25e6355b9758e..4653354f143630b5f06d5045bcf713ac8ab2491f 100644 GIT binary patch literal 13288 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 Lg<-`7xA^}9wKTWe literal 8908 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%0D7IE-;TOZw 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 bECTt^{N{VZG)-Gz(;!_fgDbU{>?8jN?wrh+ diff --git a/flutter/web/icons/Icon-maskable-192.png b/flutter/web/icons/Icon-maskable-192.png index e8c754f4ad2127a599473544ca40d6169fbe35f0..2ff3bb45c06170ece6a60c3df422472c6d7b5a61 100644 GIT binary patch literal 6339 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 Lg<-`7xA^}9wKTWe literal 8908 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%0D7IE-;TOZw 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 bECTt^{N{VZG)-Gz(;!_fgDbU{>?8jN?wrh+ diff --git a/libs/clipboard/docs/assets/scene3.png b/libs/clipboard/docs/assets/scene3.png index a65a7ac063ca2f91d8f3c7ed263939b13c9cf486..748369878f56f3164a4dbc0953546482f5c58f11 100644 GIT binary patch literal 5475 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 W@8tc(%LU$`Ley0eDxZ~}2mKdgBeJOg diff --git a/libs/clipboard/docs/assets/win_A_B.png b/libs/clipboard/docs/assets/win_A_B.png index b65e571e7573d89be9d828df762b0629d2025763..87fe702dd9b6b39c024eafcc21830aabc4496a39 100644 GIT binary patch delta 41334 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 D`^MM_ delta 41354 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 diff --git a/libs/clipboard/docs/assets/win_B_A.png b/libs/clipboard/docs/assets/win_B_A.png index 4484b21ac6c4c8daec7ed6ecfa8ce676a459586d..e4c9f3246018cb2d234cbb266c570fe54a1f6c5c 100644 GIT binary patch literal 43447 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 literal 10623 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 z

    -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 z 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 Bd>#M* literal 37517 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 a2it#tsAIaS9p3lv(b>V(zQoQq_WuBm=|rLc diff --git a/res/mac-tray-dark-x2.png b/res/mac-tray-dark-x2.png index 595b850aef971e9e756aa55222318de018782cad..d1ba59123b927422433b2da3a2dbb4d2631df9b2 100644 GIT binary patch delta 637 zcmV-@0)qX&1&alc8Gi%-008|9F$@3z0#ZptK~#7FwO9e9DnS&zfWQ*c%xMRKAOr*e zzykzJ@CX)I1bKV_Kr8_Q0SEvQ@Sq0-fFKBnU`4R(XDy|7+TEGoKNpy>XRdqiJ#%NJ z8cHERj4cjGkRd~YBfhcFV;K22_)Q(*2ia@W`_9yFiVNB;#DBOVt6?|2R7&iCSqV9_ ztB#~DR9EkjIoMF@03UfOU2G)P=zJn|q(AzeQ~@C}M?0x*HT?+b|D^BLh<%DP&PWM; zHA*YzhLs-QX6>7z<=o%B5w4#&F?Xz{_CY!0fRezZb{J@ohkKxV@Yoc`bP`%Eh@+fjIBHp zmhU{l)c=`S0u$CZ?Uv{yj*A@V&QqJQ@#dBBoP%M^h)Ku1jO1u@l8 z2Vg@Ehy?+a3eTF}(2*e^V&~S&h#5~lvtmcKLhHMX`Tz4OIY&D+H4Q$K=%}dQdoS=o zqzYIgvcZ9K2pmpWQ&~71dqgVZx1KU-p-xuEDnI1-eA>L={k+56C9h_beX z1cw1br_k(aYB>;EK4!0&x%^5Lj^BR) XRP2suU`SCS00000NkvXXu0mjfMX4z3 literal 703 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sT>(BJu0UD}24rMpfJ_Mq35WoM z3uH@5N+OFxxDYiES-2Lspt!g=L`qgx7A^>3NJ~pY7(jC%YzP_1Z50M|jc!ShUogX; zPhSLOC0_OOy}g+iuK4}l*`4VIlcIDUmnQ|Oi*B36aqQ@-1wBRP2P)&eYL+XTdN43B zZufL?4DmQVb=vi5O$GuE?H>AC3JaK$)?5GoU!AQiX~whbJLkEboF}(1XWW=Ln}sRR z=X_+|LH08R&9aXcTQ0c%j>A-~_v}yZMZs=~>+Sj`K4q~oZ?swZF20ws{#9mO7xS6p zv*M-xf7X8cr|q%C9{xh}55NDsj0jYI_dLJWc-Gc`{^~EpCq?P|-`<|ox1&a!|7`f7 z5dVh?i~dK=6|`r*x4*bzUT@8U#6LGryMOdJ5%^R4*!DTsJQy9WZr-qC)s$0`2i#6F zNleqSH+`bDAZK-ja!}j4ntRNrjlzREhrX;Y`fbcAG9%*mI0B4JkNw{^9Q zbb@w#(7L-<*v-B;1yA-gmehKveC*NN{)O{p|Gi}R{xtf`KkHn#D@h0RldLx9+-!7w z9X)+YOzNDKzc0zH%gZ+MSKFQXka5QH$Ey}6-w8I}r{h{XueFVdQ&MBb@04s+K-~a#s diff --git a/res/mac-tray-light-x2.png b/res/mac-tray-light-x2.png index 2e27118884994f5573334acc2cd962e373903619..11e780cada8c209893c71a11ccb4d6a34c7616a8 100644 GIT binary patch delta 572 zcmV-C0>k~-1K~#7Fwb+4XBMlJ1@c|G-C{cuRP$&WP z6+WOq2v7od2m$0JN+>uS9N=Cc1biSA0U!>F140QaiY&iVPJC{2M(pYt(x(a}jOmTPU34;JeFc#$2I^gMV3^%NI}DxQ%nTv)9fj zPIK?5ooAgm#e~-RFXs%W{LK8d!YQSlo$`!)W~1K0PviHDD`P(tkn?)RhWU42r!d!x z$aIW-t$yalA25k`E^EiLG>8V=*a7z5SBOWDJw~+5!^8W`3S{4-5ktGmaJ%uw4B0Xo zF|bqhE#7#N6@Lbe*JJj7M7TsYkA~dKN*7@)JLpA2x(>2YSjc`v3x3KT!b&!d7Tn90 z;kRrMEx49#L!s&zt?0;J!co>hREh76RlQQfi|M?)6KE+fKP_OCu6sDodeMN64YFyx(N$FP zSJ8-H$O^qQzvg+Jl+P!FzJ1I5&<13Mem;A*)x3eZNzLJPW#OpKJa6;=bZQQfSHDc$ z=te}iaBF6%RBscf8G2DwDxFriZkIn#>FzW0Oyd-NJMENb?En+)?A^sV+-hUvI?m;r zLKB7g=QX`bC@l1&4P8@f)LWbC#lO)v@?d3a4_<67Js9c7Nq+%-F0L!XQmkxkK2AHGgg-)V!0xPnYml1&)oC>@L8Y!wu-I= z_u`*gZa0|f#k4^q$y}Rv;>*<62@Td2S10A&2)BOWvQDx4`gf<#&MQyrhOYj%Nqwqu z&Nj`LN4C{VmHpUzr}bp-(~L}e`MA@|6so{@4lW7dl#JlIeizW zt$}C3o_|rb0={}jm6@fquWtU-sqr^nE&Jj6g}>`>{yC!d??LRx-~UwaNj7*LS^R_f ze^w3i4fE%rkHjN?vWgsO39#7s=#7BM&+iKiszp;@eEP+$HD4!p!bhuyQ=U(r_Fk9e zjo%#7l%L2kx5d2YK=0>9zGvateD7HPALMdj}EVtg> zvr;tv;7z;d!FfL?-v9bXd0tiS(&!s=O6vm`_vT+-H~Yg%fA+_2v3KX`=YLIo_mD4e k&&g9$GD7;yH~#%#KWoL|&dIu_pj5!%>FVdQ&MBb@03sKs`Tzg` From 886fb73521fe6a5d8f7e1d89d74e44ce6e0127a5 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 12 Aug 2023 15:07:08 +0800 Subject: [PATCH 410/612] Some time it is RustDesk, sometimes it is rustdesk on mac, so make it case insensitive --- src/common.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/common.rs b/src/common.rs index cadf7330d..011ca0524 100644 --- a/src/common.rs +++ b/src/common.rs @@ -1112,6 +1112,7 @@ pub fn check_process(arg: &str, same_uid: bool) -> bool { if let Ok(linked) = path.read_link() { path = linked; } + let path = path.to_string_lossy().to_lowercase(); let my_uid = sys .process((std::process::id() as usize).into()) .map(|x| x.user_id()) @@ -1121,7 +1122,7 @@ pub fn check_process(arg: &str, same_uid: bool) -> bool { if let Ok(linked) = cur_path.read_link() { cur_path = linked; } - if cur_path != path { + if cur_path.to_string_lossy().to_lowercase() != path { continue; } if p.pid().to_string() == std::process::id().to_string() { From 0e6d368970485098bfd5b39a0fa794794588391f Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 12 Aug 2023 15:10:38 +0800 Subject: [PATCH 411/612] fix --server not killed when stop service on mac --- src/platform/macos.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 02fc828a6..6c5f19b9a 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -248,6 +248,10 @@ pub fn uninstall_service(show_new_window: bool) -> bool { .args(&["remove", &format!("{}_server", crate::get_full_name())]) .status() .ok(); + std::process::Command::new("pkill") + .arg(crate::get_app_name()) + .status() + .ok(); if show_new_window { std::process::Command::new("sh") .arg("-c") @@ -257,11 +261,6 @@ pub fn uninstall_service(show_new_window: bool) -> bool { )) .spawn() .ok(); - } else { - std::process::Command::new("pkill") - .arg(crate::get_app_name()) - .status() - .ok(); } quit_gui(); } From 85c149d8e443fd8f41779d51cba0205e35d234b7 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 12 Aug 2023 15:17:00 +0800 Subject: [PATCH 412/612] mainly for mac, if somehow --server not killed --- src/tray.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tray.rs b/src/tray.rs index 8618e0f78..2f4aae93a 100644 --- a/src/tray.rs +++ b/src/tray.rs @@ -107,7 +107,9 @@ pub fn make_tray() -> hbb_common::ResultType<()> { return; } */ - crate::platform::uninstall_service(false); + if !crate::platform::uninstall_service(false) { + *control_flow = ControlFlow::Exit; + } } else if event.id == open_i.id() { open_func(); } From d18250d1e71ddd14b152f00ab156b01e1baf477d Mon Sep 17 00:00:00 2001 From: sahilyeole Date: Sat, 12 Aug 2023 12:51:30 +0530 Subject: [PATCH 413/612] add more peer_tab_page tooltips Signed-off-by: sahilyeole --- flutter/lib/common/widgets/peer_tab_page.dart | 87 ++++++++++++------- 1 file changed, 54 insertions(+), 33 deletions(-) diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index daf81d231..d32458514 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -121,10 +121,13 @@ class _PeerTabPageState extends State : BoxDecoration( color: Theme.of(context).colorScheme.background, borderRadius: BorderRadius.circular(6)), - child: Icon( - Icons.tag_rounded, - size: 18, - ))), + child: Tooltip( + message: translate('Toggle Tags'), + child: Icon( + Icons.tag_rounded, + size: 18, + )) + )), onTap: () async { await bind.mainSetLocalOption( key: "hideAbTagsPanel", @@ -217,11 +220,14 @@ class _PeerTabPageState extends State }, child: RotatedBox( quarterTurns: 2, - child: Icon( - Icons.refresh, - size: 18, - color: textColor, - ))), + child: Tooltip( + message: translate('Refresh'), + child: Icon( + Icons.refresh, + size: 18, + color: textColor, + )) + )), ), ); } @@ -248,14 +254,18 @@ class _PeerTabPageState extends State k: 'peer-card-ui-type', v: type.index.toString()); peerCardUiType.value = type; }, - child: Icon( - peerCardUiType.value == PeerUiType.grid - ? Icons.view_list_rounded - : Icons.grid_view_rounded, - size: 18, - color: textColor, - )), - ), + child: Tooltip( + message: peerCardUiType.value == PeerUiType.grid + ? translate('List View') + : translate('Grid View'), + child: Icon( + peerCardUiType.value == PeerUiType.grid + ? Icons.view_list_rounded + : Icons.grid_view_rounded, + size: 18, + color: textColor, + )) + )), ); } @@ -269,11 +279,13 @@ class _PeerTabPageState extends State onTap: () { model.setMultiSelectionMode(true); }, - child: Icon( - IconFont.checkbox, - size: 18, - color: textColor, - ), + child: Tooltip( + message: translate('Select'), + child: Icon( + IconFont.checkbox, + size: 18, + color: textColor, + )), ), ); } @@ -466,10 +478,13 @@ class _PeerSearchBarState extends State { drawer = true; }); }, - icon: Icon( - Icons.search_rounded, - color: Theme.of(context).hintColor, - )); + icon: Tooltip( + message: translate('Search'), + child: Icon( + Icons.search_rounded, + color: Theme.of(context).hintColor, + )) + ); } Widget _buildSearchBar() { @@ -537,10 +552,14 @@ class _PeerSearchBarState extends State { drawer = false; }); }, - icon: Icon( - Icons.close, - color: Theme.of(context).hintColor, + icon: Tooltip( + message: translate('Close'), + child: + Icon( + Icons.close, + color: Theme.of(context).hintColor, )), + ), ], ), ) @@ -604,10 +623,12 @@ class _PeerSortDropdownState extends State { var menuPos = RelativeRect.fromLTRB(0, 0, 0, 0); return InkWell( - child: Icon( - Icons.sort_rounded, - size: 18, - ), + child: Tooltip( + message: translate('Sort By'), + child: Icon( + Icons.sort_rounded, + size: 18, + )), onTapDown: (details) { final x = details.globalPosition.dx; final y = details.globalPosition.dy; From f722c6f684437d9ab203d5630560f90b04962d84 Mon Sep 17 00:00:00 2001 From: sahilyeole Date: Sat, 12 Aug 2023 12:52:15 +0530 Subject: [PATCH 414/612] add more desktop_home_page tooltips Signed-off-by: sahilyeole --- .../lib/desktop/pages/desktop_home_page.dart | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart index 7bf303a68..d458402d3 100644 --- a/flutter/lib/desktop/pages/desktop_home_page.dart +++ b/flutter/lib/desktop/pages/desktop_home_page.dart @@ -185,11 +185,13 @@ class _DesktopHomePageState extends State backgroundColor: hover.value ? Theme.of(context).scaffoldBackgroundColor : Theme.of(context).colorScheme.background, - child: Icon( - Icons.more_vert_outlined, - size: 20, - color: hover.value ? textColor : textColor?.withOpacity(0.5), - ), + child: Tooltip( + message: translate('Settings'), + child: Icon( + Icons.more_vert_outlined, + size: 20, + color: hover.value ? textColor : textColor?.withOpacity(0.5), + )), ), ), onHover: (value) => hover.value = value, @@ -252,23 +254,28 @@ class _DesktopHomePageState extends State onPressed: () => bind.mainUpdateTemporaryPassword(), child: Obx(() => RotatedBox( quarterTurns: 2, - child: Icon( - Icons.refresh, - color: refreshHover.value - ? textColor - : Color(0xFFDDDDDD), - size: 22, - ))), + child: Tooltip( + message: translate('Refresh Password'), + child: Icon( + Icons.refresh, + color: refreshHover.value + ? textColor + : Color(0xFFDDDDDD), + size: 22, + )) + )), onHover: (value) => refreshHover.value = value, ).marginOnly(right: 8, top: 4), InkWell( child: Obx( - () => Icon( - Icons.edit, - color: - editHover.value ? textColor : Color(0xFFDDDDDD), - size: 22, - ).marginOnly(right: 8, top: 4), + () => Tooltip( + message: translate('Change Password'), + child: Icon( + Icons.edit, + color: + editHover.value ? textColor : Color(0xFFDDDDDD), + size: 22, + )).marginOnly(right: 8, top: 4), ), onTap: () => DesktopSettingPage.switch2page(1), onHover: (value) => editHover.value = value, From 591d631b0d1a4354e7abf81c7ff4316355a894eb Mon Sep 17 00:00:00 2001 From: Seyyed Emad Razavi Date: Sat, 12 Aug 2023 13:35:16 +0330 Subject: [PATCH 415/612] Fix create-dmg issue on macosx --- build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.py b/build.py index d1fdd4aaf..fc4a06f51 100755 --- a/build.py +++ b/build.py @@ -556,7 +556,7 @@ def main(): codesign -s "Developer ID Application: {0}" --force --options runtime ./target/release/bundle/osx/RustDesk.app/Contents/MacOS/* codesign -s "Developer ID Application: {0}" --force --options runtime ./target/release/bundle/osx/RustDesk.app '''.format(pa)) - system2('create-dmg target/release/bundle/osx/RustDesk.app') + system2('create-dmg "RustDesk %s.dmg" "target/release/bundle/osx/RustDesk.app"' % version) os.rename('RustDesk %s.dmg' % version, 'rustdesk-%s.dmg' % version) if pa: From 8870283f6f4751474e7fa13cc3fd8d18ffaf3bed Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 13 Aug 2023 14:30:14 +0800 Subject: [PATCH 416/612] Fix, Windows and Linux, window border on maximize Signed-off-by: dignow --- flutter/lib/models/state_model.dart | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/flutter/lib/models/state_model.dart b/flutter/lib/models/state_model.dart index ccaad43d6..d7784f652 100644 --- a/flutter/lib/models/state_model.dart +++ b/flutter/lib/models/state_model.dart @@ -50,11 +50,18 @@ class StateGlobal { setWindowId(int id) => _windowId = id; setMaximized(bool v) { - if (isMaximized.value != v && !_fullscreen) { - isMaximized.value = v; - _resizeEdgeSize.value = isMaximized.isTrue ? kMaximizeEdgeSize : kWindowEdgeSize; + if (!_fullscreen) { + if (isMaximized.value != v) { + isMaximized.value = v; + _resizeEdgeSize.value = + isMaximized.isTrue ? kMaximizeEdgeSize : kWindowEdgeSize; + } + if (!Platform.isMacOS) { + _windowBorderWidth.value = v ? 0 : kWindowBorderWidth; + } } } + setMinimized(bool v) => _isMinimized = v; setFullscreen(bool v) { From 089078472f4e8ecf930fd626f3fddd9152b05c1d Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 13 Aug 2023 15:37:29 +0800 Subject: [PATCH 417/612] my bad --- src/platform/macos.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 6c5f19b9a..59f36f8c4 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -248,10 +248,6 @@ pub fn uninstall_service(show_new_window: bool) -> bool { .args(&["remove", &format!("{}_server", crate::get_full_name())]) .status() .ok(); - std::process::Command::new("pkill") - .arg(crate::get_app_name()) - .status() - .ok(); if show_new_window { std::process::Command::new("sh") .arg("-c") @@ -262,6 +258,10 @@ pub fn uninstall_service(show_new_window: bool) -> bool { .spawn() .ok(); } + std::process::Command::new("pkill") + .arg(crate::get_app_name()) + .status() + .ok(); quit_gui(); } } From 722b82e1a525bc8352f62d4d085ad7f372f0ae82 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 13 Aug 2023 15:59:07 +0800 Subject: [PATCH 418/612] keep rs-ny.rustdesk.com only --- libs/hbb_common/src/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 5204a891c..16c02d758 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -90,7 +90,7 @@ const CHARS: &[char] = &[ 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ]; -pub const RENDEZVOUS_SERVERS: &[&str] = &["rs-sg.rustdesk.com"]; +pub const RENDEZVOUS_SERVERS: &[&str] = &["rs-ny.rustdesk.com"]; pub const RS_PUB_KEY: &str = match option_env!("RS_PUB_KEY") { Some(key) if !key.is_empty() => key, From ae640dda564210fae2510a4fd958f43e31603ef5 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 13 Aug 2023 17:50:19 +0800 Subject: [PATCH 419/612] fix macos minisized after checking permission Signed-off-by: 21pages --- flutter/lib/common.dart | 14 +++++++++++--- .../lib/desktop/pages/desktop_setting_page.dart | 5 +---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 6c3716f53..520156efb 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -222,7 +222,7 @@ class MyTheme { //tooltip static TooltipThemeData tooltipTheme() { return TooltipThemeData( - waitDuration: Duration(seconds: 1, milliseconds: 500), + waitDuration: Duration(seconds: 1, milliseconds: 500), ); } @@ -1554,7 +1554,7 @@ Future restoreWindowPosition(WindowType type, bool isRemotePeerPos = false; String? pos; // No need to check mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs) - // Though "open in tabs" is true and the new window restore peer position, it's ok. + // Though "open in tabs" is true and the new window restore peer position, it's ok. if (type == WindowType.RemoteDesktop && windowId != null && peerId != null) { // If the restore position is called by main window, and the peer id is not null // then we may need to get the position by reading the peer config. @@ -2281,10 +2281,18 @@ void onCopyFingerprint(String value) { } } +Future callMainCheckSuperUserPermission() async { + bool checked = await bind.mainCheckSuperUserPermission(); + if (Platform.isMacOS) { + await windowManager.show(); + } + return checked; +} + Future start_service(bool is_start) async { bool checked = !bind.mainIsInstalled() || !Platform.isMacOS || - await bind.mainCheckSuperUserPermission(); + await callMainCheckSuperUserPermission(); if (checked) { bind.mainSetOption(key: "stop-service", value: is_start ? "" : "Y"); } diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index e0e5858b7..b868042a4 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -1832,13 +1832,10 @@ Widget _lock( Text(translate(label)).marginOnly(left: 5), ]).marginSymmetric(vertical: 2)), onPressed: () async { - bool checked = await bind.mainCheckSuperUserPermission(); + bool checked = await callMainCheckSuperUserPermission(); if (checked) { onUnlock(); } - if (Platform.isMacOS) { - await windowManager.show(); - } }, ).marginSymmetric(horizontal: 2, vertical: 4), ).marginOnly(left: _kCardLeftMargin), From 4b33ee63090a2d68aa64cc7a8a046974f5604dfd Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 13 Aug 2023 19:51:02 +0800 Subject: [PATCH 420/612] fix uninstall service on mac from main window because of ipc close myself --- src/platform/macos.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/platform/macos.rs b/src/platform/macos.rs index 59f36f8c4..fa6f630ca 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -241,9 +241,6 @@ pub fn uninstall_service(show_new_window: bool) -> bool { ); if uninstalled { crate::ipc::set_option("stop-service", "Y"); - let _ = crate::ipc::close_all_instances(); - // leave ipc a little time - std::thread::sleep(std::time::Duration::from_millis(300)); std::process::Command::new("launchctl") .args(&["remove", &format!("{}_server", crate::get_full_name())]) .status() @@ -262,6 +259,9 @@ pub fn uninstall_service(show_new_window: bool) -> bool { .arg(crate::get_app_name()) .status() .ok(); + let _ = crate::ipc::close_all_instances(); + // leave ipc a little time + std::thread::sleep(std::time::Duration::from_millis(300)); quit_gui(); } } From ff3ca6f71951c6cf1a8a227fbe2c25381a2bd14e Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Sun, 13 Aug 2023 14:09:41 +0200 Subject: [PATCH 421/612] Update peer_tab_page.dart --- flutter/lib/common/widgets/peer_tab_page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index d32458514..71f620f6b 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -624,7 +624,7 @@ class _PeerSortDropdownState extends State { var menuPos = RelativeRect.fromLTRB(0, 0, 0, 0); return InkWell( child: Tooltip( - message: translate('Sort By'), + message: translate('Sort by'), child: Icon( Icons.sort_rounded, size: 18, From 0bb03a083a37d4b122041e94a0f0e9587aa3f2a6 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Sun, 13 Aug 2023 14:12:14 +0200 Subject: [PATCH 422/612] Add files via upload --- src/lang/ca.rs | 7 +++++++ src/lang/cn.rs | 7 +++++++ src/lang/cs.rs | 7 +++++++ src/lang/da.rs | 7 +++++++ src/lang/de.rs | 7 +++++++ src/lang/el.rs | 7 +++++++ src/lang/eo.rs | 7 +++++++ src/lang/es.rs | 7 +++++++ src/lang/fa.rs | 7 +++++++ src/lang/fr.rs | 7 +++++++ src/lang/hu.rs | 7 +++++++ src/lang/id.rs | 7 +++++++ src/lang/it.rs | 7 +++++++ src/lang/ja.rs | 7 +++++++ src/lang/ko.rs | 7 +++++++ src/lang/kz.rs | 7 +++++++ src/lang/lt.rs | 7 +++++++ src/lang/nl.rs | 7 +++++++ src/lang/pl.rs | 7 +++++++ src/lang/pt_PT.rs | 7 +++++++ src/lang/ptbr.rs | 7 +++++++ src/lang/ro.rs | 7 +++++++ src/lang/ru.rs | 7 +++++++ src/lang/sk.rs | 7 +++++++ src/lang/sl.rs | 7 +++++++ src/lang/sq.rs | 7 +++++++ src/lang/sr.rs | 7 +++++++ src/lang/sv.rs | 7 +++++++ src/lang/template.rs | 7 +++++++ src/lang/th.rs | 7 +++++++ src/lang/tr.rs | 7 +++++++ src/lang/tw.rs | 16 ++++++++++------ src/lang/ua.rs | 7 +++++++ src/lang/vn.rs | 7 +++++++ 34 files changed, 241 insertions(+), 6 deletions(-) diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 23914b810..364ed885f 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 6c4565fe7..6b03397fa 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", "将标签页移至新窗口"), ("Can not be empty", "不能为空"), ("Already exists", "已经存在"), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index b2a304c39..23d83578e 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index df3aecc45..a05ad2001 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 010c37abe..cc1b321e0 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", "Tab in neues Fenster verschieben"), ("Can not be empty", "Darf nicht leer sein"), ("Already exists", "Existiert bereits"), + ("Change Password", "Passwort ändern"), + ("Refresh Password", "Passwort aktualisieren"), + ("ID", "ID"), + ("Grid View", "Rasteransicht"), + ("List View", "Listenansicht"), + ("Select", "Auswählen"), + ("Toggle Tags", "Tags umschalten"), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 846c632c7..a0d1fa85c 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index aec715f72..451b93a55 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index dcd39c9a7..088b131d2 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 7cda61f82..b507231da 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 3acbdf800..c995c8d41 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 44158db0d..1e516e947 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index dac33d1f0..aa61d5420 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index d613f75c3..290a2bebf 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", "Sposta scheda nella finestra successiva"), ("Can not be empty", "Non può essere vuoto"), ("Already exists", "Esiste già"), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 5099a8387..a247aff07 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 43cc3526b..a1371ae90 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index ea08bfc58..b1506ac1b 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 4cbf215a4..c47aac327 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 312def157..a2cacb59a 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 25f109a33..d95615ed8 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", "Przenieś zakładkę do nowego okna"), ("Can not be empty", "Nie może być puste"), ("Already exists", "Już istnieje"), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 7bfad8a10..00956b972 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index df0e922bd..2a82f6208 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 0e280496d..3d97a7ecd 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 3aec5dc36..8f7a41360 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", "Переместить вкладку в отдельное окно"), ("Can not be empty", "Не может быть пустым"), ("Already exists", "Уже существует"), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 487edfbfd..8b2e2eaa0 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index dc51191ba..2913ad3fd 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 7ac82ee65..ebe9e6275 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 686d0c66c..999bca477 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 072baf201..cd32b975f 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index ff87844cd..c3b2cb76a 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 4f462ef6a..c1191aed4 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index b184dff21..45f44a5f2 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 2f374329e..d07d19f71 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -288,16 +288,13 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("android_new_connection_tip", "收到新的控制請求,對方想要控制您目前的裝置。"), ("android_service_will_start_tip", "開啟「畫面錄製」將自動啟動服務,允許其他裝置向您的裝置請求連線。"), ("android_stop_service_tip", "關閉服務將自動關閉所有已建立的連線。"), - ("android_version_audio_tip", "目前的 Android 版本不支援音訊錄製,請升級到 Android 10 或以上版本。"), - ("android_start_service_tip", "點選「啟動服務」或啟用「螢幕錄製」權限以啟動螢幕分享服務。"), - ("android_permission_may_not_change_tip", "對於已經建立的連線,權限可能不會立即發生改變,除非重新建立連線。"), + ("android_version_audio_tip", "目前的 Android 版本不支援音訊錄製,請升級至 Android 10 或更新的版本。"), + ("android_start_service_tip", "點選「啟動服務」或啟用「畫面錄製」權限以啟動螢幕分享服務。"), + ("android_permission_may_not_change_tip", "已建立連線的權限可能不會立即改變,除非重新連線。"), ("Account", "帳號"), ("Overwrite", "取代"), ("This file exists, skip or overwrite this file?", "此檔案/資料夾已存在,要略過或是取代此檔案嗎?"), ("Quit", "退出"), - ("android_version_audio_tip", "目前的 Android 版本不支援音訊錄製,請升級至 Android 10 或更新的版本。"), - ("android_start_service_tip", "點選「啟動服務」或啟用「畫面錄製」權限以啟動螢幕分享服務。"), - ("android_permission_may_not_change_tip", "已建立連線的權限可能不會立即改變,除非重新連線。"), ("doc_mac_permission", "https://rustdesk.com/docs/zh-tw/manual/mac/#啟用權限"), ("Help", "說明"), ("Failed", "失敗"), @@ -531,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", "移動標籤到新視窗"), ("Can not be empty", "不能為空"), ("Already exists", "已經存在"), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index ac5e0b672..6b1fbc437 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 335f25a58..657fbcf0d 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -528,5 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", ""), ("Can not be empty", ""), ("Already exists", ""), + ("Change Password", ""), + ("Refresh Password", ""), + ("ID", ""), + ("Grid View", ""), + ("List View", ""), + ("Select", ""), + ("Toggle Tags", ""), ].iter().cloned().collect(); } From aeae2b3ef7a485cce8d0a3a9c34edf1b1369684a Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 13 Aug 2023 21:46:39 +0800 Subject: [PATCH 423/612] Fix, check if is cached peer info when handle_peer_info Signed-off-by: dignow --- src/client.rs | 2 +- src/client/io_loop.rs | 2 +- src/port_forward.rs | 2 +- src/ui_session_interface.rs | 14 ++++++++------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/client.rs b/src/client.rs index 798550467..84f338c63 100644 --- a/src/client.rs +++ b/src/client.rs @@ -2366,7 +2366,7 @@ pub trait Interface: Send + Clone + 'static + Sized { fn send(&self, data: Data); fn msgbox(&self, msgtype: &str, title: &str, text: &str, link: &str); fn handle_login_error(&mut self, err: &str) -> bool; - fn handle_peer_info(&mut self, pi: PeerInfo); + fn handle_peer_info(&mut self, pi: PeerInfo, is_cached_pi: bool); fn on_error(&self, err: &str) { self.msgbox("error", "Error", err, ""); } diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 08c3a6a9b..4c0930f31 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1026,7 +1026,7 @@ impl Remote { { self.handler.cache_flutter.write().unwrap().pi = pi.clone(); } - self.handler.handle_peer_info(pi); + self.handler.handle_peer_info(pi, false); #[cfg(not(feature = "flutter"))] self.check_clipboard_file_context(); if !(self.handler.is_file_transfer() || self.handler.is_port_forward()) { diff --git a/src/port_forward.rs b/src/port_forward.rs index 6a087abe2..1e918cce1 100644 --- a/src/port_forward.rs +++ b/src/port_forward.rs @@ -146,7 +146,7 @@ async fn connect_and_login( return Ok(None); } Some(login_response::Union::PeerInfo(pi)) => { - interface.handle_peer_info(pi); + interface.handle_peer_info(pi, false); break; } _ => {} diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index bbf6d0aec..1c79e7d9c 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -1078,7 +1078,7 @@ impl Interface for Session { handle_login_error(self.lc.clone(), err, self) } - fn handle_peer_info(&mut self, mut pi: PeerInfo) { + fn handle_peer_info(&mut self, mut pi: PeerInfo, is_cached_pi: bool) { log::debug!("handle_peer_info :{:?}", pi); pi.username = self.lc.read().unwrap().get_username(&pi); if pi.current_display as usize >= pi.displays.len() { @@ -1099,10 +1099,12 @@ impl Interface for Session { self.msgbox("error", "Remote Error", "No Display", ""); return; } - self.try_change_init_resolution(pi.current_display); - let p = self.lc.read().unwrap().should_auto_login(); - if !p.is_empty() { - input_os_password(p, true, self.clone()); + if !is_cached_pi { + self.try_change_init_resolution(pi.current_display); + let p = self.lc.read().unwrap().should_auto_login(); + if !p.is_empty() { + input_os_password(p, true, self.clone()); + } } let current = &pi.displays[pi.current_display as usize]; self.set_display( @@ -1211,7 +1213,7 @@ impl Session { self.set_connection_type(is_secured, direct); } let pi = self.cache_flutter.read().unwrap().pi.clone(); - self.handle_peer_info(pi); + self.handle_peer_info(pi, true); if let Some(sp) = self.cache_flutter.read().unwrap().sp.as_ref() { self.handle_peer_switch_display(sp); } From 845fdec015f48add7952692475b1b0d8e1ca0019 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 13 Aug 2023 22:01:56 +0800 Subject: [PATCH 424/612] update displays Signed-off-by: dignow --- src/client/io_loop.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 4c0930f31..9e78b17a5 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -1506,6 +1506,12 @@ impl Remote { } } Some(message::Union::PeerInfo(pi)) => { + #[cfg(feature = "flutter")] + #[cfg(not(any(target_os = "android", target_os = "ios")))] + { + self.handler.cache_flutter.write().unwrap().pi.displays = + pi.displays.clone(); + } self.handler.set_displays(&pi.displays); } _ => {} From 0d6356c855b1a41b7401157a7bded7b56eee0da8 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 13 Aug 2023 22:38:37 +0800 Subject: [PATCH 425/612] Fix, do not restore resolution if it is not changed through the session Signed-off-by: dignow --- src/server/connection.rs | 14 +++-- src/server/video_service.rs | 102 ++++++++++++++---------------------- src/ui_session_interface.rs | 49 +++++++++++------ 3 files changed, 84 insertions(+), 81 deletions(-) diff --git a/src/server/connection.rs b/src/server/connection.rs index e32a4c1c3..486d52829 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1051,13 +1051,15 @@ impl Connection { ..Default::default() }) .into(); + // `try_reset_current_display` is needed because `get_displays` may change the current display, + // which may cause the mismatch of current display and the current display name. #[cfg(not(any(target_os = "android", target_os = "ios")))] video_service::try_reset_current_display(); #[cfg(not(any(target_os = "android", target_os = "ios")))] { pi.resolutions = Some(SupportedResolutions { - resolutions: video_service::get_current_display_name() - .map(|name| crate::platform::resolutions(&name)) + resolutions: video_service::get_current_display() + .map(|(_, _, d)| crate::platform::resolutions(&d.name())) .unwrap_or(vec![]), ..Default::default() }) @@ -1948,7 +1950,8 @@ impl Connection { #[cfg(not(any(target_os = "android", target_os = "ios")))] fn change_resolution(&mut self, r: &Resolution) { if self.keyboard { - if let Ok(name) = video_service::get_current_display_name() { + if let Ok((_, _, display)) = video_service::get_current_display() { + let name = display.name(); #[cfg(all(windows, feature = "virtual_display_driver"))] if let Some(_ok) = crate::virtual_display_manager::change_resolution_if_is_virtual_display( @@ -1959,6 +1962,11 @@ impl Connection { { return; } + video_service::set_last_changed_resolution( + &name, + (display.width() as _, display.height() as _), + (r.width, r.height), + ); if let Err(e) = crate::platform::change_resolution(&name, r.width as _, r.height as _) { diff --git a/src/server/video_service.rs b/src/server/video_service.rs index a74211fcd..d4578f547 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -52,6 +52,11 @@ use std::{ pub const NAME: &'static str = "video"; +struct ChangedResolution { + original: (i32, i32), + changed: (i32, i32), +} + lazy_static::lazy_static! { pub static ref CURRENT_DISPLAY: Arc> = Arc::new(Mutex::new(usize::MAX)); static ref LAST_ACTIVE: Arc> = Arc::new(Mutex::new(Instant::now())); @@ -66,58 +71,29 @@ lazy_static::lazy_static! { pub static ref IS_UAC_RUNNING: Arc> = Default::default(); pub static ref IS_FOREGROUND_WINDOW_ELEVATED: Arc> = Default::default(); pub static ref LAST_SYNC_DISPLAYS: Arc>> = Default::default(); - static ref ORIGINAL_RESOLUTIONS: Arc>> = Default::default(); + static ref CHANGED_RESOLUTIONS: Arc>> = Default::default(); } -// Not virtual display #[inline] -fn set_original_resolution_(display_name: &str, wh: (i32, i32)) -> (i32, i32) { - let mut original_resolutions = ORIGINAL_RESOLUTIONS.write().unwrap(); - match original_resolutions.get(display_name) { - Some(r) => r.clone(), +pub fn set_last_changed_resolution(display_name: &str, original: (i32, i32), changed: (i32, i32)) { + let mut lock = CHANGED_RESOLUTIONS.write().unwrap(); + match lock.get_mut(display_name) { + Some(res) => res.changed = changed, None => { - original_resolutions.insert(display_name.to_owned(), wh.clone()); - wh + lock.insert( + display_name.to_owned(), + ChangedResolution { original, changed }, + ); } } } -// Not virtual display -#[inline] -fn get_original_resolution_(display_name: &str) -> Option<(i32, i32)> { - ORIGINAL_RESOLUTIONS - .read() - .unwrap() - .get(display_name) - .map(|r| r.clone()) -} - -// Not virtual display -#[inline] -fn get_or_set_original_resolution_(display_name: &str, wh: (i32, i32)) -> (i32, i32) { - let r = get_original_resolution_(display_name); - if let Some(r) = r { - return r; - } - set_original_resolution_(display_name, wh) -} - -// Not virtual display -#[inline] -fn update_get_original_resolution_(display_name: &str, w: usize, h: usize) -> Resolution { - let wh = get_or_set_original_resolution_(display_name, (w as _, h as _)); - Resolution { - width: wh.0, - height: wh.1, - ..Default::default() - } -} - #[inline] #[cfg(not(any(target_os = "android", target_os = "ios")))] pub fn reset_resolutions() { - for (name, (w, h)) in ORIGINAL_RESOLUTIONS.read().unwrap().iter() { - if let Err(e) = crate::platform::change_resolution(name, *w as _, *h as _) { + for (name, res) in CHANGED_RESOLUTIONS.read().unwrap().iter() { + let (w, h) = res.original; + if let Err(e) = crate::platform::change_resolution(name, w as _, h as _) { log::error!( "Failed to reset resolution of display '{}' to ({},{}): {}", name, @@ -461,27 +437,17 @@ fn get_capturer(use_yuv: bool, portable_service_running: bool) -> ResultType Option> { let displays = try_get_displays().ok()?; let last_sync_displays = &*LAST_SYNC_DISPLAYS.read().unwrap(); - if displays.len() != last_sync_displays.len() { + // No need to check if the resolutions are changed by third process. Some(displays) } else { - for i in 0..displays.len() { - if displays[i].height() != (last_sync_displays[i].height as usize) { - return Some(displays); - } - if displays[i].width() != (last_sync_displays[i].width as usize) { - return Some(displays); - } - if displays[i].origin() != (last_sync_displays[i].x, last_sync_displays[i].y) { - return Some(displays); - } - } None } } fn check_get_displays_changed_msg() -> Option { let displays = check_displays_new()?; + // Display to DisplayInfo let (current, displays) = get_displays_2(&displays); let mut pi = PeerInfo { ..Default::default() @@ -537,7 +503,9 @@ fn run(sp: GenericService) -> ResultType<()> { if *SWITCH.lock().unwrap() { log::debug!("Broadcasting display switch"); let mut misc = Misc::new(); - let display_name = get_current_display_name().unwrap_or_default(); + let display_name = get_current_display() + .map(|(_, _, d)| d.name()) + .unwrap_or_default(); let original_resolution = get_original_resolution(&display_name, c.width, c.height); misc.set_switch_display(SwitchDisplay { display: c.current as _, @@ -895,7 +863,24 @@ fn get_original_resolution(display_name: &str, w: usize, h: usize) -> MessageFie ..Default::default() } } else { - update_get_original_resolution_(&display_name, w, h) + let mut changed_resolutions = CHANGED_RESOLUTIONS.write().unwrap(); + let (width, height) = match changed_resolutions.get(display_name) { + Some(res) => { + if res.changed.0 != w as i32 || res.changed.1 != h as i32 { + // If the resolution is changed by third process, remove the record in changed_resolutions. + changed_resolutions.remove(display_name); + (w as _, h as _) + } else { + res.original + } + } + None => (w as _, h as _), + }; + Resolution { + width, + height, + ..Default::default() + } }) .into() } @@ -1057,13 +1042,6 @@ pub fn get_current_display() -> ResultType<(usize, usize, Display)> { get_current_display_2(try_get_displays()?) } -// `try_reset_current_display` is needed because `get_displays` may change the current display, -// which may cause the mismatch of current display and the current display name. -#[inline] -pub fn get_current_display_name() -> ResultType { - Ok(get_current_display_2(try_get_displays()?)?.2.name()) -} - #[cfg(windows)] fn start_uac_elevation_check() { static START: Once = Once::new(); diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index bbf6d0aec..6d8000352 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -927,34 +927,49 @@ impl Session { } } - pub fn handle_peer_switch_display(&self, display: &SwitchDisplay) { - self.ui_handler.switch_display(display); - - if self.last_change_display.lock().unwrap().is_the_same_record( - display.display, - display.width, - display.height, - ) { - let custom_resolution = if display.width != display.original_resolution.width - || display.height != display.original_resolution.height - { - Some((display.width, display.height)) - } else { - None - }; + fn set_custom_resolution(&self, display: &SwitchDisplay) { + if display.width == display.original_resolution.width + && display.height == display.original_resolution.height + { self.lc .write() .unwrap() - .set_custom_resolution(display.display, custom_resolution); + .set_custom_resolution(display.display, None); + } else { + let last_change_display = self.last_change_display.lock().unwrap(); + if last_change_display.display == display.display { + let wh = if last_change_display.is_the_same_record( + display.display, + display.width, + display.height, + ) { + Some((display.width, display.height)) + } else { + // display origin is changed, or some other events. + None + }; + self.lc + .write() + .unwrap() + .set_custom_resolution(display.display, wh); + } } } + #[inline] + pub fn handle_peer_switch_display(&self, display: &SwitchDisplay) { + self.ui_handler.switch_display(display); + self.set_custom_resolution(display); + } + + #[inline] pub fn change_resolution(&self, display: i32, width: i32, height: i32) { *self.last_change_display.lock().unwrap() = ChangeDisplayRecord::new(display, width, height); self.do_change_resolution(width, height); } + #[inline] fn try_change_init_resolution(&self, display: i32) { if let Some((w, h)) = self.lc.read().unwrap().get_custom_resolution(display) { self.do_change_resolution(w, h); @@ -973,10 +988,12 @@ impl Session { self.send(Data::Message(msg)); } + #[inline] pub fn request_voice_call(&self) { self.send(Data::NewVoiceCall); } + #[inline] pub fn close_voice_call(&self) { self.send(Data::CloseVoiceCall); } From a5bba37cae2f7116a5d6de7db66c8e73ae55859b Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 13 Aug 2023 18:13:06 +0800 Subject: [PATCH 426/612] add tag color Signed-off-by: 21pages --- flutter/lib/common.dart | 24 ++++++ flutter/lib/common/widgets/address_book.dart | 45 ++++++---- flutter/lib/common/widgets/peer_card.dart | 88 +++++++++++++++++++- 3 files changed, 139 insertions(+), 18 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 520156efb..0db48c096 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1074,6 +1074,30 @@ Color str2color(String str, [alpha = 0xFF]) { return Color((hash & 0xFF7FFF) | (alpha << 24)); } +Color str2color2(String str, [alpha = 0xFF]) { + List colorList = [ + Colors.red, + Colors.green, + Colors.blue, + Colors.orange, + Colors.yellow, + Colors.purple, + Colors.grey, + Colors.cyan, + Colors.lime, + Colors.teal, + Colors.pink, + Colors.indigo, + Colors.brown, + ]; + var hash = 0; + for (var i = 0; i < str.length; i++) { + hash += str.codeUnitAt(i); + } + hash = hash % colorList.length; + return colorList[hash].withAlpha(alpha); +} + const K = 1024; const M = K * K; const G = M * K; diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index fa7d15b73..38701e246 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -449,26 +449,43 @@ class AddressBookTag extends StatelessWidget { pos = RelativeRect.fromLTRB(x, y, x, y); } + const double radius = 8; return GestureDetector( onTap: onTap, onTapDown: showActionMenu ? setPosition : null, onSecondaryTapDown: showActionMenu ? setPosition : null, onSecondaryTap: showActionMenu ? () => _showMenu(context, pos) : null, onLongPress: showActionMenu ? () => _showMenu(context, pos) : null, - child: Obx( - () => Container( - decoration: BoxDecoration( - color: tags.contains(name) - ? Colors.blue - : Theme.of(context).colorScheme.background, - borderRadius: BorderRadius.circular(6)), - margin: const EdgeInsets.symmetric(horizontal: 4.0, vertical: 8.0), - padding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 8.0), - child: Text(name, - style: - TextStyle(color: tags.contains(name) ? Colors.white : null)), - ), - ), + child: Obx(() => Container( + decoration: BoxDecoration( + color: tags.contains(name) + ? str2color2(name, 0xFF) + : Theme.of(context).colorScheme.background, + borderRadius: BorderRadius.circular(4)), + margin: const EdgeInsets.symmetric(horizontal: 4.0, vertical: 4.0), + padding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 6.0), + child: IntrinsicWidth( + child: Row( + children: [ + Container( + width: radius, + height: radius, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: tags.contains(name) + ? Colors.white + : str2color2(name)), + ).marginOnly(right: radius / 2), + Expanded( + child: Text(name, + style: TextStyle( + overflow: TextOverflow.ellipsis, + color: tags.contains(name) ? Colors.white : null)), + ), + ], + ), + ), + )), ); } diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 4d49bd496..1e147a736 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -14,6 +14,7 @@ import '../../models/peer_model.dart'; import '../../models/platform_model.dart'; import '../../desktop/widgets/material_mod_popup_menu.dart' as mod_menu; import '../../desktop/widgets/popup_menu.dart'; +import 'dart:math' as math; typedef PopupMenuEntryBuilder = Future>> Function(BuildContext); @@ -159,7 +160,7 @@ class _PeerCardState extends State<_PeerCard> fontSize: 11, color: Theme.of(context).textTheme.titleLarge?.color?.withOpacity(0.6)); final alias = bind.mainGetPeerOptionSync(id: peer.id, key: 'alias'); - return Obx( + final child = Obx( () => Container( foregroundDecoration: deco.value, child: Row( @@ -199,7 +200,7 @@ class _PeerCardState extends State<_PeerCard> overflow: TextOverflow.ellipsis, style: Theme.of(context).textTheme.titleSmall, )), - ]).marginOnly(bottom: 2), + ]).marginOnly(bottom: 0, top: 2), Align( alignment: Alignment.centerLeft, child: Text( @@ -221,13 +222,29 @@ class _PeerCardState extends State<_PeerCard> ), ), ); + final colors = _frontN(peer.tags, 25).map((e) => str2color2(e)).toList(); + return Tooltip( + message: peer.tags.isNotEmpty + ? '${translate('Tags')}: ${peer.tags.join(', ')}' + : '', + child: Stack(children: [ + child, + Positioned( + top: 2, + right: 10, + child: CustomPaint( + painter: TagPainter(radius: 3, colors: colors), + ), + ) + ]), + ); } Widget _buildPeerCard( BuildContext context, Peer peer, Rx deco) { final name = '${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}'; - return Card( + final child = Card( color: Colors.transparent, elevation: 0, margin: EdgeInsets.zero, @@ -253,7 +270,7 @@ class _PeerCardState extends State<_PeerCard> padding: const EdgeInsets.all(6), child: getPlatformImage(peer.platform, size: 60), - ), + ).marginOnly(top: 4), Row( children: [ Expanded( @@ -304,6 +321,31 @@ class _PeerCardState extends State<_PeerCard> ), ), ); + + final colors = _frontN(peer.tags, 25).map((e) => str2color2(e)).toList(); + return Tooltip( + message: peer.tags.isNotEmpty + ? '${translate('Tags')}: ${peer.tags.join(', ')}' + : '', + child: Stack(children: [ + child, + Positioned( + top: 4, + right: 12, + child: CustomPaint( + painter: TagPainter(radius: 4, colors: colors), + ), + ) + ]), + ); + } + + List _frontN(List list, int n) { + if (list.length <= n) { + return list; + } else { + return list.sublist(0, n); + } } Widget checkBoxOrActionMoreMobile(Peer peer) { @@ -1193,3 +1235,41 @@ Widget build_more(BuildContext context, {bool invert = false}) { ?.color ?.withOpacity(0.5))))); } + +class TagPainter extends CustomPainter { + final double radius; + late final List colors; + + TagPainter({required this.radius, required List colors}) { + this.colors = colors.reversed.toList(); + } + + @override + void paint(Canvas canvas, Size size) { + double x = 0; + double y = radius; + for (int i = 0; i < colors.length; i++) { + Paint paint = Paint(); + paint.color = colors[i]; + x -= radius + 1; + if (i == colors.length - 1) { + canvas.drawCircle(Offset(x, y), radius, paint); + } else { + Path path = Path(); + path.addArc(Rect.fromCircle(center: Offset(x, y), radius: radius), + math.pi * 4 / 3, math.pi * 4 / 3); + path.addArc( + Rect.fromCircle(center: Offset(x - radius, y), radius: radius), + math.pi * 5 / 3, + math.pi * 2 / 3); + path.fillType = PathFillType.evenOdd; + canvas.drawPath(path, paint); + } + } + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) { + return true; + } +} From 9eb1fd0151eb62e43478214f7bb81f4ffd2f30d3 Mon Sep 17 00:00:00 2001 From: solokot Date: Mon, 14 Aug 2023 09:41:31 +0300 Subject: [PATCH 427/612] Update ru.rs --- src/lang/ru.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 8f7a41360..f3e4db6d1 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -145,7 +145,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Failed to make direct connection to remote desktop", "Невозможно установить прямое подключение к удалённому рабочему столу"), ("Set Password", "Установить пароль"), ("OS Password", "Пароль ОС"), - ("install_tip", "В некоторых случаях из-за UAC RustDesk может работать неправильно на удалённом узле. Чтобы избежать UAC, нажмите кнопку ниже, чтобы установить RustDesk в системе."), + ("install_tip", "В некоторых случаях из-за UAC RustDesk может работать неправильно на удалённом узле. Чтобы избежать UAC, нажмите кнопку ниже для установки RustDesk в системе."), ("Click to upgrade", "Нажмите для проверки обновлений"), ("Click to download", "Нажмите для скачивания"), ("Click to update", "Нажмите для обновления"), @@ -521,19 +521,19 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service", "Сервис"), ("Start", "Запустить"), ("Stop", "Остановить"), - ("exceed_max_devices", "Достигнуто максимальне количество управляемых устройств."), + ("exceed_max_devices", "Достигнуто максимальное количество управляемых устройств."), ("Sync with recent sessions", "Синхронизация последних сессий"), ("Sort tags", "Сортировка меток"), ("Open connection in new tab", "Открыть подключение в новой вкладке"), ("Move tab to new window", "Переместить вкладку в отдельное окно"), ("Can not be empty", "Не может быть пустым"), ("Already exists", "Уже существует"), - ("Change Password", ""), - ("Refresh Password", ""), - ("ID", ""), - ("Grid View", ""), - ("List View", ""), - ("Select", ""), - ("Toggle Tags", ""), + ("Change Password", "Изменить пароль"), + ("Refresh Password", "Обновить пароль"), + ("ID", "ID"), + ("Grid View", "Сетка"), + ("List View", "Список"), + ("Select", "Выбор"), + ("Toggle Tags", "Переключить метки"), ].iter().cloned().collect(); } From d5a0d0cfa0dd0706c25e154d52557aa007d3b699 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Mon, 14 Aug 2023 09:15:17 +0200 Subject: [PATCH 428/612] Update italian language --- src/lang/it.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 290a2bebf..185fb3e43 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -528,12 +528,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", "Sposta scheda nella finestra successiva"), ("Can not be empty", "Non può essere vuoto"), ("Already exists", "Esiste già"), - ("Change Password", ""), - ("Refresh Password", ""), - ("ID", ""), - ("Grid View", ""), - ("List View", ""), - ("Select", ""), - ("Toggle Tags", ""), + ("Change Password", "Modifica password"), + ("Refresh Password", "Aggiorna password"), + ("ID", "ID"), + ("Grid View", "Vista griglia"), + ("List View", "Vista elenco"), + ("Select", "Seleziona"), + ("Toggle Tags", "Attiva/disattiva tag"), ].iter().cloned().collect(); } From 91d091aabaa959f97bd22b6fdb7e55daf8d96137 Mon Sep 17 00:00:00 2001 From: "Miguel F. G" <116861809+flusheDData@users.noreply.github.com> Date: Mon, 14 Aug 2023 10:47:17 +0200 Subject: [PATCH 429/612] Update es.rs New terms added --- src/lang/es.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lang/es.rs b/src/lang/es.rs index 088b131d2..475a4d72d 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -524,16 +524,16 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Has alcanzado el máximo número de dispositivos administrados."), ("Sync with recent sessions", "Sincronizar con sesiones recientes"), ("Sort tags", "Ordenar etiquetas"), - ("Open connection in new tab", ""), - ("Move tab to new window", ""), - ("Can not be empty", ""), - ("Already exists", ""), - ("Change Password", ""), - ("Refresh Password", ""), + ("Open connection in new tab", "Abrir conexión en nueva pestaña"), + ("Move tab to new window", "Mover pestaña a nueva ventana"), + ("Can not be empty", "No puede estar vacío"), + ("Already exists", "Ya existe"), + ("Change Password", "Cambiar contraseña"), + ("Refresh Password", "Refrescar contraseña"), ("ID", ""), - ("Grid View", ""), - ("List View", ""), - ("Select", ""), - ("Toggle Tags", ""), + ("Grid View", "Ver en Cuadrícula"), + ("List View", "Ver en Lista"), + ("Select", "Seleccionar"), + ("Toggle Tags", "Alternar Etiquetas"), ].iter().cloned().collect(); } From e205577145d52e2174a7bdc76d12b30123fa5e18 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 14 Aug 2023 18:28:31 +0800 Subject: [PATCH 430/612] refact, tab to window, flutter data, init commit Signed-off-by: dignow --- flutter/lib/consts.dart | 2 + .../lib/desktop/pages/remote_tab_page.dart | 34 ++++++++- flutter/lib/models/model.dart | 50 +++++++++++++- flutter/lib/utils/multi_window_manager.dart | 69 ++++++++++++------- 4 files changed, 127 insertions(+), 28 deletions(-) diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index b3ec3aa9d..0621bc807 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -5,6 +5,7 @@ import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/models/state_model.dart'; const double kDesktopRemoteTabBarHeight = 28.0; +const int kInvalidWindowId = -1; const int kMainWindowId = 0; const String kPeerPlatformWindows = "Windows"; @@ -39,6 +40,7 @@ const String kWindowEventGetSessionIdList = "get_session_id_list"; const String kWindowEventMoveTabToNewWindow = "move_tab_to_new_window"; const String kWindowEventCloseForSeparateWindow = "close_for_separate_window"; +const String kWindowEventSendNewWindowData = "send_new_window_data"; const String kOptionOpenNewConnInTabs = "enable-open-new-connections-in-tabs"; const String kOptionOpenInTabs = "allow-open-in-tabs"; diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 3762a2b52..01f4e5ca0 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/common/shared_state.dart'; import 'package:flutter_hbb/consts.dart'; +import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/models/state_model.dart'; import 'package:flutter_hbb/desktop/pages/remote_page.dart'; import 'package:flutter_hbb/desktop/widgets/remote_toolbar.dart'; @@ -148,9 +149,40 @@ class _ConnectionTabPageState extends State { .toList() .join(';'); } else if (call.method == kWindowEventCloseForSeparateWindow) { - final peerId = call.arguments; + debugPrint('REMOVE ME ============================= ${call.arguments}'); + final peerId = call.arguments['peerId']; + final newWindowId = call.arguments['newWindowId']; + late RemotePage page; + try { + page = tabController.state.value.tabs.firstWhere((tab) { + return tab.key == peerId; + }).page as RemotePage; + } catch (e) { + debugPrint('Failed to find tab for peerId $peerId'); + return false; + } + final sendRes = await rustDeskWinManager.call( + newWindowId, + kWindowEventSendNewWindowData, + page.ffi.ffiModel.cachedPeerData) as bool; + if (!sendRes) { + return false; + } + // Pass the required data to new window. closeSessionOnDispose[peerId] = false; tabController.closeBy(peerId); + return true; + } else if (call.method == kWindowEventSendNewWindowData) { + if (peerId == null) { + return false; + } + if (tabController.state.value.tabs.isEmpty) { + return false; + } + final page = tabController.state.value.tabs[0].page as RemotePage; + page.ffi.ffiModel + .handleCachedPeerData(call.arguments as CachedPeerData, peerId!); + return true; } _update_remote_count(); }); diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 4dc17f9c2..286e89a39 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -41,7 +41,19 @@ final _waitForImageDialogShow = {}; final _waitForFirstImage = {}; final _constSessionId = Uuid().v4obj(); +class CachedPeerData { + Map updatePrivacyMode = {}; + Map peerInfo = {}; + List> cursorDataList = []; + Map lastCursorId = {}; + bool secure = false; + bool direct = false; + + CachedPeerData(); +} + class FfiModel with ChangeNotifier { + CachedPeerData cachedPeerData = CachedPeerData(); PeerInfo _pi = PeerInfo(); Display _display = Display(); @@ -117,6 +129,8 @@ class FfiModel with ChangeNotifier { } setConnectionType(String peerId, bool secure, bool direct) { + cachedPeerData.secure = secure; + cachedPeerData.direct = direct; _secure = secure; _direct = direct; try { @@ -143,6 +157,22 @@ class FfiModel with ChangeNotifier { _permissions.clear(); } + handleCachedPeerData(CachedPeerData data, String peerId) async { + handleMsgBox({ + 'type': 'success', + 'title': 'Successful', + 'text': 'Connected, waiting for image...', + 'link': '', + }, sessionId, peerId); + updatePrivacyMode(data.updatePrivacyMode, sessionId, peerId); + setConnectionType(peerId, data.secure, data.direct); + handlePeerInfo(data.peerInfo, peerId); + for (var element in data.cursorDataList) { + handleCursorData(element); + } + handleCursorId(data.lastCursorId); + } + // todo: why called by two position StreamEventHandler startEventListener(SessionID sessionId, String peerId) { return (evt) async { @@ -159,9 +189,9 @@ class FfiModel with ChangeNotifier { } else if (name == 'switch_display') { handleSwitchDisplay(evt, sessionId, peerId); } else if (name == 'cursor_data') { - await parent.target?.cursorModel.updateCursorData(evt); + await handleCursorData(evt); } else if (name == 'cursor_id') { - await parent.target?.cursorModel.updateCursorId(evt); + await handleCursorId(evt); } else if (name == 'cursor_position') { await parent.target?.cursorModel.updateCursorPosition(evt, peerId); } else if (name == 'clipboard') { @@ -453,6 +483,8 @@ class FfiModel with ChangeNotifier { /// Handle the peer info event based on [evt]. handlePeerInfo(Map evt, String peerId) async { + cachedPeerData.peerInfo = evt; + // recent peer updated by handle_peer_info(ui_session_interface.rs) --> handle_peer_info(client.rs) --> save_config(client.rs) bind.mainLoadRecentPeers(); @@ -568,9 +600,20 @@ class FfiModel with ChangeNotifier { return d; } + handleCursorId(Map evt) async { + cachedPeerData.lastCursorId = evt; + await parent.target?.cursorModel.updateCursorId(evt); + } + + handleCursorData(Map evt) async { + cachedPeerData.cursorDataList.add(evt); + await parent.target?.cursorModel.updateCursorData(evt); + } + /// Handle the peer info synchronization event based on [evt]. handleSyncPeerInfo(Map evt, SessionID sessionId) async { if (evt['displays'] != null) { + cachedPeerData.peerInfo['displays'] = evt['displays']; List displays = json.decode(evt['displays']); List newDisplays = []; for (int i = 0; i < displays.length; ++i) { @@ -1667,7 +1710,8 @@ class FFI { stream.listen((message) { if (closed) return; if (isSessionAdded && !isToNewWindowNotified.value) { - bind.sessionReadyToNewWindow(sessionId: sessionId); + // bind.sessionReadyToNewWindow(sessionId: sessionId); + bind.sessionRefresh(sessionId: sessionId); isToNewWindowNotified.value = true; } () async { diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 3f7d995b7..4230182d6 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -28,6 +28,13 @@ extension Index on int { } } +class MultiWindowCallResult { + int windowId; + dynamic result; + + MultiWindowCallResult(this.windowId, this.result); +} + /// Window Manager /// mainly use it in `Main Window` /// use it in sub window is not recommended @@ -49,7 +56,10 @@ class RustDeskMultiWindowManager { 'id': peerId, 'session_id': sessionId, }; - await _newSession( + // It's better to use the window id that returned by _newSession. + // Do not pass original window id to _newSession, + // as this function cann't promise the necessary data is passed to new window. + final multiWindowRes = await _newSession( false, WindowType.RemoteDesktop, kWindowEventNewRemoteDesktop, @@ -57,17 +67,21 @@ class RustDeskMultiWindowManager { _remoteDesktopWindows, jsonEncode(params), ); + // kWindowEventCloseForSeparateWindow will not only close the tab, but also pass the required data to new window. await DesktopMultiWindow.invokeMethod( - windowId, kWindowEventCloseForSeparateWindow, peerId); + windowId, kWindowEventCloseForSeparateWindow, { + 'peerId': peerId, + 'newWindowId': multiWindowRes.windowId, + }); } - newSessionWindow( + Future newSessionWindow( WindowType type, String remoteId, String msg, List windows) async { final windowController = await DesktopMultiWindow.createWindow(msg); + final windowId = windowController.windowId; windowController - ..setFrame(const Offset(0, 0) & - Size(1280 + windowController.windowId * 20, - 720 + windowController.windowId * 20)) + ..setFrame( + const Offset(0, 0) & Size(1280 + windowId * 20, 720 + windowId * 20)) ..center() ..setTitle(getWindowNameWithId( remoteId, @@ -76,11 +90,12 @@ class RustDeskMultiWindowManager { if (Platform.isMacOS) { Future.microtask(() => windowController.show()); } - registerActiveWindow(windowController.windowId); - windows.add(windowController.windowId); + registerActiveWindow(windowId); + windows.add(windowId); + return windowId; } - _newSession( + Future _newSession( bool openInTabs, WindowType type, String methodName, @@ -90,9 +105,10 @@ class RustDeskMultiWindowManager { ) async { if (openInTabs) { if (windows.isEmpty) { - await newSessionWindow(type, remoteId, msg, windows); + final windowId = await newSessionWindow(type, remoteId, msg, windows); + return MultiWindowCallResult(windowId, null); } else { - call(type, methodName, msg); + return call(type, methodName, msg); } } else { if (_inactiveWindows.isNotEmpty) { @@ -103,15 +119,16 @@ class RustDeskMultiWindowManager { await DesktopMultiWindow.invokeMethod(windowId, methodName, msg); WindowController.fromWindowId(windowId).show(); registerActiveWindow(windowId); - return; + return MultiWindowCallResult(windowId, null); } } } - await newSessionWindow(type, remoteId, msg, windows); + final windowId = await newSessionWindow(type, remoteId, msg, windows); + return MultiWindowCallResult(windowId, null); } } - Future newSession( + Future newSession( WindowType type, String methodName, String remoteId, @@ -143,15 +160,15 @@ class RustDeskMultiWindowManager { for (final windowId in windows) { if (await DesktopMultiWindow.invokeMethod( windowId, kWindowEventActiveSession, remoteId)) { - return; + return MultiWindowCallResult(windowId, null); } } } - await _newSession(openInTabs, type, methodName, remoteId, windows, msg); + return _newSession(openInTabs, type, methodName, remoteId, windows, msg); } - Future newRemoteDesktop( + Future newRemoteDesktop( String remoteId, { String? password, String? switchUuid, @@ -168,7 +185,7 @@ class RustDeskMultiWindowManager { ); } - Future newFileTransfer(String remoteId, + Future newFileTransfer(String remoteId, {String? password, bool? forceRelay}) async { return await newSession( WindowType.FileTransfer, @@ -180,7 +197,7 @@ class RustDeskMultiWindowManager { ); } - Future newPortForward(String remoteId, bool isRDP, + Future newPortForward(String remoteId, bool isRDP, {String? password, bool? forceRelay}) async { return await newSession( WindowType.PortForward, @@ -193,18 +210,22 @@ class RustDeskMultiWindowManager { ); } - Future call(WindowType type, String methodName, dynamic args) async { + Future call( + WindowType type, String methodName, dynamic args) async { final wnds = _findWindowsByType(type); if (wnds.isEmpty) { - return; + return MultiWindowCallResult(kInvalidWindowId, null); } for (final windowId in wnds) { if (_activeWindows.contains(windowId)) { - return await DesktopMultiWindow.invokeMethod( - windowId, methodName, args); + final res = + await DesktopMultiWindow.invokeMethod(windowId, methodName, args); + return MultiWindowCallResult(windowId, res); } } - return await DesktopMultiWindow.invokeMethod(wnds[0], methodName, args); + final res = + await DesktopMultiWindow.invokeMethod(wnds[0], methodName, args); + return MultiWindowCallResult(wnds[0], res); } List _findWindowsByType(WindowType type) { From fad88c27189a0cd9f5b93f19240991e66e95cc5f Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 14 Aug 2023 20:40:58 +0800 Subject: [PATCH 431/612] refact, tab to window, remove rust cache data Signed-off-by: dignow --- flutter/lib/consts.dart | 3 +- .../desktop/pages/desktop_setting_page.dart | 1 - flutter/lib/desktop/pages/remote_page.dart | 5 +- .../lib/desktop/pages/remote_tab_page.dart | 49 +++++---------- .../lib/desktop/widgets/remote_toolbar.dart | 2 +- .../lib/models/desktop_render_texture.dart | 8 +-- flutter/lib/models/model.dart | 63 ++++++++++++++++--- flutter/lib/utils/multi_window_manager.dart | 12 +--- src/client.rs | 2 +- src/client/io_loop.rs | 49 +-------------- src/flutter.rs | 8 ++- src/flutter_ffi.rs | 8 --- src/port_forward.rs | 2 +- src/ui_cm_interface.rs | 1 + src/ui_session_interface.rs | 43 ++----------- 15 files changed, 100 insertions(+), 156 deletions(-) diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 0621bc807..25c3e16a1 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -39,8 +39,7 @@ const String kWindowEventGetRemoteList = "get_remote_list"; const String kWindowEventGetSessionIdList = "get_session_id_list"; const String kWindowEventMoveTabToNewWindow = "move_tab_to_new_window"; -const String kWindowEventCloseForSeparateWindow = "close_for_separate_window"; -const String kWindowEventSendNewWindowData = "send_new_window_data"; +const String kWindowEventGetCachedSessionData = "get_cached_session_data"; const String kOptionOpenNewConnInTabs = "enable-open-new-connections-in-tabs"; const String kOptionOpenInTabs = "allow-open-in-tabs"; diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index b868042a4..8d5ddb7dc 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -17,7 +17,6 @@ import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:flutter_hbb/desktop/widgets/scroll_wrapper.dart'; -import 'package:window_manager/window_manager.dart'; import '../../common/widgets/dialog.dart'; import '../../common/widgets/login.dart'; diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 28212e4ca..2daffaccf 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -35,6 +35,7 @@ class RemotePage extends StatefulWidget { Key? key, required this.id, required this.sessionId, + required this.tabWindowId, required this.password, required this.toolbarState, required this.tabController, @@ -44,6 +45,7 @@ class RemotePage extends StatefulWidget { final String id; final SessionID? sessionId; + final int? tabWindowId; final String? password; final ToolbarState toolbarState; final String? switchUuid; @@ -106,6 +108,7 @@ class _RemotePageState extends State password: widget.password, switchUuid: widget.switchUuid, forceRelay: widget.forceRelay, + tabWindowId: widget.tabWindowId, ); WidgetsBinding.instance.addPostFrameCallback((_) { SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []); @@ -204,7 +207,7 @@ class _RemotePageState extends State // https://github.com/flutter/flutter/issues/64935 super.dispose(); debugPrint("REMOTE PAGE dispose session $sessionId ${widget.id}"); - await _renderTexture.destroy(); + await _renderTexture.destroy(widget.tabWindowId != null); // ensure we leave this session, this is a double check bind.sessionEnterOrLeave(sessionId: sessionId, enter: false); DesktopMultiWindow.removeListener(this); diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 01f4e5ca0..51bcec51d 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -7,7 +7,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/common/shared_state.dart'; import 'package:flutter_hbb/consts.dart'; -import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/models/state_model.dart'; import 'package:flutter_hbb/desktop/pages/remote_page.dart'; import 'package:flutter_hbb/desktop/widgets/remote_toolbar.dart'; @@ -56,6 +55,7 @@ class _ConnectionTabPageState extends State { RemoteCountState.init(); peerId = params['id']; final sessionId = params['session_id']; + final tabWindowId = params['tab_window_id']; if (peerId != null) { ConnectionTypeState.init(peerId!); tabController.onSelected = (id) { @@ -78,6 +78,7 @@ class _ConnectionTabPageState extends State { key: ValueKey(peerId), id: peerId!, sessionId: sessionId == null ? null : SessionID(sessionId), + tabWindowId: tabWindowId, password: params['password'], toolbarState: _toolbarState, tabController: tabController, @@ -99,12 +100,14 @@ class _ConnectionTabPageState extends State { print( "[Remote Page] call ${call.method} with args ${call.arguments} from window $fromWindowId"); + dynamic returnValue; // for simplify, just replace connectionId if (call.method == kWindowEventNewRemoteDesktop) { final args = jsonDecode(call.arguments); final id = args['id']; final switchUuid = args['switch_uuid']; final sessionId = args['session_id']; + final tabWindowId = args['tab_window_id']; windowOnTop(windowId()); ConnectionTypeState.init(id); _toolbarState.setShow( @@ -119,6 +122,7 @@ class _ConnectionTabPageState extends State { key: ValueKey(id), id: id, sessionId: sessionId == null ? null : SessionID(sessionId), + tabWindowId: tabWindowId, password: args['password'], toolbarState: _toolbarState, tabController: tabController, @@ -148,43 +152,24 @@ class _ConnectionTabPageState extends State { .map((e) => '${e.key},${(e.page as RemotePage).ffi.sessionId}') .toList() .join(';'); - } else if (call.method == kWindowEventCloseForSeparateWindow) { - debugPrint('REMOVE ME ============================= ${call.arguments}'); - final peerId = call.arguments['peerId']; - final newWindowId = call.arguments['newWindowId']; - late RemotePage page; + } else if (call.method == kWindowEventGetCachedSessionData) { + // Ready to show new window and close old tab. + final peerId = call.arguments; try { - page = tabController.state.value.tabs.firstWhere((tab) { - return tab.key == peerId; - }).page as RemotePage; + final remotePage = tabController.state.value.tabs + .firstWhere((tab) => tab.key == peerId) + .page as RemotePage; + returnValue = remotePage.ffi.ffiModel.cachedPeerData.toString(); } catch (e) { - debugPrint('Failed to find tab for peerId $peerId'); - return false; + debugPrint('Failed to get cached session data: $e'); } - final sendRes = await rustDeskWinManager.call( - newWindowId, - kWindowEventSendNewWindowData, - page.ffi.ffiModel.cachedPeerData) as bool; - if (!sendRes) { - return false; + if (returnValue != null) { + closeSessionOnDispose[peerId] = false; + tabController.closeBy(peerId); } - // Pass the required data to new window. - closeSessionOnDispose[peerId] = false; - tabController.closeBy(peerId); - return true; - } else if (call.method == kWindowEventSendNewWindowData) { - if (peerId == null) { - return false; - } - if (tabController.state.value.tabs.isEmpty) { - return false; - } - final page = tabController.state.value.tabs[0].page as RemotePage; - page.ffi.ffiModel - .handleCachedPeerData(call.arguments as CachedPeerData, peerId!); - return true; } _update_remote_count(); + return returnValue; }); Future.delayed(Duration.zero, () { restoreWindowPosition( diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 6a72fc3a1..9d6dec496 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -771,7 +771,7 @@ class ScreenAdjustor { updateScreen() async { final v = await rustDeskWinManager.call( WindowType.Main, kWindowGetWindowInfo, ''); - final String valueStr = v; + final String valueStr = v.result; if (valueStr.isEmpty) { _screen = null; } else { diff --git a/flutter/lib/models/desktop_render_texture.dart b/flutter/lib/models/desktop_render_texture.dart index f59373623..f8456e339 100644 --- a/flutter/lib/models/desktop_render_texture.dart +++ b/flutter/lib/models/desktop_render_texture.dart @@ -1,4 +1,3 @@ -import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:texture_rgba_renderer/texture_rgba_renderer.dart'; @@ -21,7 +20,6 @@ class RenderTexture { _sessionId = sessionId; textureRenderer.createTexture(_textureKey).then((id) async { - debugPrint("id: $id, texture_key: $_textureKey"); if (id != -1) { final ptr = await textureRenderer.getTexturePtr(_textureKey); platformFFI.registerTexture(sessionId, ptr); @@ -31,9 +29,11 @@ class RenderTexture { } } - destroy() async { + destroy(bool unregisterTexture) async { if (useTextureRender && _textureKey != -1 && _sessionId != null) { - platformFFI.registerTexture(_sessionId!, 0); + if (unregisterTexture) { + platformFFI.registerTexture(_sessionId!, 0); + } await textureRenderer.closeTexture(_textureKey); _textureKey = -1; } diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 286e89a39..4d0e30e3e 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'dart:math'; import 'dart:ui' as ui; +import 'package:desktop_multi_window/desktop_multi_window.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/consts.dart'; @@ -50,6 +51,37 @@ class CachedPeerData { bool direct = false; CachedPeerData(); + + @override + String toString() { + return jsonEncode({ + 'updatePrivacyMode': updatePrivacyMode, + 'peerInfo': peerInfo, + 'cursorDataList': cursorDataList, + 'lastCursorId': lastCursorId, + 'secure': secure, + 'direct': direct, + }); + } + + static CachedPeerData? fromString(String s) { + try { + final map = jsonDecode(s); + final data = CachedPeerData(); + data.updatePrivacyMode = map['updatePrivacyMode']; + data.peerInfo = map['peerInfo']; + for (final cursorData in map['cursorDataList']) { + data.cursorDataList.add(cursorData); + } + data.lastCursorId = map['lastCursorId']; + data.secure = map['secure']; + data.direct = map['direct']; + return data; + } catch (e) { + debugPrint('Failed to parse CachedPeerData: $e'); + return null; + } + } } class FfiModel with ChangeNotifier { @@ -1628,7 +1660,6 @@ class FFI { /// dialogManager use late to ensure init after main page binding [globalKey] late final dialogManager = OverlayDialogManager(); - late final bool isSessionAdded; late final SessionID sessionId; late final ImageModel imageModel; // session late final FfiModel ffiModel; // session @@ -1647,7 +1678,6 @@ class FFI { late final ElevationModel elevationModel; // session FFI(SessionID? sId) { - isSessionAdded = sId != null; sessionId = sId ?? (isDesktop ? Uuid().v4obj() : _constSessionId); imageModel = ImageModel(WeakReference(this)); ffiModel = FfiModel(WeakReference(this)); @@ -1673,7 +1703,8 @@ class FFI { bool isRdp = false, String? switchUuid, String? password, - bool? forceRelay}) { + bool? forceRelay, + int? tabWindowId}) { closed = false; auditNote = ''; assert(!(isFileTransfer && isPortForward), 'more than one connect type'); @@ -1688,7 +1719,9 @@ class FFI { imageModel.id = id; cursorModel.id = id; } - if (!isSessionAdded) { + // If tabWindowId != null, this session is a "tab -> window" one. + // Else this session is a new one. + if (tabWindowId == null) { // ignore: unused_local_variable final addRes = bind.sessionAddSync( sessionId: sessionId, @@ -1709,9 +1742,25 @@ class FFI { // Preserved for the rgba data. stream.listen((message) { if (closed) return; - if (isSessionAdded && !isToNewWindowNotified.value) { - // bind.sessionReadyToNewWindow(sessionId: sessionId); - bind.sessionRefresh(sessionId: sessionId); + if (tabWindowId != null && !isToNewWindowNotified.value) { + // Session is read to be moved to a new window. + // Get the cached data and handle the cached data. + Future.delayed(Duration.zero, () async { + final cachedData = await DesktopMultiWindow.invokeMethod( + tabWindowId, kWindowEventGetCachedSessionData, id); + if (cachedData == null) { + // unreachable + debugPrint('Unreachable, the cached data is empty.'); + return; + } + final data = CachedPeerData.fromString(cachedData); + if (data == null) { + debugPrint('Unreachable, the cached data cannot be decoded.'); + return; + } + ffiModel.handleCachedPeerData(data, id); + await bind.sessionRefresh(sessionId: sessionId); + }); isToNewWindowNotified.value = true; } () async { diff --git a/flutter/lib/utils/multi_window_manager.dart b/flutter/lib/utils/multi_window_manager.dart index 4230182d6..a8be78c74 100644 --- a/flutter/lib/utils/multi_window_manager.dart +++ b/flutter/lib/utils/multi_window_manager.dart @@ -54,12 +54,10 @@ class RustDeskMultiWindowManager { var params = { 'type': WindowType.RemoteDesktop.index, 'id': peerId, + 'tab_window_id': windowId, 'session_id': sessionId, }; - // It's better to use the window id that returned by _newSession. - // Do not pass original window id to _newSession, - // as this function cann't promise the necessary data is passed to new window. - final multiWindowRes = await _newSession( + await _newSession( false, WindowType.RemoteDesktop, kWindowEventNewRemoteDesktop, @@ -67,12 +65,6 @@ class RustDeskMultiWindowManager { _remoteDesktopWindows, jsonEncode(params), ); - // kWindowEventCloseForSeparateWindow will not only close the tab, but also pass the required data to new window. - await DesktopMultiWindow.invokeMethod( - windowId, kWindowEventCloseForSeparateWindow, { - 'peerId': peerId, - 'newWindowId': multiWindowRes.windowId, - }); } Future newSessionWindow( diff --git a/src/client.rs b/src/client.rs index 84f338c63..798550467 100644 --- a/src/client.rs +++ b/src/client.rs @@ -2366,7 +2366,7 @@ pub trait Interface: Send + Clone + 'static + Sized { fn send(&self, data: Data); fn msgbox(&self, msgtype: &str, title: &str, text: &str, link: &str); fn handle_login_error(&mut self, err: &str) -> bool; - fn handle_peer_info(&mut self, pi: PeerInfo, is_cached_pi: bool); + fn handle_peer_info(&mut self, pi: PeerInfo); fn on_error(&self, err: &str) { self.msgbox("error", "Error", err, ""); } diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index 9e78b17a5..aaf426e28 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -125,18 +125,7 @@ impl Remote { .await { Ok((mut peer, direct, pk)) => { - let is_secured = peer.is_secured(); - #[cfg(feature = "flutter")] - #[cfg(not(any(target_os = "android", target_os = "ios")))] - { - self.handler - .cache_flutter - .write() - .unwrap() - .is_secured_direct - .replace((is_secured, direct)); - } - self.handler.set_connection_type(is_secured, direct); // flutter -> connection_ready + self.handler.set_connection_type(peer.is_secured(), direct); // flutter -> connection_ready self.handler.update_direct(Some(direct)); if conn_type == ConnType::DEFAULT_CONN { self.handler @@ -1021,12 +1010,7 @@ impl Remote { } } Some(login_response::Union::PeerInfo(pi)) => { - #[cfg(feature = "flutter")] - #[cfg(not(any(target_os = "android", target_os = "ios")))] - { - self.handler.cache_flutter.write().unwrap().pi = pi.clone(); - } - self.handler.handle_peer_info(pi, false); + self.handler.handle_peer_info(pi); #[cfg(not(feature = "flutter"))] self.check_clipboard_file_context(); if !(self.handler.is_file_transfer() || self.handler.is_port_forward()) { @@ -1073,22 +1057,9 @@ impl Remote { _ => {} }, Some(message::Union::CursorData(cd)) => { - #[cfg(feature = "flutter")] - #[cfg(not(any(target_os = "android", target_os = "ios")))] - { - let mut lock = self.handler.cache_flutter.write().unwrap(); - if !lock.cursor_data.contains_key(&cd.id) { - lock.cursor_data.insert(cd.id, cd.clone()); - } - } self.handler.set_cursor_data(cd); } Some(message::Union::CursorId(id)) => { - #[cfg(feature = "flutter")] - #[cfg(not(any(target_os = "android", target_os = "ios")))] - { - self.handler.cache_flutter.write().unwrap().cursor_id = id; - } self.handler.set_cursor_id(id.to_string()); } Some(message::Union::CursorPosition(cp)) => { @@ -1305,16 +1276,6 @@ impl Remote { } } Some(misc::Union::SwitchDisplay(s)) => { - #[cfg(feature = "flutter")] - #[cfg(not(any(target_os = "android", target_os = "ios")))] - { - self.handler - .cache_flutter - .write() - .unwrap() - .sp - .replace(s.clone()); - } self.handler.handle_peer_switch_display(&s); self.video_sender.send(MediaData::Reset).ok(); if s.width > 0 && s.height > 0 { @@ -1506,12 +1467,6 @@ impl Remote { } } Some(message::Union::PeerInfo(pi)) => { - #[cfg(feature = "flutter")] - #[cfg(not(any(target_os = "android", target_os = "ios")))] - { - self.handler.cache_flutter.write().unwrap().pi.displays = - pi.displays.clone(); - } self.handler.set_displays(&pi.displays); } _ => {} diff --git a/src/flutter.rs b/src/flutter.rs index 52190ce2e..1feb6b118 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -36,9 +36,11 @@ pub(crate) const APP_TYPE_CM: &str = "cm"; #[cfg(any(target_os = "android", target_os = "ios"))] pub(crate) const APP_TYPE_CM: &str = "main"; -pub(crate) const APP_TYPE_DESKTOP_REMOTE: &str = "remote"; -pub(crate) const APP_TYPE_DESKTOP_FILE_TRANSFER: &str = "file transfer"; -pub(crate) const APP_TYPE_DESKTOP_PORT_FORWARD: &str = "port forward"; +// Do not remove the following constants. +// Uncomment them when they are used. +// pub(crate) const APP_TYPE_DESKTOP_REMOTE: &str = "remote"; +// pub(crate) const APP_TYPE_DESKTOP_FILE_TRANSFER: &str = "file transfer"; +// pub(crate) const APP_TYPE_DESKTOP_PORT_FORWARD: &str = "port forward"; lazy_static::lazy_static! { pub(crate) static ref CUR_SESSION_ID: RwLock = Default::default(); diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index ab7acc104..c36d56665 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -597,14 +597,6 @@ pub fn session_change_resolution(session_id: SessionID, display: i32, width: i32 } } -pub fn session_ready_to_new_window(session_id: SessionID) { - #[cfg(not(any(target_os = "android", target_os = "ios")))] - if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) { - session.restore_flutter_cache(); - session.refresh_video(); - } -} - pub fn session_set_size(_session_id: SessionID, _width: usize, _height: usize) { #[cfg(feature = "flutter_texture_render")] if let Some(session) = SESSIONS.write().unwrap().get_mut(&_session_id) { diff --git a/src/port_forward.rs b/src/port_forward.rs index 1e918cce1..6a087abe2 100644 --- a/src/port_forward.rs +++ b/src/port_forward.rs @@ -146,7 +146,7 @@ async fn connect_and_login( return Ok(None); } Some(login_response::Union::PeerInfo(pi)) => { - interface.handle_peer_info(pi, false); + interface.handle_peer_info(pi); break; } _ => {} diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 29828d6b7..16fa59631 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -325,6 +325,7 @@ impl IpcTaskRunner { // for tmp use, without real conn id let mut write_jobs: Vec = Vec::new(); + #[cfg(windows)] let is_authorized = self.cm.is_authorized(self.conn_id); #[cfg(windows)] diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 1fdff8144..eb902e3a9 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -48,17 +48,6 @@ pub static IS_IN: AtomicBool = AtomicBool::new(false); const CHANGE_RESOLUTION_VALID_TIMEOUT_SECS: u64 = 15; -#[cfg(feature = "flutter")] -#[cfg(not(any(target_os = "android", target_os = "ios")))] -#[derive(Default)] -pub struct CacheFlutter { - pub pi: PeerInfo, - pub sp: Option, - pub cursor_data: HashMap, - pub cursor_id: u64, - pub is_secured_direct: Option<(bool, bool)>, -} - #[derive(Clone, Default)] pub struct Session { pub session_id: SessionID, // different from the one in LoginConfigHandler, used for flutter UI message pass @@ -73,9 +62,6 @@ pub struct Session { pub server_file_transfer_enabled: Arc>, pub server_clipboard_enabled: Arc>, pub last_change_display: Arc>, - #[cfg(feature = "flutter")] - #[cfg(not(any(target_os = "android", target_os = "ios")))] - pub cache_flutter: Arc>, } #[derive(Clone)] @@ -1095,7 +1081,7 @@ impl Interface for Session { handle_login_error(self.lc.clone(), err, self) } - fn handle_peer_info(&mut self, mut pi: PeerInfo, is_cached_pi: bool) { + fn handle_peer_info(&mut self, mut pi: PeerInfo) { log::debug!("handle_peer_info :{:?}", pi); pi.username = self.lc.read().unwrap().get_username(&pi); if pi.current_display as usize >= pi.displays.len() { @@ -1116,12 +1102,10 @@ impl Interface for Session { self.msgbox("error", "Remote Error", "No Display", ""); return; } - if !is_cached_pi { - self.try_change_init_resolution(pi.current_display); - let p = self.lc.read().unwrap().should_auto_login(); - if !p.is_empty() { - input_os_password(p, true, self.clone()); - } + self.try_change_init_resolution(pi.current_display); + let p = self.lc.read().unwrap().should_auto_login(); + if !p.is_empty() { + input_os_password(p, true, self.clone()); } let current = &pi.displays[pi.current_display as usize]; self.set_display( @@ -1222,23 +1206,6 @@ impl Session { pub fn ctrl_alt_del(&self) { self.send_key_event(&crate::keyboard::client::event_ctrl_alt_del()); } - - #[cfg(feature = "flutter")] - #[cfg(not(any(target_os = "android", target_os = "ios")))] - pub fn restore_flutter_cache(&mut self) { - if let Some((is_secured, direct)) = self.cache_flutter.read().unwrap().is_secured_direct { - self.set_connection_type(is_secured, direct); - } - let pi = self.cache_flutter.read().unwrap().pi.clone(); - self.handle_peer_info(pi, true); - if let Some(sp) = self.cache_flutter.read().unwrap().sp.as_ref() { - self.handle_peer_switch_display(sp); - } - for (_, cd) in self.cache_flutter.read().unwrap().cursor_data.iter() { - self.set_cursor_data(cd.clone()); - } - self.set_cursor_id(self.cache_flutter.read().unwrap().cursor_id.to_string()); - } } #[tokio::main(flavor = "current_thread")] From b2f5e2f92719ca9dce9ee725ba06cd01f95ebd9d Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 13 Aug 2023 14:46:04 +0800 Subject: [PATCH 432/612] ab:deal push error, show error banner, fix splash empty by remove reset Signed-off-by: 21pages --- flutter/lib/common/widgets/address_book.dart | 81 +++++++-- flutter/lib/common/widgets/peer_card.dart | 30 ++-- flutter/lib/main.dart | 2 + flutter/lib/models/ab_model.dart | 175 ++++++++++++------- flutter/lib/models/user_model.dart | 2 +- src/lang/ca.rs | 2 + src/lang/cn.rs | 2 + src/lang/cs.rs | 2 + src/lang/da.rs | 2 + src/lang/de.rs | 2 + src/lang/el.rs | 2 + src/lang/en.rs | 2 + src/lang/eo.rs | 2 + src/lang/es.rs | 2 + src/lang/fa.rs | 2 + src/lang/fr.rs | 2 + src/lang/hu.rs | 2 + src/lang/id.rs | 2 + src/lang/it.rs | 2 + src/lang/ja.rs | 2 + src/lang/ko.rs | 2 + src/lang/kz.rs | 2 + src/lang/lt.rs | 2 + src/lang/nl.rs | 2 + src/lang/pl.rs | 2 + src/lang/pt_PT.rs | 2 + src/lang/ptbr.rs | 2 + src/lang/ro.rs | 2 + src/lang/ru.rs | 2 + src/lang/sk.rs | 2 + src/lang/sl.rs | 2 + src/lang/sq.rs | 2 + src/lang/sr.rs | 2 + src/lang/sv.rs | 2 + src/lang/template.rs | 2 + src/lang/th.rs | 2 + src/lang/tr.rs | 2 + src/lang/tw.rs | 2 + src/lang/ua.rs | 2 + src/lang/vn.rs | 2 + 40 files changed, 262 insertions(+), 98 deletions(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index bf86de0ff..fd4694a8b 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -45,12 +45,17 @@ class _AddressBookState extends State { child: CircularProgressIndicator(), ); } - if (gFFI.abModel.abError.isNotEmpty) { - return _buildShowError(gFFI.abModel.abError.value); - } return Column( children: [ - _buildLoadingHavingPeers(), + _buildNotEmptyLoading(), + _buildErrorBanner( + err: gFFI.abModel.pullError, + retry: null, + close: () => gFFI.abModel.pullError.value = ''), + _buildErrorBanner( + err: gFFI.abModel.pushError, + retry: () => gFFI.abModel.pushAb(), + close: () => gFFI.abModel.pushError.value = ''), Expanded( child: isDesktop ? _buildAddressBookDesktop() @@ -60,22 +65,62 @@ class _AddressBookState extends State { } }); - Widget _buildShowError(String error) { - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text(translate(error)), - TextButton( - onPressed: () { - gFFI.abModel.pullAb(); - }, - child: Text(translate("Retry"))) - ], - )); + Widget _buildErrorBanner( + {required RxString err, + required Function? retry, + required Function close}) { + const double height = 25; + return Obx(() => Offstage( + offstage: !(!gFFI.abModel.abLoading.value && err.value.isNotEmpty), + child: Center( + child: Container( + height: height, + color: Color.fromARGB(255, 253, 238, 235), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + FittedBox( + child: Icon( + Icons.info, + color: Color.fromARGB(255, 249, 81, 81), + ), + ).marginAll(4), + Flexible( + child: Align( + alignment: Alignment.centerLeft, + child: Tooltip( + message: translate(err.value), + child: Text( + translate(err.value), + overflow: TextOverflow.ellipsis, + ), + )).marginSymmetric(vertical: 2), + ), + if (retry != null) + InkWell( + onTap: () { + retry.call(); + }, + child: Text( + translate("Retry"), + style: TextStyle(color: MyTheme.accent), + )).marginSymmetric(horizontal: 5), + FittedBox( + child: InkWell( + onTap: () { + close.call(); + }, + child: Icon(Icons.close).marginSymmetric(horizontal: 5), + ), + ).marginAll(4) + ], + ), + )).marginOnly(bottom: 14), + )); } - Widget _buildLoadingHavingPeers() { + Widget _buildNotEmptyLoading() { double size = 15; return Obx(() => Offstage( offstage: !(gFFI.abModel.abLoading.value && !gFFI.abModel.emtpy), diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index b046cd504..5ace63fb8 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -229,13 +229,14 @@ class _PeerCardState extends State<_PeerCard> : '', child: Stack(children: [ child, - Positioned( - top: 2, - right: 10, - child: CustomPaint( - painter: TagPainter(radius: 3, colors: colors), - ), - ) + if (colors.isNotEmpty) + Positioned( + top: 2, + right: 10, + child: CustomPaint( + painter: TagPainter(radius: 3, colors: colors), + ), + ) ]), ); } @@ -329,13 +330,14 @@ class _PeerCardState extends State<_PeerCard> : '', child: Stack(children: [ child, - Positioned( - top: 4, - right: 12, - child: CustomPaint( - painter: TagPainter(radius: 4, colors: colors), - ), - ) + if (colors.isNotEmpty) + Positioned( + top: 4, + right: 12, + child: CustomPaint( + painter: TagPainter(radius: 4, colors: colors), + ), + ) ]), ); } diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index ef3862aac..dbf563de2 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -125,6 +125,7 @@ void runMainApp(bool startService) async { bind.pluginSyncUi(syncTo: kAppTypeMain); bind.pluginListReload(); } + gFFI.abModel.loadCache(); gFFI.userModel.refreshCurrentUser(); runApp(App()); // Set window option. @@ -152,6 +153,7 @@ void runMobileApp() async { await initEnv(kAppTypeMain); if (isAndroid) androidChannelInit(); platformFFI.syncAndroidServiceAppDirConfigPath(); + gFFI.abModel.loadCache(); gFFI.userModel.refreshCurrentUser(); runApp(App()); } diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 9a7a42d31..f1722efe9 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -5,6 +5,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/models/peer_model.dart'; +import 'package:flutter_hbb/models/peer_tab_model.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:get/get.dart'; import 'package:bot_toast/bot_toast.dart'; @@ -24,7 +25,8 @@ bool shouldSortTags() { class AbModel { final abLoading = false.obs; - final abError = "".obs; + final pullError = "".obs; + final pushError = "".obs; final tags = [].obs; final peers = List.empty(growable: true).obs; final sortTags = shouldSortTags().obs; @@ -33,8 +35,10 @@ class AbModel { final selectedTags = List.empty(growable: true).obs; var initialized = false; var licensedDevices = 0; - var sync_all_from_recent = true; + var _syncAllFromRecent = true; + var _syncFromRecentLock = false; var _timerCounter = 0; + var _cacheLoadOnceFlag = false; WeakReference parent; @@ -51,12 +55,15 @@ class AbModel { if (gFFI.userModel.userName.isEmpty) return; if (abLoading.value) return; if (!force && initialized) return; - if (!initialized) { - await _loadCache(); + if (pushError.isNotEmpty) { + try { + // push to retry + pushAb(toast: false); + } catch (_) {} } if (!quiet) { abLoading.value = true; - abError.value = ""; + pullError.value = ""; } final api = "${await bind.mainGetApiServer()}/api/ab"; int? statusCode; @@ -66,19 +73,22 @@ class AbModel { authHeaders['Accept-Encoding'] = "gzip"; final resp = await http.get(Uri.parse(api), headers: authHeaders); statusCode = resp.statusCode; - if (resp.body.isNotEmpty && resp.body.toLowerCase() != "null") { + if (resp.body.toLowerCase() == "null") { + // normal reply, emtpy ab return null + tags.clear(); + peers.clear(); + } else if (resp.body.isNotEmpty) { Map json; try { json = jsonDecode(utf8.decode(resp.bodyBytes)); } catch (e) { if (resp.statusCode != 200) { - BotToast.showText( - contentColor: Colors.red, text: 'HTTP ${resp.statusCode}'); + throw 'HTTP ${resp.statusCode}, $e'; } rethrow; } if (json.containsKey('error')) { - abError.value = json['error']; + throw json['error']; } else if (json.containsKey('data')) { try { gFFI.abModel.licensedDevices = json['licensed_devices']; @@ -101,7 +111,13 @@ class AbModel { } } } catch (err) { - abError.value = err.toString(); + if (!quiet) { + pullError.value = + '${translate('pull_ab_failed_tip')}: ${translate(err.toString())}'; + if (gFFI.peerTabModel.currentTab != PeerTabIndex.ab.index) { + BotToast.showText(contentColor: Colors.red, text: pullError.value); + } + } } finally { if (initialized) { // make loading effect obvious @@ -112,26 +128,16 @@ class AbModel { abLoading.value = false; } initialized = true; - sync_all_from_recent = true; + _syncAllFromRecent = true; _timerCounter = 0; - if (abError.isNotEmpty) { + if (pullError.isNotEmpty) { if (statusCode == 401) { gFFI.userModel.reset(clearAbCache: true); - } else { - reset(clearCache: false); } } } } - Future reset({bool clearCache = false}) async { - await bind.mainSetLocalOption(key: "selected-tags", value: ''); - tags.clear(); - peers.clear(); - initialized = false; - if (clearCache) await bind.mainClearAb(); - } - void addId(String id, String alias, List tags) { if (idContainBy(id)) { return; @@ -154,8 +160,12 @@ class AbModel { } void addPeer(Peer peer) { - peers.removeWhere((e) => e.id == peer.id); - peers.add(peer); + final index = peers.indexWhere((e) => e.id == peer.id); + if (index >= 0) { + peers[index] = merge(peer, peers[index]); + } else { + peers.add(peer); + } } void addPeers(List ps) { @@ -187,33 +197,58 @@ class AbModel { }).toList(); } - Future pushAb() async { + Future pushAb({bool toast = true}) async { debugPrint("pushAb"); - final api = "${await bind.mainGetApiServer()}/api/ab"; - var authHeaders = getHttpHeaders(); - authHeaders['Content-Type'] = "application/json"; - final peersJsonData = peers.map((e) => e.toAbUploadJson()).toList(); - final body = jsonEncode({ - "data": jsonEncode({"tags": tags, "peers": peersJsonData}) - }); - var request = http.Request('POST', Uri.parse(api)); - // support compression - if (licensedDevices > 0 && body.length > 1024) { - authHeaders['Content-Encoding'] = "gzip"; - request.bodyBytes = GZipCodec().encode(utf8.encode(body)); - } else { - request.body = body; - } - request.headers.addAll(authHeaders); + pushError.value = ''; try { - await http.Client().send(request); - // await pullAb(quiet: true); - _saveCache(); // save on success + // avoid double pushes in a row + _syncAllFromRecent = true; + syncFromRecent(push: false); + final api = "${await bind.mainGetApiServer()}/api/ab"; + var authHeaders = getHttpHeaders(); + authHeaders['Content-Type'] = "application/json"; + final peersJsonData = peers.map((e) => e.toAbUploadJson()).toList(); + final body = jsonEncode({ + "data": jsonEncode({"tags": tags, "peers": peersJsonData}) + }); + http.Response resp; + // support compression + if (licensedDevices > 0 && body.length > 1024) { + authHeaders['Content-Encoding'] = "gzip"; + resp = await http.post(Uri.parse(api), + headers: authHeaders, body: GZipCodec().encode(utf8.encode(body))); + } else { + resp = + await http.post(Uri.parse(api), headers: authHeaders, body: body); + } + try { + if (resp.statusCode == 200 && + (resp.body.isEmpty || resp.body.toLowerCase() == 'null')) { + _saveCache(); + } else { + final json = jsonDecode(resp.body); + if (json.containsKey('error')) { + throw json['error']; + } else if (resp.statusCode == 200) { + _saveCache(); + } else { + throw 'HTTP ${resp.statusCode}'; + } + } + } catch (e) { + if (resp.statusCode != 200) { + throw 'HTTP ${resp.statusCode}, $e'; + } + rethrow; + } } catch (e) { - BotToast.showText(contentColor: Colors.red, text: e.toString()); + pushError.value = + '${translate('push_ab_failed_tip')}: ${translate(e.toString())}'; + if (toast && gFFI.peerTabModel.currentTab != PeerTabIndex.ab.index) { + BotToast.showText(contentColor: Colors.red, text: pushError.value); + } } finally { - sync_all_from_recent = true; - _timerCounter = 0; + _syncAllFromRecent = true; } } @@ -290,21 +325,29 @@ class AbModel { } } - void syncFromRecent() async { - Peer merge(Peer r, Peer p) { - return Peer( - id: p.id, - hash: r.hash.isEmpty ? p.hash : r.hash, - username: r.username.isEmpty ? p.username : r.username, - hostname: r.hostname.isEmpty ? p.hostname : r.hostname, - platform: r.platform.isEmpty ? p.platform : r.platform, - alias: r.alias, - tags: p.tags, - forceAlwaysRelay: r.forceAlwaysRelay, - rdpPort: r.rdpPort, - rdpUsername: r.rdpUsername); - } + Peer merge(Peer r, Peer p) { + return Peer( + id: p.id, + hash: r.hash.isEmpty ? p.hash : r.hash, + username: r.username.isEmpty ? p.username : r.username, + hostname: r.hostname.isEmpty ? p.hostname : r.hostname, + platform: r.platform.isEmpty ? p.platform : r.platform, + alias: r.alias, + tags: p.tags, + forceAlwaysRelay: r.forceAlwaysRelay, + rdpPort: r.rdpPort, + rdpUsername: r.rdpUsername); + } + void syncFromRecent({bool push = true}) async { + if (!_syncFromRecentLock) { + _syncFromRecentLock = true; + _syncFromRecentWithoutLock(push: push); + _syncFromRecentLock = false; + } + } + + void _syncFromRecentWithoutLock({bool push = true}) async { bool shouldSync(Peer a, Peer b) { return a.hash != b.hash || a.username != b.username || @@ -316,8 +359,8 @@ class AbModel { try { if (peers.isEmpty) []; List filteredPeerIDs; - if (sync_all_from_recent) { - sync_all_from_recent = false; + if (_syncAllFromRecent) { + _syncAllFromRecent = false; filteredPeerIDs = peers.map((e) => e.id).toList(); } else { final new_stored_str = await bind.mainGetNewStoredPeers(); @@ -372,7 +415,7 @@ class AbModel { } } // Be careful with loop calls - if (changed) { + if (changed && push) { pushAb(); } } catch (e) { @@ -394,8 +437,10 @@ class AbModel { } } - _loadCache() async { + loadCache() async { try { + if (_cacheLoadOnceFlag || abLoading.value) return; + _cacheLoadOnceFlag = true; final access_token = bind.mainGetLocalOption(key: 'access_token'); if (access_token.isEmpty) return; final cache = await bind.mainLoadAb(); diff --git a/flutter/lib/models/user_model.dart b/flutter/lib/models/user_model.dart index 896d7c564..2d8e5c61a 100644 --- a/flutter/lib/models/user_model.dart +++ b/flutter/lib/models/user_model.dart @@ -87,7 +87,7 @@ class UserModel { Future reset({bool clearAbCache = false}) async { await bind.mainSetLocalOption(key: 'access_token', value: ''); await bind.mainSetLocalOption(key: 'user_info', value: ''); - await gFFI.abModel.reset(clearCache: clearAbCache); + if (clearAbCache) await bind.mainClearAb(); await gFFI.groupModel.reset(); userName.value = ''; } diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 364ed885f..ef0cd3b86 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 6b03397fa..88638e0d6 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", "未成功获取地址簿"), + ("push_ab_failed_tip", "未成功上传地址簿"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 23d83578e..69df1b70f 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index a05ad2001..cf1ad5748 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index cc1b321e0..43640bd6a 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", "Listenansicht"), ("Select", "Auswählen"), ("Toggle Tags", "Tags umschalten"), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index a0d1fa85c..2795a0e90 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/en.rs b/src/lang/en.rs index 2a9b40568..695ff923d 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -74,5 +74,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("clipboard_wait_response_timeout_tip", "Timed out waiting for copy response."), ("logout_tip", "Are you sure you want to log out?"), ("exceed_max_devices", "You have reached the maximum number of managed devices."), + ("pull_ab_failed_tip", "Failed to refresh address book"), + ("push_ab_failed_tip", "Failed to sync address book to server"), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 451b93a55..3ac8ea79b 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 475a4d72d..c10f9de16 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", "Ver en Lista"), ("Select", "Seleccionar"), ("Toggle Tags", "Alternar Etiquetas"), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index b507231da..389676bac 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index c995c8d41..b1aa90f76 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 1e516e947..4e5d34c08 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index aa61d5420..76fad9ad2 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 185fb3e43..80ef1f389 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", "Vista elenco"), ("Select", "Seleziona"), ("Toggle Tags", "Attiva/disattiva tag"), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index a247aff07..9e2bc66df 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index a1371ae90..18ee01abd 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index b1506ac1b..252880ebb 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index c47aac327..6ad41ee7a 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index a2cacb59a..ef04ed01a 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index d95615ed8..dc45c4ea9 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 00956b972..a3fc256ad 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 2a82f6208..201ae1138 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 3d97a7ecd..54bc2db4c 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index f3e4db6d1..877a7936a 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", "Список"), ("Select", "Выбор"), ("Toggle Tags", "Переключить метки"), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 8b2e2eaa0..2d8db2678 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 2913ad3fd..e16bcfc18 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index ebe9e6275..ea7a7da5c 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 999bca477..388618bfa 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index cd32b975f..a61f4ded9 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index c3b2cb76a..4605779c3 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index c1191aed4..4b7262021 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 45f44a5f2..df39aa99b 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index d07d19f71..608a01b4e 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", "未成功獲取地址簿"), + ("push_ab_failed_tip", "未成功上傳地址簿"), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 6b1fbc437..edd98640c 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 657fbcf0d..140585e31 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -535,5 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", ""), ("Select", ""), ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), ].iter().cloned().collect(); } From 57b8ec178ccbd0f4f46d42809c26b83aa0f68382 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 15 Aug 2023 09:23:55 +0800 Subject: [PATCH 433/612] sync ab alias Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_card.dart | 19 +++++++++++++++---- flutter/lib/models/ab_model.dart | 13 +++++++++++-- flutter/lib/models/peer_model.dart | 1 + libs/hbb_common/src/config.rs | 6 ++++++ 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 5ace63fb8..88d44cc7e 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -159,7 +159,6 @@ class _PeerCardState extends State<_PeerCard> final greyStyle = TextStyle( fontSize: 11, color: Theme.of(context).textTheme.titleLarge?.color?.withOpacity(0.6)); - final alias = bind.mainGetPeerOptionSync(id: peer.id, key: 'alias'); final child = Obx( () => Container( foregroundDecoration: deco.value, @@ -196,7 +195,9 @@ class _PeerCardState extends State<_PeerCard> getOnline(8, peer.online), Expanded( child: Text( - alias.isEmpty ? formatID(peer.id) : alias, + peer.alias.isEmpty + ? formatID(peer.id) + : peer.alias, overflow: TextOverflow.ellipsis, style: Theme.of(context).textTheme.titleSmall, )), @@ -651,8 +652,13 @@ abstract class BasePeerCard extends StatelessWidget { oldName: oldName, onSubmit: (String newName) async { if (newName != oldName) { - await bind.mainSetPeerAlias(id: id, alias: newName); - _update(); + if (tab == PeerTabIndex.ab) { + gFFI.abModel.changeAlias(id: id, alias: newName); + gFFI.abModel.pushAb(); + } else { + await bind.mainSetPeerAlias(id: id, alias: newName); + _update(); + } } }); }, @@ -1050,6 +1056,11 @@ class AddressBookPeerCard extends BasePeerCard { dismissOnClicked: true, ); } + + @protected + @override + Future _getAlias(String id) async => + gFFI.abModel.find(id)?.alias ?? ''; } class MyGroupPeerCard extends BasePeerCard { diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index f1722efe9..7fdf940d3 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -197,6 +197,14 @@ class AbModel { }).toList(); } + void changeAlias({required String id, required String alias}) { + final it = peers.where((element) => element.id == id); + if (it.isEmpty) { + return; + } + it.first.alias = alias; + } + Future pushAb({bool toast = true}) async { debugPrint("pushAb"); pushError.value = ''; @@ -332,7 +340,7 @@ class AbModel { username: r.username.isEmpty ? p.username : r.username, hostname: r.hostname.isEmpty ? p.hostname : r.hostname, platform: r.platform.isEmpty ? p.platform : r.platform, - alias: r.alias, + alias: p.alias.isEmpty ? r.alias : p.alias, tags: p.tags, forceAlwaysRelay: r.forceAlwaysRelay, rdpPort: r.rdpPort, @@ -352,7 +360,8 @@ class AbModel { return a.hash != b.hash || a.username != b.username || a.platform != b.platform || - a.hostname != b.hostname; + a.hostname != b.hostname || + a.alias != b.alias; } Future> getRecentPeers() async { diff --git a/flutter/lib/models/peer_model.dart b/flutter/lib/models/peer_model.dart index 7a61c3dcf..98810b09e 100644 --- a/flutter/lib/models/peer_model.dart +++ b/flutter/lib/models/peer_model.dart @@ -56,6 +56,7 @@ class Peer { "username": username, "hostname": hostname, "platform": platform, + "alias": alias, "tags": tags, }; } diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 16c02d758..b0ec5602f 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -1499,6 +1499,12 @@ pub struct AbPeer { skip_serializing_if = "String::is_empty" )] pub platform: String, + #[serde( + default, + deserialize_with = "deserialize_string", + skip_serializing_if = "String::is_empty" + )] + pub alias: String, #[serde(default, deserialize_with = "deserialize_vec_string")] pub tags: Vec, } From e01377e100b559b1438faecfbe436be772dd7f1c Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 15 Aug 2023 09:52:02 +0800 Subject: [PATCH 434/612] tag color same as tag name if name is color, remove yellow random tag color Signed-off-by: 21pages --- flutter/lib/common.dart | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 6bed2c2e0..794815b86 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1078,25 +1078,32 @@ Color str2color(String str, [alpha = 0xFF]) { } Color str2color2(String str, [alpha = 0xFF]) { - List colorList = [ - Colors.red, - Colors.green, - Colors.blue, - Colors.orange, - Colors.yellow, - Colors.purple, - Colors.grey, - Colors.cyan, - Colors.lime, - Colors.teal, - Colors.pink, - Colors.indigo, - Colors.brown, - ]; + Map colorMap = { + "red": Colors.red, + "green": Colors.green, + "blue": Colors.blue, + "orange": Colors.orange, + "purple": Colors.purple, + "grey": Colors.grey, + "cyan": Colors.cyan, + "lime": Colors.lime, + "teal": Colors.teal, + "pink": Colors.pink[200]!, + "indigo": Colors.indigo, + "brown": Colors.brown, + }; + final color = colorMap[str.toLowerCase()]; + if (color != null) { + return color.withAlpha(alpha); + } + if (str.toLowerCase() == 'yellow') { + return Colors.yellow.withAlpha(alpha); + } var hash = 0; for (var i = 0; i < str.length; i++) { hash += str.codeUnitAt(i); } + List colorList = colorMap.values.toList(); hash = hash % colorList.length; return colorList[hash].withAlpha(alpha); } From 923d76cf699b863d29590a090514e62e58205dc6 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 15 Aug 2023 10:11:04 +0800 Subject: [PATCH 435/612] opt add ab id and delete file dialog ui Signed-off-by: 21pages --- flutter/lib/common/widgets/address_book.dart | 10 ++++++---- flutter/lib/models/file_model.dart | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index fd4694a8b..9530e851d 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -346,6 +346,7 @@ class _AddressBookState extends State { close(); } + double marginBottom = 4; return CustomAlertDialog( title: Text(translate("Add ID")), content: Column( @@ -367,7 +368,7 @@ class _AddressBookState extends State { ), ], ), - ), + ).marginOnly(bottom: marginBottom), TextField( controller: idController, inputFormatters: [IDTextInputFormatter()], @@ -379,7 +380,7 @@ class _AddressBookState extends State { translate('Alias'), style: style, ), - ).marginOnly(top: 8, bottom: 2), + ).marginOnly(top: 8, bottom: marginBottom), TextField( controller: aliasController, ), @@ -389,8 +390,9 @@ class _AddressBookState extends State { translate('Tags'), style: style, ), - ).marginOnly(top: 8), - Container( + ).marginOnly(top: 8, bottom: marginBottom), + Align( + alignment: Alignment.centerLeft, child: Wrap( children: tags .map((e) => AddressBookTag( diff --git a/flutter/lib/models/file_model.dart b/flutter/lib/models/file_model.dart index 95a4cad0c..35c0d020d 100644 --- a/flutter/lib/models/file_model.dart +++ b/flutter/lib/models/file_model.dart @@ -556,8 +556,10 @@ class FileController { mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.warning_rounded, color: Colors.red), - Text(title).paddingOnly( - left: 10, + Expanded( + child: Text(title).paddingOnly( + left: 10, + ), ), ], ), From d45def7cbe2c1705d06aeb88e34a195274ceac18 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 15 Aug 2023 12:09:33 +0800 Subject: [PATCH 436/612] opt ab json decode Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 51 ++++++++++++++++---------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 7fdf940d3..b126715b0 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -78,15 +78,8 @@ class AbModel { tags.clear(); peers.clear(); } else if (resp.body.isNotEmpty) { - Map json; - try { - json = jsonDecode(utf8.decode(resp.bodyBytes)); - } catch (e) { - if (resp.statusCode != 200) { - throw 'HTTP ${resp.statusCode}, $e'; - } - rethrow; - } + Map json = + _jsonDecode(utf8.decode(resp.bodyBytes), resp.statusCode); if (json.containsKey('error')) { throw json['error']; } else if (json.containsKey('data')) { @@ -221,7 +214,7 @@ class AbModel { }); http.Response resp; // support compression - if (licensedDevices > 0 && body.length > 1024) { + if (licensedDevices > 0 && body.length > 102400) { authHeaders['Content-Encoding'] = "gzip"; resp = await http.post(Uri.parse(api), headers: authHeaders, body: GZipCodec().encode(utf8.encode(body))); @@ -229,25 +222,18 @@ class AbModel { resp = await http.post(Uri.parse(api), headers: authHeaders, body: body); } - try { - if (resp.statusCode == 200 && - (resp.body.isEmpty || resp.body.toLowerCase() == 'null')) { + if (resp.statusCode == 200 && + (resp.body.isEmpty || resp.body.toLowerCase() == 'null')) { + _saveCache(); + } else { + Map json = _jsonDecode(resp.body, resp.statusCode); + if (json.containsKey('error')) { + throw json['error']; + } else if (resp.statusCode == 200) { _saveCache(); } else { - final json = jsonDecode(resp.body); - if (json.containsKey('error')) { - throw json['error']; - } else if (resp.statusCode == 200) { - _saveCache(); - } else { - throw 'HTTP ${resp.statusCode}'; - } + throw 'HTTP ${resp.statusCode}'; } - } catch (e) { - if (resp.statusCode != 200) { - throw 'HTTP ${resp.statusCode}, $e'; - } - rethrow; } } catch (e) { pushError.value = @@ -469,4 +455,17 @@ class AbModel { debugPrint("load ab cache: $e"); } } + + Map _jsonDecode(String body, int statusCode) { + try { + Map json = jsonDecode(body); + return json; + } catch (e) { + final err = body.isNotEmpty && body.length < 128 ? body : e.toString(); + if (statusCode != 200) { + throw 'HTTP $statusCode, $err'; + } + throw err; + } + } } From 4c25f94bd1f87e6c6fbcc448b0ca3c467a21399f Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 15 Aug 2023 12:52:01 +0800 Subject: [PATCH 437/612] fix gzip threshold changed by mistake Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index b126715b0..3300fa67c 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -214,7 +214,7 @@ class AbModel { }); http.Response resp; // support compression - if (licensedDevices > 0 && body.length > 102400) { + if (licensedDevices > 0 && body.length > 1024) { authHeaders['Content-Encoding'] = "gzip"; resp = await http.post(Uri.parse(api), headers: authHeaders, body: GZipCodec().encode(utf8.encode(body))); From 3131d25de43dab388708ccf1f0cbac2bc89b2e5b Mon Sep 17 00:00:00 2001 From: solokot Date: Tue, 15 Aug 2023 11:27:20 +0300 Subject: [PATCH 438/612] Update ru.rs --- src/lang/ru.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 877a7936a..cde7f611e 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -535,7 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", "Список"), ("Select", "Выбор"), ("Toggle Tags", "Переключить метки"), - ("pull_ab_failed_tip", ""), - ("push_ab_failed_tip", ""), + ("pull_ab_failed_tip", "Невозможно обновить адресную книгу"), + ("push_ab_failed_tip", "Невозможно синхронизировать адресную книгу с сервером"), ].iter().cloned().collect(); } From 124fc98116de707935cb3f24c1e1619f5645c7a8 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Tue, 15 Aug 2023 10:31:29 +0200 Subject: [PATCH 439/612] Update de.rs --- src/lang/de.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index 43640bd6a..7ebd725a2 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -535,7 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", "Listenansicht"), ("Select", "Auswählen"), ("Toggle Tags", "Tags umschalten"), - ("pull_ab_failed_tip", ""), - ("push_ab_failed_tip", ""), + ("pull_ab_failed_tip", "Aktualisierung des Adressbuchs fehlgeschlagen"), + ("push_ab_failed_tip", "Synchronisierung des Adressbuchs mit dem Server fehlgeschlagen"), ].iter().cloned().collect(); } From 4e20e9c91a67d120a211cb1fb5b5193639f3eb21 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Tue, 15 Aug 2023 10:46:47 +0200 Subject: [PATCH 440/612] Update italian language --- src/lang/it.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 80ef1f389..5b6b296b1 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -535,7 +535,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("List View", "Vista elenco"), ("Select", "Seleziona"), ("Toggle Tags", "Attiva/disattiva tag"), - ("pull_ab_failed_tip", ""), - ("push_ab_failed_tip", ""), + ("pull_ab_failed_tip", "Impossibile aggiornare la rubrica"), + ("push_ab_failed_tip", "Impossibile sincronizzare la rubrica con il server"), ].iter().cloned().collect(); } From 1bcac047aab0de346972d8aaac8b2704c1f9c3e8 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 15 Aug 2023 21:19:59 +0800 Subject: [PATCH 441/612] fix conn log --- src/server/connection.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/server/connection.rs b/src/server/connection.rs index 486d52829..e982e6a93 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -175,7 +175,6 @@ pub struct Connection { tx_input: std_mpsc::Sender, // handle input messages video_ack_required: bool, - peer_info: (String, String), server_audit_conn: String, server_audit_file: String, lr: LoginRequest, @@ -306,7 +305,6 @@ impl Connection { disable_keyboard: false, tx_input, video_ack_required: false, - peer_info: Default::default(), server_audit_conn: "".to_owned(), server_audit_file: "".to_owned(), lr: Default::default(), @@ -955,7 +953,9 @@ impl Connection { } else { 0 }; - self.post_conn_audit(json!({"peer": self.peer_info, "type": conn_type})); + self.post_conn_audit( + json!({"peer": ((&self.lr.my_id, &self.lr.my_name)), "type": conn_type}), + ); #[allow(unused_mut)] let mut username = crate::platform::get_active_username(); let mut res = LoginResponse::new(); @@ -1142,7 +1142,6 @@ impl Connection { } fn try_start_cm(&mut self, peer_id: String, name: String, authorized: bool) { - self.peer_info = (peer_id.clone(), name.clone()); self.send_to_cm(ipc::Data::Login { id: self.inner.id(), is_file_transfer: self.file_transfer.is_some(), From 309cb1010ce9762cfd334da8d87b9b3328194b58 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 16 Aug 2023 11:02:07 +0800 Subject: [PATCH 442/612] handle .exe.exe, since ext hidden, clients likely append exetra .exe --- src/license.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/license.rs b/src/license.rs index 59d11f4d8..029611345 100644 --- a/src/license.rs +++ b/src/license.rs @@ -31,7 +31,9 @@ fn get_license_from_string_(s: &str) -> ResultType { } pub fn get_license_from_string(s: &str) -> ResultType { - let s = if s.to_lowercase().ends_with(".exe") { + let s = if s.to_lowercase().ends_with(".exe.exe") { + &s[0..s.len() - 8] + } else if s.to_lowercase().ends_with(".exe") { &s[0..s.len() - 4] } else { s From 29c661d919e5ac8ff663bc5178032f946ce9647d Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 16 Aug 2023 08:09:03 +0800 Subject: [PATCH 443/612] ab: fix ui not updating immediately Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 3300fa67c..3dd02bb38 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -204,7 +204,9 @@ class AbModel { try { // avoid double pushes in a row _syncAllFromRecent = true; - syncFromRecent(push: false); + await syncFromRecent(push: false); + //https: //stackoverflow.com/questions/68249333/flutter-getx-updating-item-in-children-list-is-not-reactive + peers.refresh(); final api = "${await bind.mainGetApiServer()}/api/ab"; var authHeaders = getHttpHeaders(); authHeaders['Content-Type'] = "application/json"; @@ -333,15 +335,15 @@ class AbModel { rdpUsername: r.rdpUsername); } - void syncFromRecent({bool push = true}) async { + Future syncFromRecent({bool push = true}) async { if (!_syncFromRecentLock) { _syncFromRecentLock = true; - _syncFromRecentWithoutLock(push: push); + await _syncFromRecentWithoutLock(push: push); _syncFromRecentLock = false; } } - void _syncFromRecentWithoutLock({bool push = true}) async { + Future _syncFromRecentWithoutLock({bool push = true}) async { bool shouldSync(Peer a, Peer b) { return a.hash != b.hash || a.username != b.username || From 553a3798a177bf4cf5b5ece9cf69f1f9d76a3b97 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 16 Aug 2023 08:59:50 +0800 Subject: [PATCH 444/612] ab: sync all recent peers if option enabled Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_card.dart | 7 + flutter/lib/common/widgets/peer_tab_page.dart | 140 ++++++++++-------- flutter/lib/models/ab_model.dart | 63 ++++---- flutter/lib/models/peer_model.dart | 14 ++ libs/hbb_common/src/config.rs | 4 + src/flutter_ffi.rs | 11 +- src/lang/ca.rs | 1 + src/lang/cn.rs | 1 + src/lang/cs.rs | 1 + src/lang/da.rs | 1 + src/lang/de.rs | 1 + src/lang/el.rs | 1 + src/lang/en.rs | 1 + src/lang/eo.rs | 1 + src/lang/es.rs | 1 + src/lang/fa.rs | 1 + src/lang/fr.rs | 1 + src/lang/hu.rs | 1 + src/lang/id.rs | 1 + src/lang/it.rs | 1 + src/lang/ja.rs | 1 + src/lang/ko.rs | 1 + src/lang/kz.rs | 1 + src/lang/lt.rs | 1 + src/lang/nl.rs | 1 + src/lang/pl.rs | 1 + src/lang/pt_PT.rs | 1 + src/lang/ptbr.rs | 1 + src/lang/ro.rs | 1 + src/lang/ru.rs | 1 + src/lang/sk.rs | 1 + src/lang/sl.rs | 1 + src/lang/sq.rs | 1 + src/lang/sr.rs | 1 + src/lang/sv.rs | 1 + src/lang/template.rs | 1 + src/lang/th.rs | 1 + src/lang/tr.rs | 1 + src/lang/tw.rs | 1 + src/lang/ua.rs | 1 + src/lang/vn.rs | 1 + src/ui_interface.rs | 5 + 42 files changed, 183 insertions(+), 96 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 88d44cc7e..f1ab7b1f0 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -1,9 +1,11 @@ import 'dart:io'; +import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/common/widgets/dialog.dart'; import 'package:flutter_hbb/consts.dart'; +import 'package:flutter_hbb/models/ab_model.dart'; import 'package:flutter_hbb/models/peer_tab_model.dart'; import 'package:get/get.dart'; import 'package:provider/provider.dart'; @@ -707,6 +709,11 @@ abstract class BasePeerCard extends StatelessWidget { case PeerTabIndex.ab: gFFI.abModel.deletePeer(id); await gFFI.abModel.pushAb(); + if (shouldSyncAb() && await bind.mainPeerExists(id: peer.id)) { + BotToast.showText( + contentColor: Colors.lightBlue, + text: translate('synced_peer_readded_tip')); + } break; case PeerTabIndex.group: break; diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 71f620f6b..54853c568 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -1,3 +1,4 @@ +import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/common/widgets/address_book.dart'; import 'package:flutter_hbb/common/widgets/dialog.dart'; @@ -7,6 +8,7 @@ import 'package:flutter_hbb/common/widgets/peer_card.dart'; import 'package:flutter_hbb/common/widgets/animated_rotation_widget.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/desktop/widgets/popup_menu.dart'; +import 'package:flutter_hbb/models/ab_model.dart'; import 'package:flutter_hbb/models/peer_tab_model.dart'; import 'package:get/get.dart'; @@ -122,12 +124,11 @@ class _PeerTabPageState extends State color: Theme.of(context).colorScheme.background, borderRadius: BorderRadius.circular(6)), child: Tooltip( - message: translate('Toggle Tags'), - child: Icon( - Icons.tag_rounded, - size: 18, - )) - )), + message: translate('Toggle Tags'), + child: Icon( + Icons.tag_rounded, + size: 18, + )))), onTap: () async { await bind.mainSetLocalOption( key: "hideAbTagsPanel", @@ -221,13 +222,12 @@ class _PeerTabPageState extends State child: RotatedBox( quarterTurns: 2, child: Tooltip( - message: translate('Refresh'), - child: Icon( - Icons.refresh, - size: 18, - color: textColor, - )) - )), + message: translate('Refresh'), + child: Icon( + Icons.refresh, + size: 18, + color: textColor, + )))), ), ); } @@ -243,29 +243,28 @@ class _PeerTabPageState extends State return Obx( () => Container( - padding: EdgeInsets.all(4.0), - decoration: hover.value ? deco : null, - child: InkWell( - onHover: (value) => hover.value = value, - onTap: () async { - final type = types.elementAt( - peerCardUiType.value == types.elementAt(0) ? 1 : 0); - await bind.setLocalFlutterOption( - k: 'peer-card-ui-type', v: type.index.toString()); - peerCardUiType.value = type; - }, - child: Tooltip( - message: peerCardUiType.value == PeerUiType.grid - ? translate('List View') - : translate('Grid View'), - child: Icon( - peerCardUiType.value == PeerUiType.grid - ? Icons.view_list_rounded - : Icons.grid_view_rounded, - size: 18, - color: textColor, - )) - )), + padding: EdgeInsets.all(4.0), + decoration: hover.value ? deco : null, + child: InkWell( + onHover: (value) => hover.value = value, + onTap: () async { + final type = types.elementAt( + peerCardUiType.value == types.elementAt(0) ? 1 : 0); + await bind.setLocalFlutterOption( + k: 'peer-card-ui-type', v: type.index.toString()); + peerCardUiType.value = type; + }, + child: Tooltip( + message: peerCardUiType.value == PeerUiType.grid + ? translate('List View') + : translate('Grid View'), + child: Icon( + peerCardUiType.value == PeerUiType.grid + ? Icons.view_list_rounded + : Icons.grid_view_rounded, + size: 18, + color: textColor, + )))), ); } @@ -280,12 +279,12 @@ class _PeerTabPageState extends State model.setMultiSelectionMode(true); }, child: Tooltip( - message: translate('Select'), - child: Icon( - IconFont.checkbox, - size: 18, - color: textColor, - )), + message: translate('Select'), + child: Icon( + IconFont.checkbox, + size: 18, + color: textColor, + )), ), ); } @@ -334,8 +333,25 @@ class _PeerTabPageState extends State await bind.mainLoadLanPeers(); break; case 3: - gFFI.abModel.deletePeers(peers.map((p) => p.id).toList()); - await gFFI.abModel.pushAb(); + { + bool hasSynced = false; + if (shouldSyncAb()) { + for (var p in peers) { + if (await bind.mainPeerExists(id: p.id)) { + hasSynced = true; + } + } + } + gFFI.abModel.deletePeers(peers.map((p) => p.id).toList()); + await gFFI.abModel.pushAb(); + if (hasSynced) { + Future.delayed(Duration(seconds: 2), () { + BotToast.showText( + contentColor: Colors.lightBlue, + text: translate('synced_peer_readded_tip')); + }); + } + } break; default: break; @@ -483,8 +499,7 @@ class _PeerSearchBarState extends State { child: Icon( Icons.search_rounded, color: Theme.of(context).hintColor, - )) - ); + ))); } Widget _buildSearchBar() { @@ -543,22 +558,21 @@ class _PeerSearchBarState extends State { ), // Icon(Icons.close), IconButton( - alignment: Alignment.centerRight, - padding: const EdgeInsets.only(right: 2), - onPressed: () { - setState(() { - peerSearchTextController.clear(); - peerSearchText.value = ""; - drawer = false; - }); - }, - icon: Tooltip( - message: translate('Close'), - child: - Icon( - Icons.close, - color: Theme.of(context).hintColor, - )), + alignment: Alignment.centerRight, + padding: const EdgeInsets.only(right: 2), + onPressed: () { + setState(() { + peerSearchTextController.clear(); + peerSearchText.value = ""; + drawer = false; + }); + }, + icon: Tooltip( + message: translate('Close'), + child: Icon( + Icons.close, + color: Theme.of(context).hintColor, + )), ), ], ), @@ -628,7 +642,7 @@ class _PeerSortDropdownState extends State { child: Icon( Icons.sort_rounded, size: 18, - )), + )), onTapDown: (details) { final x = details.globalPosition.dx; final y = details.globalPosition.dy; diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 3dd02bb38..cb4242a6a 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -344,33 +344,28 @@ class AbModel { } Future _syncFromRecentWithoutLock({bool push = true}) async { - bool shouldSync(Peer a, Peer b) { - return a.hash != b.hash || - a.username != b.username || - a.platform != b.platform || - a.hostname != b.hostname || - a.alias != b.alias; + bool shouldSync(Peer r, Peer p) { + return r.hash != p.hash || + r.username != p.username || + r.platform != p.platform || + r.hostname != p.hostname || + (p.alias.isEmpty && r.alias.isNotEmpty); } Future> getRecentPeers() async { try { - if (peers.isEmpty) []; List filteredPeerIDs; if (_syncAllFromRecent) { _syncAllFromRecent = false; - filteredPeerIDs = peers.map((e) => e.id).toList(); + filteredPeerIDs = []; } else { final new_stored_str = await bind.mainGetNewStoredPeers(); if (new_stored_str.isEmpty) return []; - List new_stores = - (jsonDecode(new_stored_str) as List) - .map((e) => e.toString()) - .toList(); - final abPeerIds = peers.map((e) => e.id).toList(); - filteredPeerIDs = - new_stores.where((e) => abPeerIds.contains(e)).toList(); + filteredPeerIDs = (jsonDecode(new_stored_str) as List) + .map((e) => e.toString()) + .toList(); + if (filteredPeerIDs.isEmpty) return []; } - if (filteredPeerIDs.isEmpty) return []; final loadStr = await bind.mainLoadRecentPeersForAb( filter: jsonEncode(filteredPeerIDs)); if (loadStr.isEmpty) { @@ -392,28 +387,32 @@ class AbModel { try { if (!shouldSyncAb()) return; - final oldPeers = peers.toList(); final recents = await getRecentPeers(); if (recents.isEmpty) return; - for (var i = 0; i < peers.length; i++) { - var p = peers[i]; - var r = recents.firstWhereOrNull((r) => p.id == r.id); - if (r != null) { - peers[i] = merge(r, p); - } - } - bool changed = false; - for (var i = 0; i < peers.length; i++) { - final o = oldPeers[i]; - final p = peers[i]; - if (shouldSync(o, p)) { - changed = true; - break; + bool syncChanged = false; + bool uiChanged = false; + for (var i = 0; i < recents.length; i++) { + var r = recents[i]; + var index = peers.indexWhere((e) => e.id == r.id); + if (index < 0) { + peers.add(r); + syncChanged = true; + uiChanged = true; + } else { + if (!r.equal(peers[index])) { + uiChanged = true; + } + if (shouldSync(r, peers[index])) { + syncChanged = true; + } + peers[index] = merge(r, peers[index]); } } // Be careful with loop calls - if (changed && push) { + if (syncChanged && push) { pushAb(); + } else if (uiChanged) { + peers.refresh(); } } catch (e) { debugPrint('syncFromRecent:$e'); diff --git a/flutter/lib/models/peer_model.dart b/flutter/lib/models/peer_model.dart index 98810b09e..ddd9f8538 100644 --- a/flutter/lib/models/peer_model.dart +++ b/flutter/lib/models/peer_model.dart @@ -1,6 +1,8 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'platform_model.dart'; +// ignore: depend_on_referenced_packages +import 'package:collection/collection.dart'; class Peer { final String id; @@ -87,6 +89,18 @@ class Peer { rdpPort: '', rdpUsername: '', ); + bool equal(Peer other) { + return id == other.id && + hash == other.hash && + username == other.username && + hostname == other.hostname && + platform == other.platform && + alias == other.alias && + tags.equals(other.tags) && + forceAlwaysRelay == other.forceAlwaysRelay && + rdpPort == other.rdpPort && + rdpUsername == other.rdpUsername; + } } enum UpdateEvent { online, load } diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index b0ec5602f..2cb0072c5 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -1079,6 +1079,10 @@ impl PeerConfig { Default::default() } + pub fn exists(id: &str) -> bool { + Self::path(id).exists() + } + serde_field_string!( default_view_style, deserialize_view_style, diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index ab7acc104..f076b4b23 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -841,6 +841,10 @@ pub fn main_peer_has_password(id: String) -> bool { peer_has_password(id) } +pub fn main_peer_exists(id: String) -> bool { + peer_exists(&id) +} + pub fn main_load_recent_peers() { if !config::APP_DIR.read().unwrap().is_empty() { let peers: Vec> = PeerConfig::peers(None) @@ -883,8 +887,13 @@ pub fn main_load_recent_peers_sync() -> SyncReturn { pub fn main_load_recent_peers_for_ab(filter: String) -> String { let id_filters = serde_json::from_str::>(&filter).unwrap_or_default(); + let id_filters = if id_filters.is_empty() { + None + } else { + Some(id_filters) + }; if !config::APP_DIR.read().unwrap().is_empty() { - let peers: Vec> = PeerConfig::peers(Some(id_filters)) + let peers: Vec> = PeerConfig::peers(id_filters) .drain(..) .map(|(id, _, p)| peer_to_map_ab(id, p)) .collect(); diff --git a/src/lang/ca.rs b/src/lang/ca.rs index ef0cd3b86..739d5646b 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 88638e0d6..50756df7a 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", "未成功获取地址簿"), ("push_ab_failed_tip", "未成功上传地址簿"), + ("synced_peer_readded_tip", "最近会话中存在的设备将会被重新添加到地址簿。"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 69df1b70f..e2028629a 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index cf1ad5748..830cb0c45 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 7ebd725a2..c62309cbf 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", "Tags umschalten"), ("pull_ab_failed_tip", "Aktualisierung des Adressbuchs fehlgeschlagen"), ("push_ab_failed_tip", "Synchronisierung des Adressbuchs mit dem Server fehlgeschlagen"), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 2795a0e90..46f816677 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/en.rs b/src/lang/en.rs index 695ff923d..dc3dcb605 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -76,5 +76,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "You have reached the maximum number of managed devices."), ("pull_ab_failed_tip", "Failed to refresh address book"), ("push_ab_failed_tip", "Failed to sync address book to server"), + ("synced_peer_readded_tip", "The devices present in the recent sessions will be re-added to the address book."), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 3ac8ea79b..8d7f1c873 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index c10f9de16..8fbea74ef 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", "Alternar Etiquetas"), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 389676bac..eeb36af3b 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index b1aa90f76..18e1b1ffb 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 4e5d34c08..2da6bd72e 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 76fad9ad2..4692b280b 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 5b6b296b1..f3ec2d941 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", "Attiva/disattiva tag"), ("pull_ab_failed_tip", "Impossibile aggiornare la rubrica"), ("push_ab_failed_tip", "Impossibile sincronizzare la rubrica con il server"), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 9e2bc66df..4c4d6e141 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 18ee01abd..91e49be3a 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 252880ebb..807b74ba4 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 6ad41ee7a..0cd258b9e 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index ef04ed01a..c37e95c89 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index dc45c4ea9..923dadc22 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index a3fc256ad..3eb850227 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 201ae1138..40360be5a 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 54bc2db4c..50ae39902 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index cde7f611e..dec93c575 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", "Переключить метки"), ("pull_ab_failed_tip", "Невозможно обновить адресную книгу"), ("push_ab_failed_tip", "Невозможно синхронизировать адресную книгу с сервером"), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 2d8db2678..4b7ced046 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index e16bcfc18..6b356a238 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index ea7a7da5c..5eb5c0fb4 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 388618bfa..f642bc124 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index a61f4ded9..76ea47cd4 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 4605779c3..06591d147 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 4b7262021..6e21420fa 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index df39aa99b..15aaac5f7 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 608a01b4e..837024f2e 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", "未成功獲取地址簿"), ("push_ab_failed_tip", "未成功上傳地址簿"), + ("synced_peer_readded_tip", "最近會話中存在的設備將會被重新添加到地址簿。"), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index edd98640c..acdf8f106 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 140585e31..8aeafd930 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -537,5 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), ].iter().cloned().collect(); } diff --git a/src/ui_interface.rs b/src/ui_interface.rs index f6791de0b..1589a4e2b 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -648,6 +648,11 @@ pub fn peer_to_map_ab(id: String, p: PeerConfig) -> HashMap<&'static str, String m } +#[cfg(feature = "flutter")] +pub fn peer_exists(id: &str) -> bool { + PeerConfig::exists(id) +} + #[inline] pub fn get_lan_peers() -> Vec> { config::LanPeers::load() From 1e75b172d6e1302254f4e5d32adb0b67d58382b2 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 16 Aug 2023 10:18:29 +0800 Subject: [PATCH 445/612] ab: opt reaction and message hint Signed-off-by: 21pages --- flutter/lib/common/widgets/address_book.dart | 14 ++++- flutter/lib/common/widgets/peer_card.dart | 29 ++++++++-- flutter/lib/common/widgets/peer_tab_page.dart | 18 +++--- flutter/lib/models/ab_model.dart | 56 +++++++++++++------ 4 files changed, 85 insertions(+), 32 deletions(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index 9530e851d..3c192c166 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -48,13 +48,14 @@ class _AddressBookState extends State { return Column( children: [ _buildNotEmptyLoading(), + _buildRetryProgress(), _buildErrorBanner( err: gFFI.abModel.pullError, retry: null, close: () => gFFI.abModel.pullError.value = ''), _buildErrorBanner( err: gFFI.abModel.pushError, - retry: () => gFFI.abModel.pushAb(), + retry: () => gFFI.abModel.pushAb(isRetry: true), close: () => gFFI.abModel.pushError.value = ''), Expanded( child: isDesktop @@ -136,6 +137,13 @@ class _AddressBookState extends State { )); } + Widget _buildRetryProgress() { + return Obx(() => Offstage( + offstage: !gFFI.abModel.retrying.value, + child: LinearProgressIndicator(), + )); + } + Widget _buildAddressBookDesktop() { return Row( children: [ @@ -339,7 +347,7 @@ class _AddressBookState extends State { return; } gFFI.abModel.addId(id, aliasController.text.trim(), selectedTag); - await gFFI.abModel.pushAb(); + gFFI.abModel.pushAb(); this.setState(() {}); // final currentPeers } @@ -448,7 +456,7 @@ class _AddressBookState extends State { for (final tag in tags) { gFFI.abModel.addTag(tag); } - await gFFI.abModel.pushAb(); + gFFI.abModel.pushAb(); // final currentPeers } close(); diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index f1ab7b1f0..27b485023 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -584,6 +584,7 @@ abstract class BasePeerCard extends StatelessWidget { ), proc: () { bind.mainCreateShortcut(id: id); + showToast(translate('Successful')); }, padding: menuPadding, dismissOnClicked: true, @@ -599,6 +600,7 @@ abstract class BasePeerCard extends StatelessWidget { setter: (bool v) async { await bind.mainSetPeerOption( id: id, key: key, value: bool2option(key, v)); + showToast(translate('Successful')); }, padding: menuPadding, dismissOnClicked: true, @@ -635,6 +637,7 @@ abstract class BasePeerCard extends StatelessWidget { id: id, key: kOptionForceAlwaysRelay, value: bool2option(kOptionForceAlwaysRelay, v)); + showToast(translate('Successful')); }, padding: menuPadding, dismissOnClicked: true, @@ -659,6 +662,7 @@ abstract class BasePeerCard extends StatelessWidget { gFFI.abModel.pushAb(); } else { await bind.mainSetPeerAlias(id: id, alias: newName); + showToast(translate('Successful')); _update(); } } @@ -708,16 +712,25 @@ abstract class BasePeerCard extends StatelessWidget { break; case PeerTabIndex.ab: gFFI.abModel.deletePeer(id); - await gFFI.abModel.pushAb(); + final future = gFFI.abModel.pushAb(); if (shouldSyncAb() && await bind.mainPeerExists(id: peer.id)) { - BotToast.showText( - contentColor: Colors.lightBlue, - text: translate('synced_peer_readded_tip')); + Future.delayed(Duration.zero, () async { + final succ = await future; + if (succ) { + await Future.delayed(Duration(seconds: 2)); // success msg + BotToast.showText( + contentColor: Colors.lightBlue, + text: translate('synced_peer_readded_tip')); + } + }); } break; case PeerTabIndex.group: break; } + if (tab != PeerTabIndex.ab) { + showToast(translate('Successful')); + } } deletePeerConfirmDialog(onSubmit, @@ -737,6 +750,7 @@ abstract class BasePeerCard extends StatelessWidget { ), proc: () { bind.mainForgetPassword(id: id); + showToast(translate('Successful')); }, padding: menuPadding, dismissOnClicked: true, @@ -769,6 +783,7 @@ abstract class BasePeerCard extends StatelessWidget { favs.add(id); await bind.mainStoreFav(favs: favs); } + showToast(translate('Successful')); }(); }, padding: menuPadding, @@ -803,6 +818,7 @@ abstract class BasePeerCard extends StatelessWidget { await bind.mainStoreFav(favs: favs); await reloadFunc(); } + showToast(translate('Successful')); }(); }, padding: menuPadding, @@ -824,7 +840,7 @@ abstract class BasePeerCard extends StatelessWidget { } if (!gFFI.abModel.idContainBy(peer.id)) { gFFI.abModel.addPeer(peer); - await gFFI.abModel.pushAb(); + gFFI.abModel.pushAb(); } }(); }, @@ -1056,7 +1072,7 @@ class AddressBookPeerCard extends BasePeerCard { proc: () { editAbTagDialog(gFFI.abModel.getPeerTags(id), (selectedTag) async { gFFI.abModel.changeTagForPeer(id, selectedTag); - await gFFI.abModel.pushAb(); + gFFI.abModel.pushAb(); }); }, padding: super.menuPadding, @@ -1128,6 +1144,7 @@ void _rdpDialog(String id) async { id: id, key: 'rdp_username', value: username); await bind.mainSetPeerOption( id: id, key: 'rdp_password', value: password); + showToast(translate('Successful')); close(); } diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 54853c568..0937f6f5f 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -343,12 +343,17 @@ class _PeerTabPageState extends State } } gFFI.abModel.deletePeers(peers.map((p) => p.id).toList()); - await gFFI.abModel.pushAb(); + final future = gFFI.abModel.pushAb(); if (hasSynced) { - Future.delayed(Duration(seconds: 2), () { - BotToast.showText( - contentColor: Colors.lightBlue, - text: translate('synced_peer_readded_tip')); + Future.delayed(Duration.zero, () async { + final succ = await future; + if (succ) { + await Future.delayed( + Duration(seconds: 2)); // success msg + BotToast.showText( + contentColor: Colors.lightBlue, + text: translate('synced_peer_readded_tip')); + } }); } } @@ -357,7 +362,7 @@ class _PeerTabPageState extends State break; } gFFI.peerTabModel.setMultiSelectionMode(false); - showToast(translate('Successful')); + if (model.currentTab != 3) showToast(translate('Successful')); } deletePeerConfirmDialog(onSubmit, translate('Delete')); @@ -404,7 +409,6 @@ class _PeerTabPageState extends State gFFI.abModel.addPeers(peers); gFFI.abModel.pushAb(); model.setMultiSelectionMode(false); - showToast(translate('Successful')); }, child: Tooltip( message: translate('Add to Address Book'), diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index cb4242a6a..9426b0571 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -30,6 +30,7 @@ class AbModel { final tags = [].obs; final peers = List.empty(growable: true).obs; final sortTags = shouldSortTags().obs; + final retrying = false.obs; bool get emtpy => peers.isEmpty && tags.isEmpty; final selectedTags = List.empty(growable: true).obs; @@ -55,10 +56,11 @@ class AbModel { if (gFFI.userModel.userName.isEmpty) return; if (abLoading.value) return; if (!force && initialized) return; + DateTime startTime = DateTime.now(); if (pushError.isNotEmpty) { try { // push to retry - pushAb(toast: false); + pushAb(toastIfFail: false, toastIfSucc: false); } catch (_) {} } if (!quiet) { @@ -112,14 +114,14 @@ class AbModel { } } } finally { - if (initialized) { - // make loading effect obvious - Future.delayed(Duration(milliseconds: 300), () { - abLoading.value = false; - }); - } else { + var ms = + (Duration(milliseconds: 300) - DateTime.now().difference(startTime)) + .inMilliseconds; + ms = ms > 0 ? ms : 0; + Future.delayed(Duration(milliseconds: ms), () { abLoading.value = false; - } + }); + initialized = true; _syncAllFromRecent = true; _timerCounter = 0; @@ -198,9 +200,16 @@ class AbModel { it.first.alias = alias; } - Future pushAb({bool toast = true}) async { - debugPrint("pushAb"); + Future pushAb( + {bool toastIfFail = true, + bool toastIfSucc = true, + bool isRetry = false}) async { + debugPrint( + "pushAb: toastIfFail:$toastIfFail, toastIfSucc:$toastIfSucc, isRetry:$isRetry"); pushError.value = ''; + if (isRetry) retrying.value = true; + DateTime startTime = DateTime.now(); + bool ret = false; try { // avoid double pushes in a row _syncAllFromRecent = true; @@ -226,12 +235,14 @@ class AbModel { } if (resp.statusCode == 200 && (resp.body.isEmpty || resp.body.toLowerCase() == 'null')) { + ret = true; _saveCache(); } else { Map json = _jsonDecode(resp.body, resp.statusCode); if (json.containsKey('error')) { throw json['error']; } else if (resp.statusCode == 200) { + ret = true; _saveCache(); } else { throw 'HTTP ${resp.statusCode}'; @@ -240,12 +251,25 @@ class AbModel { } catch (e) { pushError.value = '${translate('push_ab_failed_tip')}: ${translate(e.toString())}'; - if (toast && gFFI.peerTabModel.currentTab != PeerTabIndex.ab.index) { - BotToast.showText(contentColor: Colors.red, text: pushError.value); - } - } finally { - _syncAllFromRecent = true; } + _syncAllFromRecent = true; + if (isRetry) { + var ms = + (Duration(milliseconds: 200) - DateTime.now().difference(startTime)) + .inMilliseconds; + ms = ms > 0 ? ms : 0; + Future.delayed(Duration(milliseconds: ms), () { + retrying.value = false; + }); + } + + if (!ret && toastIfFail) { + BotToast.showText(contentColor: Colors.red, text: pushError.value); + } + if (ret && toastIfSucc) { + showToast(translate('Successful')); + } + return ret; } Peer? find(String id) { @@ -410,7 +434,7 @@ class AbModel { } // Be careful with loop calls if (syncChanged && push) { - pushAb(); + pushAb(toastIfSucc: false); } else if (uiChanged) { peers.refresh(); } From 6f8483aecd09fa5d41cc4a48438fab5047dedfef Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 16 Aug 2023 13:30:38 +0800 Subject: [PATCH 446/612] ab: full check for adding peers from recent/batch operation Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_tab_page.dart | 10 +++++++++- flutter/lib/models/ab_model.dart | 18 +++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 0937f6f5f..047d95f11 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -405,10 +405,18 @@ class _PeerTabPageState extends State !gFFI.userModel.isLogin || model.currentTab == PeerTabIndex.ab.index, child: InkWell( onTap: () { + if (gFFI.abModel.isFull(true)) { + return; + } final peers = model.selectedPeers; gFFI.abModel.addPeers(peers); - gFFI.abModel.pushAb(); + final future = gFFI.abModel.pushAb(); model.setMultiSelectionMode(false); + Future.delayed(Duration.zero, () async { + await future; + await Future.delayed(Duration(seconds: 2)); // toast + gFFI.abModel.isFull(true); + }); }, child: Tooltip( message: translate('Add to Address Book'), diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 9426b0571..1c07582d4 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -163,10 +163,16 @@ class AbModel { } } - void addPeers(List ps) { + bool addPeers(List ps) { + bool allAdded = true; for (var p in ps) { - addPeer(p); + if (!isFull(false)) { + addPeer(p); + } else { + allAdded = false; + } } + return allAdded; } void addTag(String tag) async { @@ -419,9 +425,11 @@ class AbModel { var r = recents[i]; var index = peers.indexWhere((e) => e.id == r.id); if (index < 0) { - peers.add(r); - syncChanged = true; - uiChanged = true; + if (!isFull(false)) { + peers.add(r); + syncChanged = true; + uiChanged = true; + } } else { if (!r.equal(peers[index])) { uiChanged = true; From c37732be9b2577cb6a9c28db332917963f5f3216 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 16 Aug 2023 14:09:06 +0800 Subject: [PATCH 447/612] correct translation --- src/lang/cn.rs | 2 +- src/lang/en.rs | 2 +- src/lang/tw.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 50756df7a..e8f815bfa 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -537,6 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", "未成功获取地址簿"), ("push_ab_failed_tip", "未成功上传地址簿"), - ("synced_peer_readded_tip", "最近会话中存在的设备将会被重新添加到地址簿。"), + ("synced_peer_readded_tip", "最近会话中存在的设备将会被重新同步到地址簿。"), ].iter().cloned().collect(); } diff --git a/src/lang/en.rs b/src/lang/en.rs index dc3dcb605..c949575c2 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -76,6 +76,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "You have reached the maximum number of managed devices."), ("pull_ab_failed_tip", "Failed to refresh address book"), ("push_ab_failed_tip", "Failed to sync address book to server"), - ("synced_peer_readded_tip", "The devices present in the recent sessions will be re-added to the address book."), + ("synced_peer_readded_tip", "The devices that were present in the recent sessions will be synchronized back to the address book."), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 837024f2e..6d9d8089c 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -537,6 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", ""), ("pull_ab_failed_tip", "未成功獲取地址簿"), ("push_ab_failed_tip", "未成功上傳地址簿"), - ("synced_peer_readded_tip", "最近會話中存在的設備將會被重新添加到地址簿。"), + ("synced_peer_readded_tip", "最近會話中存在的設備將會被重新同步到地址簿。"), ].iter().cloned().collect(); } From b063740d3ed5c36adf2ded069efc55a3d4e74aef Mon Sep 17 00:00:00 2001 From: Integral Date: Wed, 16 Aug 2023 14:20:15 +0800 Subject: [PATCH 448/612] Update cn.rs --- src/lang/cn.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lang/cn.rs b/src/lang/cn.rs index e8f815bfa..34ecdb276 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -528,13 +528,13 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", "将标签页移至新窗口"), ("Can not be empty", "不能为空"), ("Already exists", "已经存在"), - ("Change Password", ""), - ("Refresh Password", ""), - ("ID", ""), - ("Grid View", ""), - ("List View", ""), - ("Select", ""), - ("Toggle Tags", ""), + ("Change Password", "更改密码"), + ("Refresh Password", "刷新密码"), + ("ID", "ID"), + ("Grid View", "网格视图"), + ("List View", "列表视图"), + ("Select", "选择"), + ("Toggle Tags", "切换标签"), ("pull_ab_failed_tip", "未成功获取地址簿"), ("push_ab_failed_tip", "未成功上传地址簿"), ("synced_peer_readded_tip", "最近会话中存在的设备将会被重新同步到地址簿。"), From f9cd9a97eff1c1220a5b92dbce9ec78d556241a3 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 16 Aug 2023 14:29:41 +0800 Subject: [PATCH 449/612] fix readme --- docs/README-AR.md | 1 - docs/README-CS.md | 1 - docs/README-DA.md | 2 -- docs/README-DE.md | 1 - docs/README-EO.md | 1 - docs/README-ES.md | 1 - docs/README-FA.md | 1 - docs/README-FI.md | 1 - docs/README-FR.md | 1 - docs/README-GR.md | 1 - docs/README-HU.md | 1 - docs/README-ID.md | 1 - docs/README-IT.md | 1 - docs/README-JP.md | 1 - docs/README-KR.md | 1 - docs/README-ML.md | 1 - docs/README-NL.md | 1 - docs/README-PL.md | 1 - docs/README-PTBR.md | 1 - docs/README-RU.md | 2 -- docs/README-UA.md | 1 - docs/README-VN.md | 1 - docs/README-ZH.md | 1 - 23 files changed, 25 deletions(-) diff --git a/docs/README-AR.md b/docs/README-AR.md index cb671a045..80948fb39 100644 --- a/docs/README-AR.md +++ b/docs/README-AR.md @@ -33,7 +33,6 @@ | الموقع | المورد | المواصفات | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | ## التبعيات diff --git a/docs/README-CS.md b/docs/README-CS.md index 7371ca795..15e576c47 100644 --- a/docs/README-CS.md +++ b/docs/README-CS.md @@ -28,7 +28,6 @@ Níže jsou uvedeny servery zdarma k vašemu použití (údaje se mohou v čase | umístění | dodavatel | parametry | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | ## Softwarové součásti, na kterých závisí diff --git a/docs/README-DA.md b/docs/README-DA.md index a8a39ffb9..af2f5937f 100644 --- a/docs/README-DA.md +++ b/docs/README-DA.md @@ -26,8 +26,6 @@ Nedenfor er de servere, du bruger gratis, det kan ændre sig med tiden. Hvis du | Beliggenhed | Udbyder | Specifikation | | ---------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | -| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM | ## Afhængigheder diff --git a/docs/README-DE.md b/docs/README-DE.md index 55a774ce9..5ac370a87 100644 --- a/docs/README-DE.md +++ b/docs/README-DE.md @@ -35,7 +35,6 @@ Nachfolgend sind die Server gelistet, die Sie kostenlos nutzen können. Es kann | Standort | Anbieter | Spezifikation | | --------- | ------------- | ------------------ | | Deutschland | [Hetzner](https://www.hetzner.com/de/) | 2 vCPU / 4 GB RAM | -| Deutschland | [Codext](https://codext.de/) | 4 vCPU / 8 GB RAM | | Ukraine (Kiew) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | ## Dev-Container diff --git a/docs/README-EO.md b/docs/README-EO.md index d6bd60037..be1538089 100644 --- a/docs/README-EO.md +++ b/docs/README-EO.md @@ -25,7 +25,6 @@ Malsupre estas la serviloj, kiuj vi uzas senpage, ĝi povas ŝanĝi laŭlonge de | Situo | Vendanto | Detaloj | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dependantaĵoj diff --git a/docs/README-ES.md b/docs/README-ES.md index 1aaaf9a01..19a7335d3 100644 --- a/docs/README-ES.md +++ b/docs/README-ES.md @@ -32,7 +32,6 @@ A continuación se muestran los servidores gratuitos, pueden cambiar a medida qu | Ubicación | Compañía | Especificación | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dependencias diff --git a/docs/README-FA.md b/docs/README-FA.md index 59049c9fa..989b0047c 100644 --- a/docs/README-FA.md +++ b/docs/README-FA.md @@ -31,7 +31,6 @@ | موقعیت | سرویس دهنده | مشخصات | | --------- | ------------- | ------------------ | | آلمان | Hetzner | 2 vCPU / 4GB RAM | -| آلمان | Codext | 4 vCPU / 8GB RAM | ## وابستگی ها diff --git a/docs/README-FI.md b/docs/README-FI.md index b1175bf62..195d29c84 100644 --- a/docs/README-FI.md +++ b/docs/README-FI.md @@ -25,7 +25,6 @@ Alla on palvelimia, joita voit käyttää ilmaiseksi, ne saattavat muuttua ajan | Sijainti | Myyjä | Määrittely | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Riippuvuudet diff --git a/docs/README-FR.md b/docs/README-FR.md index a5a3f8706..39f09a625 100644 --- a/docs/README-FR.md +++ b/docs/README-FR.md @@ -26,7 +26,6 @@ Ci-dessous se trouvent les serveurs que vous utilisez gratuitement, cela peut ch | Location | Vendor | Specification | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | ## Dépendances diff --git a/docs/README-GR.md b/docs/README-GR.md index 818a69760..c720dd823 100644 --- a/docs/README-GR.md +++ b/docs/README-GR.md @@ -35,7 +35,6 @@ | Περιοχή | Πάροχος | Προδιαγραφές | | --------- | ------------- | ------------------ | | Γερμανία | Hetzner | 2 vCPU / 4GB RAM | -| Γερμανία | Codext | 4 vCPU / 8GB RAM | | Ουκρανία (Κίεβο) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dev Container diff --git a/docs/README-HU.md b/docs/README-HU.md index 3dbf6ceb2..8965a9b1e 100644 --- a/docs/README-HU.md +++ b/docs/README-HU.md @@ -33,7 +33,6 @@ Ezalatt az üzenet alatt találhatóak azok a publikus szerverek, amelyeket ingy | Hely | Host | Specifikáció | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dependencies diff --git a/docs/README-ID.md b/docs/README-ID.md index 7579c7673..e071cf6ee 100644 --- a/docs/README-ID.md +++ b/docs/README-ID.md @@ -25,7 +25,6 @@ Di bawah ini adalah server yang bisa Anda gunakan secara gratis, dapat berubah s | Lokasi | Vendor | Spesifikasi | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dependencies diff --git a/docs/README-IT.md b/docs/README-IT.md index 077600ed1..c1c46bfed 100644 --- a/docs/README-IT.md +++ b/docs/README-IT.md @@ -30,7 +30,6 @@ Se non sei vicino a uno di questi server, la connessione potrebbe essere lenta. | Posizione | Venditore | Specifiche | | --------- | ------------- | ------------------ | | Germania | Hetzner | 2 vCPU / 4GB RAM | -| Germania | Codext | 4 vCPU / 8GB RAM | | Ucraina (Kyev) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dipendenze diff --git a/docs/README-JP.md b/docs/README-JP.md index fc67ac11e..44f811eec 100644 --- a/docs/README-JP.md +++ b/docs/README-JP.md @@ -30,7 +30,6 @@ RustDeskは誰からの貢献も歓迎します。 貢献するには [`docs/CON | Location | Vendor | Specification | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | ## 依存関係 diff --git a/docs/README-KR.md b/docs/README-KR.md index 08a2a1708..dacb092e7 100644 --- a/docs/README-KR.md +++ b/docs/README-KR.md @@ -30,7 +30,6 @@ RustDesk는 모든 기여를 환영합니다. 기여하고자 한다면 [`docs/C | Location | Vendor | Specification | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | ## 의존관계 diff --git a/docs/README-ML.md b/docs/README-ML.md index 1c1f60146..a73fd7815 100644 --- a/docs/README-ML.md +++ b/docs/README-ML.md @@ -25,7 +25,6 @@ | സ്ഥാനം | കച്ചവടക്കാരൻ | വിവരണം | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | ## ഡിപെൻഡൻസികൾ diff --git a/docs/README-NL.md b/docs/README-NL.md index 60b9a7e2d..bec83a285 100644 --- a/docs/README-NL.md +++ b/docs/README-NL.md @@ -33,7 +33,6 @@ Hieronder staan de servers die u gratis gebruikt, ze kunnen in de loop van de ti | Locatie | Aanbieder | Specificaties | | --------- | ------------- | ------------------ | | Duitsland | Hetzner | 2 vCPU / 4GB RAM | -| Duitsland | Codext | 4 vCPU / 8GB RAM | | Oekraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dev Container diff --git a/docs/README-PL.md b/docs/README-PL.md index 57f2772f9..ba27af04d 100644 --- a/docs/README-PL.md +++ b/docs/README-PL.md @@ -35,7 +35,6 @@ Poniżej znajdują się serwery, z których można korzystać za darmo, może si | Lokalizacja | Dostawca | Specyfikacja | | --------- | ------------- | ------------------ | | Niemcy | Hetzner | 2 vCPU / 4GB RAM | -| Niemcy | Codext | 4 vCPU / 8GB RAM | | Ukraina (Kijów) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Konterner Programisty (Dev Container) diff --git a/docs/README-PTBR.md b/docs/README-PTBR.md index 08604110a..6e6f01fce 100644 --- a/docs/README-PTBR.md +++ b/docs/README-PTBR.md @@ -26,7 +26,6 @@ Abaixo estão os servidores que você está utilizando de graça, ele pode mudar | Localização | Fornecedor | Especificações | | ----------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | ## Dependências diff --git a/docs/README-RU.md b/docs/README-RU.md index 97d6ecfd9..01710f084 100644 --- a/docs/README-RU.md +++ b/docs/README-RU.md @@ -34,8 +34,6 @@ RustDesk приветствует вклад каждого. Ознакомьт | Расположение | Поставщик | Технические характеристики | | --------- | ------------- | ------------------ | | Германия | Hetzner | 2 vCPU / 4GB RAM | -| Германия | Codext | 4 vCPU / 8GB RAM | -| Россия (Москва) | [nt-vps](https://nt-vps.ru) | 8 vCPU / 8GB RAM | ## Зависимости diff --git a/docs/README-UA.md b/docs/README-UA.md index 2d3121430..01914cfc2 100644 --- a/docs/README-UA.md +++ b/docs/README-UA.md @@ -35,7 +35,6 @@ RustDesk вітає внесок кожного. Дивіться [`docs/CONTRIB | Місцезнаходження | Постачальник | Технічні характеристики | | --------- | ------------- | ------------------ | | Німеччина | Hetzner | 2 VCPU / 4GB RAM | -| Німеччина | Codext | 4 vCPU / 8GB RAM | | Україна (Київ) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | ## Dev Container diff --git a/docs/README-VN.md b/docs/README-VN.md index 58a0aaf9b..ea2c62ead 100644 --- a/docs/README-VN.md +++ b/docs/README-VN.md @@ -34,7 +34,6 @@ Dưới đây là những máy chủ mà bạn có thể sử dụng mà không | Địa điểm | Nhà cung cấp | Cấu hình | | --------- | ------------- | ------------------ | | Germany | Hetzner | 2 vCPU / 4GB RAM | -| Germany | Codext | 4 vCPU / 8GB RAM | ## Dependencies diff --git a/docs/README-ZH.md b/docs/README-ZH.md index b66c32d43..7967f7d30 100644 --- a/docs/README-ZH.md +++ b/docs/README-ZH.md @@ -37,7 +37,6 @@ RustDesk 期待各位的贡献. 如何参与开发? 详情请看 [CONTRIBUTING.m | Location | Vendor | Specification | | --------- | ------------- | ------------------ | | Germany | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4 GB RAM | -| Germany | [Codext](https://codext.de) | 4 vCPU / 8 GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | ## Dev Container From 416897994a49ae2034874e3739bc61fe4879082f Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 16 Aug 2023 14:34:03 +0800 Subject: [PATCH 450/612] update readme --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f7f3ab84b..26efb3559 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,6 @@ Below are the servers you are using for free, they may change over time. If you | Location | Vendor | Specification | | --------- | ------------- | ------------------ | | Germany | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4 GB RAM | -| Germany | [Codext](https://codext.de) | 4 vCPU / 8 GB RAM | | Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | ## Dev Container From da4679f0aec50970712e0013468961ca81b49711 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 16 Aug 2023 14:35:29 +0800 Subject: [PATCH 451/612] ab: add full check in pullAb && sync recent check login Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 1c07582d4..c160a139c 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -46,14 +46,17 @@ class AbModel { AbModel(this.parent) { if (desktopType == DesktopType.main) { Timer.periodic(Duration(milliseconds: 500), (timer) async { - if (_timerCounter++ % 6 == 0) syncFromRecent(); + if (_timerCounter++ % 6 == 0) { + if (!gFFI.userModel.isLogin) return; + syncFromRecent(); + } }); } } Future pullAb({force = true, quiet = false}) async { debugPrint("pullAb, force:$force, quiet:$quiet"); - if (gFFI.userModel.userName.isEmpty) return; + if (!gFFI.userModel.isLogin) return; if (abLoading.value) return; if (!force && initialized) return; DateTime startTime = DateTime.now(); @@ -101,6 +104,9 @@ class AbModel { peers.add(Peer.fromJson(peer)); } } + if (isFull(false)) { + peers.removeRange(licensedDevices, peers.length); + } _saveCache(); // save on success } } @@ -442,7 +448,7 @@ class AbModel { } // Be careful with loop calls if (syncChanged && push) { - pushAb(toastIfSucc: false); + pushAb(toastIfSucc: false, toastIfFail: false); } else if (uiChanged) { peers.refresh(); } From 7ccd8e2c87a24ee96627d5ab30ea85606ed49e15 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Wed, 16 Aug 2023 09:54:13 +0200 Subject: [PATCH 452/612] Update italian language From 542d86b667a2da19f89591a03a39edd9ab4d406e Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 16 Aug 2023 18:57:56 +0800 Subject: [PATCH 453/612] remove active_mouse_ which is very bad implementation --- src/server/input_service.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/server/input_service.rs b/src/server/input_service.rs index f5e4aebd3..b721149e9 100644 --- a/src/server/input_service.rs +++ b/src/server/input_service.rs @@ -707,7 +707,10 @@ fn get_last_input_cursor_pos() -> (i32, i32) { (lock.x, lock.y) } +// check if mouse is moved by the controlled side user to make controlled side has higher mouse priority than remote. fn active_mouse_(conn: i32) -> bool { + true + /* this method is buggy (not working on macOS, making fast moving mouse event discarded here) and added latency (this is blocking way, must do in async way), so we disable it for now // out of time protection if LATEST_SYS_CURSOR_POS.lock().unwrap().0.elapsed() > MOUSE_MOVE_PROTECTION_TIMEOUT { return true; @@ -760,6 +763,7 @@ fn active_mouse_(conn: i32) -> bool { } None => true, } + */ } pub fn handle_pointer_(evt: &PointerDeviceEvent, conn: i32) { From 1dc96e4fd2d86656ccb965fdf78e5bbc6f6a7b98 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 16 Aug 2023 21:48:49 +0800 Subject: [PATCH 454/612] Do not unregister texture if move to new window Signed-off-by: dignow --- flutter/lib/desktop/pages/remote_page.dart | 2 +- flutter/lib/models/desktop_render_texture.dart | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 28212e4ca..a417286ff 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -204,7 +204,7 @@ class _RemotePageState extends State // https://github.com/flutter/flutter/issues/64935 super.dispose(); debugPrint("REMOTE PAGE dispose session $sessionId ${widget.id}"); - await _renderTexture.destroy(); + await _renderTexture.destroy(closeSession); // ensure we leave this session, this is a double check bind.sessionEnterOrLeave(sessionId: sessionId, enter: false); DesktopMultiWindow.removeListener(this); diff --git a/flutter/lib/models/desktop_render_texture.dart b/flutter/lib/models/desktop_render_texture.dart index f59373623..49864642c 100644 --- a/flutter/lib/models/desktop_render_texture.dart +++ b/flutter/lib/models/desktop_render_texture.dart @@ -31,9 +31,11 @@ class RenderTexture { } } - destroy() async { + destroy(bool unregisterTexture) async { if (useTextureRender && _textureKey != -1 && _sessionId != null) { - platformFFI.registerTexture(_sessionId!, 0); + if (unregisterTexture) { + platformFFI.registerTexture(_sessionId!, 0); + } await textureRenderer.closeTexture(_textureKey); _textureKey = -1; } From 9adac5686be4914134e124162694b38338c66c2a Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 16 Aug 2023 21:52:03 +0800 Subject: [PATCH 455/612] fix unregister texture condition Signed-off-by: dignow --- flutter/lib/desktop/pages/remote_page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 2daffaccf..0d51cabdd 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -207,7 +207,7 @@ class _RemotePageState extends State // https://github.com/flutter/flutter/issues/64935 super.dispose(); debugPrint("REMOTE PAGE dispose session $sessionId ${widget.id}"); - await _renderTexture.destroy(widget.tabWindowId != null); + await _renderTexture.destroy(closeSession); // ensure we leave this session, this is a double check bind.sessionEnterOrLeave(sessionId: sessionId, enter: false); DesktopMultiWindow.removeListener(this); From 014ce28e3a5818f863f889139b610c889cfe668f Mon Sep 17 00:00:00 2001 From: leroyloren <57643470+leroyloren@users.noreply.github.com> Date: Wed, 16 Aug 2023 20:14:29 +0200 Subject: [PATCH 456/612] Update cs.rs --- src/lang/cs.rs | 640 ++++++++++++++++++++++++------------------------- 1 file changed, 320 insertions(+), 320 deletions(-) diff --git a/src/lang/cs.rs b/src/lang/cs.rs index e2028629a..215f03953 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -3,11 +3,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = [ ("Status", "Stav"), ("Your Desktop", "Vaše plocha"), - ("desk_tip", "Pomocí tohoto identifikátoru a hesla můžete přistupovat ke své ploše."), + ("desk_tip", "Pomocí tohoto ID a hesla lze přistupovat k pracovní ploše."), ("Password", "Heslo"), ("Ready", "Připraveno"), ("Established", "Navázáno"), - ("connecting_status", "Připojování se k Rusdesk síti…"), + ("connecting_status", "Připojování k RustDesk síti..."), ("Enable Service", "Povolit službu"), ("Start Service", "Spustit službu"), ("Service is running", "Služba je spuštěná"), @@ -27,38 +27,38 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Enable Clipboard", "Povolit schránku"), ("Enable File Transfer", "Povolit přenos souborů"), ("Enable TCP Tunneling", "Povolit TCP tunelování"), - ("IP Whitelisting", "Povolování pouze z daných IP adres)"), - ("ID/Relay Server", "Identifikátor / předávací (relay) server"), + ("IP Whitelisting", "Povolování pouze z daných IP adres"), + ("ID/Relay Server", "ID/předávací server"), ("Import Server Config", "Importovat konfiguraci serveru"), - ("Export Server Config", ""), + ("Export Server Config", "Exportovat konfiguraci serveru"), ("Import server configuration successfully", "Konfigurace serveru úspěšně importována"), - ("Export server configuration successfully", ""), + ("Export server configuration successfully", "Konfigurace serveru úspěšně exportována"), ("Invalid server configuration", "Neplatná konfigurace serveru"), ("Clipboard is empty", "Schránka je prázdná"), ("Stop service", "Zastavit službu"), - ("Change ID", "Změnit identifikátor"), - ("Your new ID", ""), - ("length %min% to %max%", ""), - ("starts with a letter", ""), - ("allowed characters", ""), - ("id_change_tip", "Použít je mozné pouze znaky a-z, A-Z, 0-9 a _ (podtržítko). Dále je třeba aby začínalo na písmeno a-z, A-Z. Délka mezi 6 a 16 znaky."), + ("Change ID", "Změnit ID"), + ("Your new ID", "Váše nové ID"), + ("length %min% to %max%", "délka mezi %min% a %max%"), + ("starts with a letter", "začíná písmenem"), + ("allowed characters", "povolené znaky"), + ("id_change_tip", "Použít je možné pouze znaky a-z, A-Z, 0-9 a _ (podtržítko). Dále je třeba aby začínalo písmenem a-z, A-Z. Délka mezi 6 a 16 znaky."), ("Website", "Webové stránky"), ("About", "O aplikaci"), - ("Slogan_tip", ""), - ("Privacy Statement", ""), + ("Slogan_tip", "Vytvořeno srdcem v tomto chaotickém světě!"), + ("Privacy Statement", "Prohlášení o ochraně osobních údajů"), ("Mute", "Ztlumit"), - ("Build Date", ""), - ("Version", ""), - ("Home", ""), + ("Build Date", "Datum sestavení"), + ("Version", "Verze"), + ("Home", "Domů"), ("Audio Input", "Vstup zvuku"), - ("Enhancements", ""), - ("Hardware Codec", ""), - ("Adaptive bitrate", ""), - ("ID Server", "Server pro identif."), - ("Relay Server", "Předávací (relay) server"), - ("API Server", "Server s API rozhraním"), + ("Enhancements", "Vylepšení"), + ("Hardware Codec", "Hardwarový kodek"), + ("Adaptive bitrate", "Adaptivní datový tok"), + ("ID Server", "ID Server"), + ("Relay Server", "Předávací server"), + ("API Server", "API Server"), ("invalid_http", "Je třeba, aby začínalo na http:// nebo https://"), - ("Invalid IP", "Neplatná IP adresa"), + ("Invalid IP", "Neplatná IP"), ("Invalid format", "Neplatný formát"), ("server_not_support", "Server zatím nepodporuje"), ("Not available", "Není k dispozici"), @@ -75,13 +75,13 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Do you want to enter again?", "Chcete se znovu připojit?"), ("Connection Error", "Chyba spojení"), ("Error", "Chyba"), - ("Reset by the peer", "Resetováno protějškem"), - ("Connecting...", "Připojování…"), - ("Connection in progress. Please wait.", "Probíhá připojování – vyčkejte."), - ("Please try 1 minute later", "Zkuste to až za minutu či déle"), + ("Reset by the peer", "Resetováno protistranou"), + ("Connecting...", "Připojování..."), + ("Connection in progress. Please wait.", "Probíhá připojování, vyčkejte prosím."), + ("Please try 1 minute later", "Zkuste to prosím o 1 minutu později"), ("Login Error", "Chyba přihlášení se"), ("Successful", "Úspěšné"), - ("Connected, waiting for image...", "Připojeno, čeká se na obraz…"), + ("Connected, waiting for image...", "Připojeno, čeká se na obraz..."), ("Name", "Název"), ("Type", "Typ"), ("Modified", "Změněno"), @@ -98,13 +98,13 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Delete", "Smazat"), ("Properties", "Vlastnosti"), ("Multi Select", "Vícenásobný výběr"), - ("Select All", ""), - ("Unselect All", ""), + ("Select All", "Vybrat vše"), + ("Unselect All", "Zrušit výběr všech"), ("Empty Directory", "Prázdná složka"), ("Not an empty directory", "Neprázdná složka"), ("Are you sure you want to delete this file?", "Opravdu chcete tento soubor vymazat?"), ("Are you sure you want to delete this empty directory?", "Opravdu chcete tuto prázdnou složku smazat?"), - ("Are you sure you want to delete the file of this directory?", "Opravdu chcete vymazat soubor, pocházející z této složky?"), + ("Are you sure you want to delete the file of this directory?", "Opravdu chcete vymazat soubor z této složky?"), ("Do this for all conflicts", "Naložit takto se všemi konflikty"), ("This is irreversible!", "Toto nelze vzít zpět"), ("Deleting", "Mazání"), @@ -113,7 +113,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Finished", "Dokončeno"), ("Speed", "Rychlost"), ("Custom Image Quality", "Uživatelsky určená kvalita obrazu"), - ("Privacy mode", "Režim soukromí"), + ("Privacy mode", "Režim ochrany soukromí"), ("Block user input", "Blokovat vstupní zařízení uživatele"), ("Unblock user input", "Odblokovat vstupní zařízení uživatele"), ("Adjust Window", "Přizpůsobit velikost okna"), @@ -121,79 +121,79 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Shrink", "Oříznout"), ("Stretch", "Roztáhnout"), ("Scrollbar", "Posuvník"), - ("ScrollAuto", "Rolovať Auto"), + ("ScrollAuto", "Automatické rolování"), ("Good image quality", "Dobrá kvalita obrazu"), ("Balanced", "Vyvážené"), ("Optimize reaction time", "Optimalizovat pro co nejnižší prodlevu odezvy"), - ("Custom", ""), - ("Show remote cursor", "Zobrazovat ukazatel myši z protějšku"), - ("Show quality monitor", ""), + ("Custom", "Vlastní"), + ("Show remote cursor", "Zobrazovat ukazatel myši z protistrany"), + ("Show quality monitor", "Zobrazit monitor kvality"), ("Disable clipboard", "Vypnout schránku"), ("Lock after session end", "Po ukončení relace zamknout plochu"), ("Insert", "Vložit"), ("Insert Lock", "Vložit zámek"), ("Refresh", "Načíst znovu"), - ("ID does not exist", "Takový identifikátor neexistuje"), - ("Failed to connect to rendezvous server", "Nepodařil se připojit ke zprostředkovávajícímu serveru"), + ("ID does not exist", "Toto ID neexistuje"), + ("Failed to connect to rendezvous server", "Nepodařilo se připojit ke zprostředkovávajícímu serveru"), ("Please try later", "Zkuste to později"), ("Remote desktop is offline", "Vzdálená plocha není připojená ke službě"), ("Key mismatch", "Neshoda klíčů"), ("Timeout", "Překročen časový limit pro navázání spojení"), - ("Failed to connect to relay server", "Nepodařilo se připojit k předávacímu (relay) serveru"), + ("Failed to connect to relay server", "Nepodařilo se připojit k předávacímu serveru"), ("Failed to connect via rendezvous server", "Nepodařilo se připojit prostřednictvím zprostředkovávajícího serveru"), - ("Failed to connect via relay server", "Nepodařilo se připojit prostřednictvím předávacímu (relay) serveru"), + ("Failed to connect via relay server", "Nepodařilo se připojit prostřednictvím předávacího serveru"), ("Failed to make direct connection to remote desktop", "Nepodařilo s navázat přímé připojení ke vzdálené ploše"), ("Set Password", "Nastavit heslo"), ("OS Password", "Heslo do operačního systému"), - ("install_tip", "Kvůli řízení oprávnění v systému (UAC), RustDesk v některých případech na protějšku nefunguje správně. Abyste se UAC vyhnuli, klikněte na níže uvedené tlačítko a nainstalujte tak RustDesk do systému."), - ("Click to upgrade", "Aktualizaci nainstalujete kliknutím"), - ("Click to download", "Stáhnete si kliknutím"), - ("Click to update", "Znovu načtete kliknutím"), + ("install_tip", "Kvůli řízení oprávnění v systému (UAC), RustDesk v některých případech na protistraně nefunguje správně. Abyste se UAC vyhnuli, klikněte na níže uvedené tlačítko a nainstalujte tak RustDesk do systému."), + ("Click to upgrade", "Kliknout pro aktualizaci"), + ("Click to download", "Kliknout pro stažení"), + ("Click to update", "Kliknout pro aktualizaci"), ("Configure", "Nastavit"), - ("config_acc", "Aby bylo možné na dálku ovládat vaši plochu, je třeba aplikaci RustDesk udělit oprávnění pro „Zpřístupnění pro hendikepované“."), - ("config_screen", "Aby bylo možné přistupovat k vaší ploše na dálku, je třeba aplikaci RustDesk udělit oprávněí pro „Nahrávání obsahu obrazovky“."), - ("Installing ...", "Instaluje se…"), + ("config_acc", "Aby bylo možné na dálku ovládat vaši plochu, je třeba aplikaci RustDesk udělit oprávnění pro \"Zpřístupnění pro hendikepované\"."), + ("config_screen", "Aby bylo možné přistupovat k vaší ploše na dálku, je třeba aplikaci RustDesk udělit oprávnění pro \"Nahrávání obsahu obrazovky\"."), + ("Installing ...", "Instaluje se ..."), ("Install", "Nainstalovat"), ("Installation", "Instalace"), - ("Installation Path", "Popis umístění instalace"), + ("Installation Path", "Umístění instalace"), ("Create start menu shortcuts", "Vytvořit zástupce v nabídce Start"), ("Create desktop icon", "Vytvořit ikonu na ploše"), ("agreement_tip", "Spuštěním instalace přijímáte licenční ujednání."), ("Accept and Install", "Přijmout a nainstalovat"), ("End-user license agreement", "Licencenční ujednání s koncovým uživatelem"), - ("Generating ...", "Vytváření…"), + ("Generating ...", "Vytváření ..."), ("Your installation is lower version.", "Máte nainstalovanou starší verzi"), ("not_close_tcp_tip", "Po dobu, po kterou tunel potřebujete, nezavírejte toto okno"), - ("Listening ...", "Očekávní spojení…"), - ("Remote Host", "Vzdálený stroj"), - ("Remote Port", "Port na protějšku"), + ("Listening ...", "Očekávaní spojení ..."), + ("Remote Host", "Vzdálený hostitel"), + ("Remote Port", "Vzdálený port"), ("Action", "Akce"), ("Add", "Přidat"), ("Local Port", "Místní port"), - ("Local Address", ""), - ("Change Local Port", ""), + ("Local Address", "Místní adresa"), + ("Change Local Port", "Změnit místní port"), ("setup_server_tip", "Rychlejší připojení získáte vytvořením si svého vlastního serveru"), - ("Too short, at least 6 characters.", "Příliš krátké – alespoň 6 znaků."), + ("Too short, at least 6 characters.", "Příliš krátké, alespoň 6 znaků."), ("The confirmation is not identical.", "Kontrolní zadání se neshoduje."), ("Permissions", "Oprávnění"), ("Accept", "Přijmout"), ("Dismiss", "Zahodit"), ("Disconnect", "Odpojit"), - ("Allow using keyboard and mouse", "Umožnit ovládání mé klávesnice a myši"), - ("Allow using clipboard", "Umožnit používání schránky"), - ("Allow hearing sound", "Umožnit slyšet můj zvuk"), + ("Allow using keyboard and mouse", "Povolit ovládání klávesnice a myši"), + ("Allow using clipboard", "Povolit použití schránky"), + ("Allow hearing sound", "Povolit slyšet zvuk"), ("Allow file copy and paste", "Povolit kopírování a vkládání souborů"), ("Connected", "Připojeno"), ("Direct and encrypted connection", "Přímé a šifrované spojení"), - ("Relayed and encrypted connection", "Předávané (relay) a šifrované spojení"), + ("Relayed and encrypted connection", "Předávané a šifrované spojení"), ("Direct and unencrypted connection", "Přímé a nešifrované spojení"), - ("Relayed and unencrypted connection", "Předávané (relay) a nešifrované spojení"), - ("Enter Remote ID", "Zadejte identifikátor protějšku"), + ("Relayed and unencrypted connection", "Předávané a nešifrované spojení"), + ("Enter Remote ID", "Zadejte ID protistrany"), ("Enter your password", "Zadejte své heslo"), - ("Logging in...", "Přihlašování se…"), - ("Enable RDP session sharing", "Zapnout sdílení relace RDP protokolu"), + ("Logging in...", "Přihlašování..."), + ("Enable RDP session sharing", "Povolit sdílení relace RDP"), ("Auto Login", "Automatické přihlášení"), - ("Enable Direct IP Access", "Zapnout přímý přístup na IP adresu"), + ("Enable Direct IP Access", "Povolit přímý přístup k IP"), ("Rename", "Přejmenovat"), ("Space", "Mezera"), ("Create Desktop Shortcut", "Vytvořit zástupce na ploše"), @@ -201,55 +201,55 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Create Folder", "Vytvořit složku"), ("Please enter the folder name", "Zadejte název pro složku"), ("Fix it", "Opravit to"), - ("Warning", "Upozornení"), - ("Login screen using Wayland is not supported", "Přihlašovací obrazovka prostřednictvím Wayland není podporována"), - ("Reboot required", "Je třeba restartovat"), + ("Warning", "Upozornění"), + ("Login screen using Wayland is not supported", "Přihlašovací obrazovka pomocí systému Wayland není podporována"), + ("Reboot required", "Je vyžadován restart"), ("Unsupported display server", "Nepodporovaný zobrazovací server"), - ("x11 expected", "očekávány x11"), - ("Port", ""), + ("x11 expected", "očekávaný x11"), + ("Port", "Port"), ("Settings", "Nastavení"), ("Username", "Uživatelské jméno"), ("Invalid port", "Neplatné číslo portu"), - ("Closed manually by the peer", "Ručně ukončeno protějškem"), - ("Enable remote configuration modification", "Umožnit upravování nastavení vzdáleného"), - ("Run without install", "Spustit bez instalování"), - ("Connect via relay", ""), - ("Always connect via relay", "Vždy se spojovat prostřednictvím brány pro předávání (relay)"), + ("Closed manually by the peer", "Ručně ukončeno protistranou"), + ("Enable remote configuration modification", "Povolit vzdálenou úpravu konfigurace"), + ("Run without install", "Spustit bez instalace"), + ("Connect via relay", "Připojení přes předávací server"), + ("Always connect via relay", "Vždy se připojovat prostřednictvím předávacího serveru"), ("whitelist_tip", "Přístup je umožněn pouze z IP adres, nacházejících se na seznamu povolených"), ("Login", "Přihlásit se"), - ("Verify", ""), - ("Remember me", ""), - ("Trust this device", ""), - ("Verification code", ""), - ("verification_tip", ""), + ("Verify", "Ověřit"), + ("Remember me", "Zapamatovat si"), + ("Trust this device", "Důvěřovat tomuto zařízení"), + ("Verification code", "Ověřovací kód"), + ("verification_tip", "Na registrovanou e-mailovou adresu byl zaslán ověřovací kód, zadejte jej a pokračujte v přihlašování."), ("Logout", "Odhlásit se"), ("Tags", "Štítky"), - ("Search ID", "Hledat identifikátor"), - ("whitelist_sep", "Odělováno čárkou, středníkem, mezerou nebo koncem řádku"), - ("Add ID", "Přidat identifikátor"), + ("Search ID", "Hledat ID"), + ("whitelist_sep", "Oddělené čárkou, středníkem, mezerami, nebo novým řádkem."), + ("Add ID", "Přidat ID"), ("Add Tag", "Přidat štítek"), ("Unselect all tags", "Zrušit výběr všech štítků"), ("Network error", "Chyba sítě"), ("Username missed", "Chybí uživatelské jméno"), ("Password missed", "Chybí heslo"), ("Wrong credentials", "Nesprávné přihlašovací údaje"), - ("The verification code is incorrect or has expired", ""), + ("The verification code is incorrect or has expired", "Ověřovací kód je nesprávný, nebo jeho platnost vypršela"), ("Edit Tag", "Upravit štítek"), - ("Unremember Password", "Přestat si heslo pamatovat"), + ("Unremember Password", "Přestat si pamatovat heslo"), ("Favorites", "Oblíbené"), ("Add to Favorites", "Přidat do oblíbených"), ("Remove from Favorites", "Odebrat z oblíbených"), ("Empty", "Prázdné"), ("Invalid folder name", "Neplatný název složky"), ("Socks5 Proxy", "Socks5 proxy"), - ("Hostname", "Název stroje"), + ("Hostname", "Název hostitele"), ("Discovered", "Objeveno"), ("install_daemon_tip", "Pokud má být spouštěno při startu systému, je třeba nainstalovat systémovou službu."), - ("Remote ID", "Identif. protějšku"), + ("Remote ID", "Vzdálené ID"), ("Paste", "Vložit"), - ("Paste here?", "Vložit sem?"), - ("Are you sure to close the connection?", "Opravdu chcete spojení ukončit?"), - ("Download new version", "Stáhnout si novou verzi"), + ("Paste here?", "Vložit zde?"), + ("Are you sure to close the connection?", "Opravdu chcete spojení uzavřít?"), + ("Download new version", "Stáhnout novou verzi"), ("Touch mode", "Režim dotyku"), ("Mouse mode", "Režim myši"), ("One-Finger Tap", "Klepnutí jedním prstem"), @@ -270,7 +270,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No permission of file transfer", "Žádné oprávnění přenosu souboru"), ("Note", "Poznámka"), ("Connection", "Připojení"), - ("Share Screen", "Nasdílet obrazovku"), + ("Share Screen", "Sdílet obrazovku"), ("Chat", "Chat"), ("Total", "Celkem"), ("items", "Položek"), @@ -288,255 +288,255 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("android_new_connection_tip", "Obdržen nový požadavek na řízení zařízení, který chce ovládat vaše stávající zařízení."), ("android_service_will_start_tip", "Zapnutí „Zachytávání obsahu obrazovky“ automaticky spustí službu, což umožní ostatním zařízením žádat o připojení k vašemu zařízení."), ("android_stop_service_tip", "Zastavení služby automaticky ukončí veškerá navázaná spojení."), - ("android_version_audio_tip", "Vámi nyní používaná verze systému Android nepodporuje zachytávání zvuku – přejděte na Android 10 nebo novější."), - ("android_start_service_tip", ""), - ("android_permission_may_not_change_tip", ""), - ("Account", ""), + ("android_version_audio_tip", "Vámi nyní používaná verze systému Android nepodporuje zachytávání zvuku – přejděte na Android 10, nebo novější."), + ("android_start_service_tip", "Klepnutím na možnost [Spustit službu], nebo povolením oprávnění [Snímání obrazovky] spustíte službu sdílení obrazovky."), + ("android_permission_may_not_change_tip", "Oprávnění pro navázaná připojení lze změnit až po opětovném připojení."), + ("Account", "Účet"), ("Overwrite", "Přepsat"), - ("This file exists, skip or overwrite this file?", "Tento soubor existuje – přeskočit ho nebo přepsat?"), + ("This file exists, skip or overwrite this file?", "Tento soubor existuje, přeskočit, nebo přepsat tento soubor?"), ("Quit", "Ukončit"), ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), ("Help", "Nápověda"), ("Failed", "Nepodařilo se"), - ("Succeeded", "Uspěl"), - ("Someone turns on privacy mode, exit", "Někdo zapne režim soukromí, ukončete ho"), + ("Succeeded", "Úspěšný"), + ("Someone turns on privacy mode, exit", "Někdo zapne režim ochrany soukromí, ukončete ho"), ("Unsupported", "Nepodporováno"), - ("Peer denied", "Peer popřel"), + ("Peer denied", "Protistana odmítnula"), ("Please install plugins", "Nainstalujte si prosím pluginy"), - ("Peer exit", "Peer exit"), + ("Peer exit", "Ukončení protistrany"), ("Failed to turn off", "Nepodařilo se vypnout"), ("Turned off", "Vypnutý"), - ("In privacy mode", "v režimu soukromí"), - ("Out privacy mode", "mimo režim soukromí"), - ("Language", ""), - ("Keep RustDesk background service", ""), - ("Ignore Battery Optimizations", ""), - ("android_open_battery_optimizations_tip", ""), - ("Start on Boot", ""), - ("Start the screen sharing service on boot, requires special permissions", ""), - ("Connection not allowed", ""), - ("Legacy mode", ""), - ("Map mode", ""), - ("Translate mode", ""), - ("Use permanent password", ""), - ("Use both passwords", ""), - ("Set permanent password", ""), - ("Enable Remote Restart", ""), - ("Allow remote restart", ""), - ("Restart Remote Device", ""), - ("Are you sure you want to restart", ""), - ("Restarting Remote Device", ""), - ("remote_restarting_tip", ""), - ("Copied", ""), - ("Exit Fullscreen", "Ukončete celou obrazovku"), + ("In privacy mode", "v režimu ochrany soukromí"), + ("Out privacy mode", "mimo režim ochrany soukromí"), + ("Language", "Jazyk"), + ("Keep RustDesk background service", "Zachovat službu RustDesk na pozadí"), + ("Ignore Battery Optimizations", "Ignorovat optimalizaci baterie"), + ("android_open_battery_optimizations_tip", "Pokud chcete tuto funkci zakázat, přejděte na další stránku nastavení aplikace RustDesk, najděte a zadejte [Baterie], zrušte zaškrtnutí [Neomezeno]."), + ("Start on Boot", "Spustit při startu systému"), + ("Start the screen sharing service on boot, requires special permissions", "Spuštění služby sdílení obrazovky při spuštění systému, vyžaduje zvláštní oprávnění"), + ("Connection not allowed", "Připojení není povoleno"), + ("Legacy mode", "Režim Legacy"), + ("Map mode", "Režim mapování"), + ("Translate mode", "Režim překladu"), + ("Use permanent password", "Použít trvalé heslo"), + ("Use both passwords", "Použít obě hesla"), + ("Set permanent password", "Nastavit trvalé heslo"), + ("Enable Remote Restart", "Povolit vzdálené restartování"), + ("Allow remote restart", "Povolit vzdálený restart"), + ("Restart Remote Device", "Restartovat vzdálené zařízení"), + ("Are you sure you want to restart", "Jste si jisti, že chcete restartovat"), + ("Restarting Remote Device", "Restartování vzdáleného zařízení"), + ("remote_restarting_tip", "Vzdálené zařízení se restartuje, zavřete prosím toto okno a po chvíli se znovu připojte pomocí trvalého hesla."), + ("Copied", "Zkopírováno"), + ("Exit Fullscreen", "Ukončit celou obrazovku"), ("Fullscreen", "Celá obrazovka"), ("Mobile Actions", "Mobilní akce"), - ("Select Monitor", "Vyberte možnost Monitor"), + ("Select Monitor", "Vybrat monitor"), ("Control Actions", "Ovládací akce"), ("Display Settings", "Nastavení obrazovky"), ("Ratio", "Poměr"), ("Image Quality", "Kvalita obrazu"), ("Scroll Style", "Štýl posúvania"), - ("Show Toolbar", ""), - ("Hide Toolbar", ""), + ("Show Toolbar", "Zobrazit panel nástrojů"), + ("Hide Toolbar", "Skrýt panel nástrojů"), ("Direct Connection", "Přímé spojení"), - ("Relay Connection", "Připojení relé"), + ("Relay Connection", "Připojení předávací server"), ("Secure Connection", "Zabezpečené připojení"), ("Insecure Connection", "Nezabezpečené připojení"), ("Scale original", "Měřítko původní"), ("Scale adaptive", "Měřítko adaptivní"), - ("General", ""), - ("Security", ""), - ("Theme", ""), - ("Dark Theme", ""), - ("Light Theme", ""), - ("Dark", ""), - ("Light", ""), - ("Follow System", ""), - ("Enable hardware codec", ""), - ("Unlock Security Settings", ""), - ("Enable Audio", ""), - ("Unlock Network Settings", ""), - ("Server", ""), - ("Direct IP Access", ""), - ("Proxy", ""), - ("Apply", ""), - ("Disconnect all devices?", ""), - ("Clear", ""), - ("Audio Input Device", ""), - ("Use IP Whitelisting", ""), - ("Network", ""), - ("Enable RDP", ""), - ("Pin Toolbar", ""), - ("Unpin Toolbar", ""), - ("Recording", ""), - ("Directory", ""), - ("Automatically record incoming sessions", ""), - ("Change", ""), - ("Start session recording", ""), - ("Stop session recording", ""), - ("Enable Recording Session", ""), - ("Allow recording session", ""), - ("Enable LAN Discovery", ""), - ("Deny LAN Discovery", ""), - ("Write a message", ""), - ("Prompt", ""), - ("Please wait for confirmation of UAC...", ""), - ("elevated_foreground_window_tip", ""), - ("Disconnected", ""), - ("Other", ""), - ("Confirm before closing multiple tabs", ""), - ("Keyboard Settings", ""), - ("Full Access", ""), - ("Screen Share", ""), - ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland vyžaduje Ubuntu 21.04 nebo vyšší verzi."), - ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland vyžaduje vyšší verzi linuxové distribuce. Zkuste prosím X11 desktop nebo změňte OS."), - ("JumpLink", "View"), - ("Please Select the screen to be shared(Operate on the peer side).", "Vyberte prosím obrazovku, kterou chcete sdílet (Ovládejte na straně protějšku)."), - ("Show RustDesk", ""), - ("This PC", ""), - ("or", ""), - ("Continue with", ""), - ("Elevate", ""), - ("Zoom cursor", ""), - ("Accept sessions via password", ""), - ("Accept sessions via click", ""), - ("Accept sessions via both", ""), - ("Please wait for the remote side to accept your session request...", ""), - ("One-time Password", ""), - ("Use one-time password", ""), - ("One-time password length", ""), - ("Request access to your device", ""), - ("Hide connection management window", ""), - ("hide_cm_tip", ""), - ("wayland_experiment_tip", ""), - ("Right click to select tabs", ""), - ("Skipped", ""), - ("Add to Address Book", ""), - ("Group", ""), - ("Search", ""), - ("Closed manually by web console", ""), - ("Local keyboard type", ""), - ("Select local keyboard type", ""), - ("software_render_tip", ""), - ("Always use software rendering", ""), - ("config_input", ""), - ("config_microphone", ""), - ("request_elevation_tip", ""), - ("Wait", ""), - ("Elevation Error", ""), - ("Ask the remote user for authentication", ""), - ("Choose this if the remote account is administrator", ""), - ("Transmit the username and password of administrator", ""), - ("still_click_uac_tip", ""), - ("Request Elevation", ""), - ("wait_accept_uac_tip", ""), - ("Elevate successfully", ""), - ("uppercase", ""), - ("lowercase", ""), - ("digit", ""), - ("special character", ""), - ("length>=8", ""), - ("Weak", ""), - ("Medium", ""), - ("Strong", ""), - ("Switch Sides", ""), - ("Please confirm if you want to share your desktop?", ""), - ("Display", ""), - ("Default View Style", ""), - ("Default Scroll Style", ""), - ("Default Image Quality", ""), - ("Default Codec", ""), - ("Bitrate", ""), - ("FPS", ""), - ("Auto", ""), - ("Other Default Options", ""), - ("Voice call", ""), - ("Text chat", ""), - ("Stop voice call", ""), - ("relay_hint_tip", ""), - ("Reconnect", ""), - ("Codec", ""), - ("Resolution", ""), - ("No transfers in progress", ""), - ("Set one-time password length", ""), - ("install_cert_tip", ""), - ("confirm_install_cert_tip", ""), - ("RDP Settings", ""), - ("Sort by", ""), - ("New Connection", ""), - ("Restore", ""), - ("Minimize", ""), - ("Maximize", ""), - ("Your Device", ""), - ("empty_recent_tip", ""), - ("empty_favorite_tip", ""), - ("empty_lan_tip", ""), - ("empty_address_book_tip", ""), - ("eg: admin", ""), - ("Empty Username", ""), - ("Empty Password", ""), - ("Me", ""), - ("identical_file_tip", ""), - ("show_monitors_tip", ""), - ("View Mode", ""), - ("login_linux_tip", ""), - ("verify_rustdesk_password_tip", ""), - ("remember_account_tip", ""), - ("os_account_desk_tip", ""), - ("OS Account", ""), - ("another_user_login_title_tip", ""), - ("another_user_login_text_tip", ""), - ("xorg_not_found_title_tip", ""), - ("xorg_not_found_text_tip", ""), - ("no_desktop_title_tip", ""), - ("no_desktop_text_tip", ""), - ("No need to elevate", ""), - ("System Sound", ""), - ("Default", ""), - ("New RDP", ""), - ("Fingerprint", ""), - ("Copy Fingerprint", ""), - ("no fingerprints", ""), - ("Select a peer", ""), - ("Select peers", ""), - ("Plugins", ""), - ("Uninstall", ""), - ("Update", ""), - ("Enable", ""), - ("Disable", ""), - ("Options", ""), - ("resolution_original_tip", ""), - ("resolution_fit_local_tip", ""), - ("resolution_custom_tip", ""), - ("Collapse toolbar", ""), - ("Accept and Elevate", ""), - ("accept_and_elevate_btn_tooltip", ""), - ("clipboard_wait_response_timeout_tip", ""), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), - ("logout_tip", ""), - ("Service", ""), - ("Start", ""), - ("Stop", ""), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), - ("Open connection in new tab", ""), - ("Move tab to new window", ""), - ("Can not be empty", ""), - ("Already exists", ""), - ("Change Password", ""), - ("Refresh Password", ""), - ("ID", ""), - ("Grid View", ""), - ("List View", ""), - ("Select", ""), - ("Toggle Tags", ""), - ("pull_ab_failed_tip", ""), - ("push_ab_failed_tip", ""), - ("synced_peer_readded_tip", ""), + ("General", "Obecné"), + ("Security", "Zabezpečení"), + ("Theme", "Motiv"), + ("Dark Theme", "Tmavý motiv"), + ("Light Theme", "Světlý motiv"), + ("Dark", "Tmavý"), + ("Light", "Světlý"), + ("Follow System", "Podle systému"), + ("Enable hardware codec", "Povolit hardwarový kodek"), + ("Unlock Security Settings", "Odemknout nastavení zabezpečení"), + ("Enable Audio", "Povolit zvuk"), + ("Unlock Network Settings", "Odemknutí na"), + ("Server", "Server"), + ("Direct IP Access", "Přímý IP přístup"), + ("Proxy", "Proxy"), + ("Apply", "Použít"), + ("Disconnect all devices?", "Odpojit všechna zařízení?"), + ("Clear", "Smazat"), + ("Audio Input Device", "Vstupní zvukové zařízení"), + ("Use IP Whitelisting", "Použít bílou listinu IP"), + ("Network", "Síť"), + ("Enable RDP", "Povolit protokol RDP"), + ("Pin Toolbar", "Připnout panel nástrojů"), + ("Unpin Toolbar", "Odepnout panel nástrojů"), + ("Recording", "Nahrávání"), + ("Directory", "Adresář"), + ("Automatically record incoming sessions", "Automaticky zaznamenávat příchozí relace"), + ("Change", "Změnit"), + ("Start session recording", "Spustit záznam relace"), + ("Stop session recording", "Zastavit záznam relace"), + ("Enable Recording Session", "Povolit nahrávání relace"), + ("Allow recording session", "Povolit nahrávání relace"), + ("Enable LAN Discovery", "Povolit zjišťování sítě LAN"), + ("Deny LAN Discovery", "Zakázat zjišťování sítě LAN"), + ("Write a message", "Napsat zprávu"), + ("Prompt", "Výzva"), + ("Please wait for confirmation of UAC...", "Počkejte prosím na potvrzení UAC..."), + ("elevated_foreground_window_tip", "Aktuální okno vzdálené plochy vyžaduje vyšší oprávnění, takže dočasně nemůže používat myš a klávesnici. Můžete vzdáleného uživatele požádat, aby aktuální okno minimalizoval, nebo kliknout na tlačítko pro zvýšení v okně správy připojení. Chcete-li se tomuto problému vyhnout, doporučujeme nainstalovat software na vzdálené zařízení."), + ("Disconnected", "Odpojeno"), + ("Other", "Jiné"), + ("Confirm before closing multiple tabs", "Potvrdit před zavřením více karet"), + ("Keyboard Settings", "Nastavení klávesnice"), + ("Full Access", "Úplný přístup"), + ("Screen Share", "Sdílení obrazovky"), + ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland vyžaduje Ubuntu 21.04, nebo vyšší verzi."), + ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland vyžaduje vyšší verzi linuxové distribuce. Zkuste prosím X11 desktop, nebo změňte OS."), + ("JumpLink", "JumpLink"), + ("Please Select the screen to be shared(Operate on the peer side).", "Vyberte prosím obrazovku, kterou chcete sdílet (Ovládejte na straně protistrany)."), + ("Show RustDesk", "Zobrazit RustDesk"), + ("This PC", "Tento počítač"), + ("or", "nebo"), + ("Continue with", "Pokračovat s"), + ("Elevate", "Zvýšit"), + ("Zoom cursor", "Kurzor přiblížení"), + ("Accept sessions via password", "Přijímat relace pomocí hesla"), + ("Accept sessions via click", "Přijímat relace kliknutím"), + ("Accept sessions via both", "Přijímat relace prostřednictvím obou"), + ("Please wait for the remote side to accept your session request...", "Počkejte prosím, až vzdálená strana přijme váš požadavek na relaci..."), + ("One-time Password", "Jednorázové heslo"), + ("Use one-time password", "Použít jednorázové heslo"), + ("One-time password length", "Délka jednorázového hesla"), + ("Request access to your device", "Žádost o přístup k vašemu zařízení"), + ("Hide connection management window", "Skrýt okno správy připojení"), + ("hide_cm_tip", "Povolit skrývání pouze v případě, že přijímáte relace pomocí hesla a používáte trvalé heslo."), + ("wayland_experiment_tip", "Podpora Waylandu je v experimentální fázi, pokud potřebujete bezobslužný přístup, použijte prosím X11."), + ("Right click to select tabs", "Výběr karet kliknutím pravým tlačítkem myši"), + ("Skipped", "Vynecháno"), + ("Add to Address Book", "Přidat do adresáře"), + ("Group", "Skupina"), + ("Search", "Vyhledávání"), + ("Closed manually by web console", "Uzavřeno ručně pomocí webové konzole"), + ("Local keyboard type", "Typ místní klávesnice"), + ("Select local keyboard type", "Výběr typu místní klávesnice"), + ("software_render_tip", "Pokud používáte grafickou kartu Nvidia v systému Linux a vzdálené okno se po připojení ihned zavře, může vám pomoci přepnutí na open-source ovladač Nouveau a volba softwarového vykreslování. Je nutný restart softwaru."), + ("Always use software rendering", "Vždy použít softwarové vykreslování"), + ("config_input", "Chcete-li ovládat vzdálenou plochu pomocí klávesnice, musíte udělit oprávnění RustDesk \"Sledování vstupu\"."), + ("config_microphone", "Abyste mohli mluvit na dálku, musíte udělit oprávnění RustDesk \"Nahrávat zvuk\"."), + ("request_elevation_tip", "Můžete také požádat o zvýšení, pokud je někdo na vzdálené straně."), + ("Wait", "Počkejte"), + ("Elevation Error", "Chyba navýšení"), + ("Ask the remote user for authentication", "Požádat vzdáleného uživatele o ověření"), + ("Choose this if the remote account is administrator", "Tuto možnost vyberte, pokud je vzdálený účet správce"), + ("Transmit the username and password of administrator", "Přenos uživatelského jména a hesla správce"), + ("still_click_uac_tip", "Stále vyžaduje, aby vzdálený uživatel kliknul na OK v okně UAC spuštěného RustDesku."), + ("Request Elevation", "Žádost o navýšení"), + ("wait_accept_uac_tip", "Počkejte, až vzdálený uživatel přijme dialogové okno UAC."), + ("Elevate successfully", "Úspěšné navýšení"), + ("uppercase", "velká písmena"), + ("lowercase", "malá písmena"), + ("digit", "číslice"), + ("special character", "speciální znak"), + ("length>=8", "délka>=8"), + ("Weak", "Slabé"), + ("Medium", "Střední"), + ("Strong", "Silné"), + ("Switch Sides", "Přepínání stran"), + ("Please confirm if you want to share your desktop?", "Potvrďte prosím, zda chcete sdílet svou plochu?"), + ("Display", "Obrazovka"), + ("Default View Style", "Výchozí styl zobrazení"), + ("Default Scroll Style", "Výchozí styl posouvání"), + ("Default Image Quality", "Výchozí kvalita obrazu"), + ("Default Codec", "Výchozí kodek"), + ("Bitrate", "Datový tok"), + ("FPS", "FPS"), + ("Auto", "Auto"), + ("Other Default Options", "Ostatní výchozí možnosti"), + ("Voice call", "Hlasové volání"), + ("Text chat", "Textový chat"), + ("Stop voice call", "Zastavit hlasové volání"), + ("relay_hint_tip", "Přímé připojení nemusí být možné, můžete se zkusit připojit přes předávací server. Pokud navíc chcete při prvním pokusu použít předávací server, můžete k ID přidat příponu \"/r\", nebo v kartě posledních relací vybrat možnost \"Vždy se připojovat přes bránu\", pokud existuje."), + ("Reconnect", "Znovu připojit"), + ("Codec", "Kodek"), + ("Resolution", "Rozlišení"), + ("No transfers in progress", "Žádné probíhající přenosy"), + ("Set one-time password length", "Nastavení délky jednorázového hesla"), + ("install_cert_tip", "Instalace certifikátu RustDesk"), + ("confirm_install_cert_tip", "Jedná se o testovací certifikát RustDesk, kterému lze důvěřovat. Certifikát bude v případě potřeby použit k důvěryhodnosti a instalaci ovladačů RustDesk."), + ("RDP Settings", "Nastavení RDP"), + ("Sort by", "Seřadit podle"), + ("New Connection", "Nové připojení"), + ("Restore", "Obnovit"), + ("Minimize", "Minimalizovat"), + ("Maximize", "Maximalizovat"), + ("Your Device", "Vaše zařízení"), + ("empty_recent_tip", "Ups, žádná nedávná relace!\nČas naplánovat nové."), + ("empty_favorite_tip", "Ještě nemáte oblíbené protistrany?\nNajděte někoho, s kým se můžete spojit, a přidejte si ho do oblíbených!"), + ("empty_lan_tip", "Ale ne, vypadá, že jsme ještě neobjevili žádné protistrany."), + ("empty_address_book_tip", "Ach bože, zdá se, že ve vašem adresáři nejsou v současné době uvedeni žádní kolegové."), + ("eg: admin", "např. admin"), + ("Empty Username", "Prázdné uživatelské jméno"), + ("Empty Password", "Prázdné heslo"), + ("Me", "Já"), + ("identical_file_tip", "Tento soubor je totožný se souborem partnera."), + ("show_monitors_tip", "Zobrazit monitory na panelu nástrojů"), + ("View Mode", "Režim zobrazení"), + ("login_linux_tip", "Chcete-li povolit relaci plochy X, musíte se přihlásit ke vzdálenému účtu systému Linux."), + ("verify_rustdesk_password_tip", "Ověření hesla RustDesk"), + ("remember_account_tip", "Zapamatovat si tento účet"), + ("os_account_desk_tip", "Tento účet se používá k přihlášení do vzdáleného operačního systému a k povolení relace plochy v režimu headless."), + ("OS Account", "Účet operačního systému"), + ("another_user_login_title_tip", "Další uživatel je již přihlášen"), + ("another_user_login_text_tip", "Odpojit"), + ("xorg_not_found_title_tip", "Xorg nebyl nalezen"), + ("xorg_not_found_text_tip", "Prosím, nainstalujte Xorg"), + ("no_desktop_title_tip", "Není k dispozici žádná plocha"), + ("no_desktop_text_tip", "Nainstalujte si prosím prostředí GNOME"), + ("No need to elevate", "Není třeba navýšení"), + ("System Sound", "Zvuk systému"), + ("Default", "Výchozí"), + ("New RDP", "Nové RDP"), + ("Fingerprint", "Otisk"), + ("Copy Fingerprint", "Kopírovat otisk"), + ("no fingerprints", "žádný otisk"), + ("Select a peer", "Výběr protistrany"), + ("Select peers", "Vybrat protistrany"), + ("Plugins", "Pluginy"), + ("Uninstall", "Odinstalovat"), + ("Update", "Aktualizovat"), + ("Enable", "Povolit"), + ("Disable", "Zakázat"), + ("Options", "Možnosti"), + ("resolution_original_tip", "Původní rozlišení"), + ("resolution_fit_local_tip", "Přizpůsobit místní rozlišení"), + ("resolution_custom_tip", "Vlastní rozlišení"), + ("Collapse toolbar", "Sbalit panel nástrojů"), + ("Accept and Elevate", "Přijmout navýšení"), + ("accept_and_elevate_btn_tooltip", "Přijměte připojení a zvyšte oprávnění UAC."), + ("clipboard_wait_response_timeout_tip", "Vypršel čas čekání odpovědi na kopii."), + ("Incoming connection", "Příchozí připojení"), + ("Outgoing connection", "Odchozí připojení"), + ("Exit", "Ukončit"), + ("Open", "Otevřít"), + ("logout_tip", "Opravdu se chcete odhlásit?"), + ("Service", "Služba"), + ("Start", "Spustit"), + ("Stop", "Zastavit"), + ("exceed_max_devices", "Dosáhli jste maximálního počtu spravovaných zařízení."), + ("Sync with recent sessions", "Synchronizace s posledními relacemi"), + ("Sort tags", "Seřadit štítky"), + ("Open connection in new tab", "Otevřít připojení na nové kartě"), + ("Move tab to new window", "Přesunout kartu do nového okna"), + ("Can not be empty", "Nemůže být prázdné"), + ("Already exists", "Již existuje"), + ("Change Password", "Změnit heslo"), + ("Refresh Password", "Obnovit heslo"), + ("ID", "ID"), + ("Grid View", "Mřížka"), + ("List View", "Seznam"), + ("Select", "Vybrat"), + ("Toggle Tags", "Přepnout štítky"), + ("pull_ab_failed_tip", "Nepodařilo se obnovit adresář"), + ("push_ab_failed_tip", "Nepodařilo se synchronizovat adresář se serverem"), + ("synced_peer_readded_tip", "Zařízení, která byla přítomna v posledních relacích, budou synchronizována zpět do adresáře."), ].iter().cloned().collect(); } From 4aac3d076f1633a8911ea997f2a427da608e6ea7 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Wed, 16 Aug 2023 22:25:21 +0200 Subject: [PATCH 457/612] Update de.rs --- src/lang/de.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index c62309cbf..53a898a6a 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -537,6 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", "Tags umschalten"), ("pull_ab_failed_tip", "Aktualisierung des Adressbuchs fehlgeschlagen"), ("push_ab_failed_tip", "Synchronisierung des Adressbuchs mit dem Server fehlgeschlagen"), - ("synced_peer_readded_tip", ""), + ("synced_peer_readded_tip", "Die Geräte, die in den letzten Sitzungen vorhanden waren, werden erneut zum Adressbuch hinzugefügt."), ].iter().cloned().collect(); } From 8e9f3e2b4dd7eb44ca936c655e4347b96b3e302a Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 16 Aug 2023 22:43:17 +0800 Subject: [PATCH 458/612] fix ab sync judge Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 25 +++++++++++++------------ flutter/lib/models/peer_model.dart | 13 +++++++++++++ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index c160a139c..001e16190 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -380,12 +380,12 @@ class AbModel { } Future _syncFromRecentWithoutLock({bool push = true}) async { - bool shouldSync(Peer r, Peer p) { - return r.hash != p.hash || - r.username != p.username || - r.platform != p.platform || - r.hostname != p.hostname || - (p.alias.isEmpty && r.alias.isNotEmpty); + bool peerSyncEqual(Peer a, Peer b) { + return a.hash == b.hash && + a.username == b.username && + a.platform == b.platform && + a.hostname == b.hostname && + a.alias == b.alias; } Future> getRecentPeers() async { @@ -425,29 +425,30 @@ class AbModel { if (!shouldSyncAb()) return; final recents = await getRecentPeers(); if (recents.isEmpty) return; - bool syncChanged = false; bool uiChanged = false; + bool needSync = false; for (var i = 0; i < recents.length; i++) { var r = recents[i]; var index = peers.indexWhere((e) => e.id == r.id); if (index < 0) { if (!isFull(false)) { peers.add(r); - syncChanged = true; uiChanged = true; + needSync = true; } } else { if (!r.equal(peers[index])) { uiChanged = true; } - if (shouldSync(r, peers[index])) { - syncChanged = true; - } + Peer old = Peer.copy(peers[index]); peers[index] = merge(r, peers[index]); + if (!peerSyncEqual(peers[index], old)) { + needSync = true; + } } } // Be careful with loop calls - if (syncChanged && push) { + if (needSync && push) { pushAb(toastIfSucc: false, toastIfFail: false); } else if (uiChanged) { peers.refresh(); diff --git a/flutter/lib/models/peer_model.dart b/flutter/lib/models/peer_model.dart index ddd9f8538..34afbfeaf 100644 --- a/flutter/lib/models/peer_model.dart +++ b/flutter/lib/models/peer_model.dart @@ -101,6 +101,19 @@ class Peer { rdpPort == other.rdpPort && rdpUsername == other.rdpUsername; } + + Peer.copy(Peer other) + : this( + id: other.id, + hash: other.hash, + username: other.username, + hostname: other.hostname, + platform: other.platform, + alias: other.alias, + tags: other.tags.toList(), + forceAlwaysRelay: other.forceAlwaysRelay, + rdpPort: other.rdpPort, + rdpUsername: other.rdpUsername); } enum UpdateEvent { online, load } From 1ff94d1035023e3dc8161e6238f18230a578ae2f Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 17 Aug 2023 09:51:43 +0800 Subject: [PATCH 459/612] fix, portable version, busy cursor last for a long time Signed-off-by: dignow --- libs/portable/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/portable/src/main.rs b/libs/portable/src/main.rs index 6a000f5a1..dc6f7bc84 100644 --- a/libs/portable/src/main.rs +++ b/libs/portable/src/main.rs @@ -54,7 +54,7 @@ fn execute(path: PathBuf, args: Vec) { .stdin(Stdio::inherit()) .stdout(Stdio::inherit()) .stderr(Stdio::inherit()) - .output() + .spawn() .ok(); } From 21bb40fce5bf8243be59a0d245277820432117dd Mon Sep 17 00:00:00 2001 From: solokot Date: Thu, 17 Aug 2023 10:12:13 +0300 Subject: [PATCH 460/612] Update ru.rs --- src/lang/ru.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index dec93c575..5830525d9 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -400,8 +400,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Elevate", "Повысить"), ("Zoom cursor", "Масштабировать курсор"), ("Accept sessions via password", "Принимать сеансы по паролю"), - ("Accept sessions via click", "Принимать сеансы по нажатию"), - ("Accept sessions via both", "Принимать сеансы по паролю+нажатию"), + ("Accept sessions via click", "Принимать сеансы нажатем кнопки"), + ("Accept sessions via both", "Принимать сеансы по паролю и нажатию кнопки"), ("Please wait for the remote side to accept your session request...", "Подождите, пока удалённая сторона примет ваш запрос на сеанс..."), ("One-time Password", "Одноразовый пароль"), ("Use one-time password", "Использовать одноразовый пароль"), @@ -522,7 +522,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Start", "Запустить"), ("Stop", "Остановить"), ("exceed_max_devices", "Достигнуто максимальное количество управляемых устройств."), - ("Sync with recent sessions", "Синхронизация последних сессий"), + ("Sync with recent sessions", "Синхронизация последних сеансов"), ("Sort tags", "Сортировка меток"), ("Open connection in new tab", "Открыть подключение в новой вкладке"), ("Move tab to new window", "Переместить вкладку в отдельное окно"), @@ -537,6 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", "Переключить метки"), ("pull_ab_failed_tip", "Невозможно обновить адресную книгу"), ("push_ab_failed_tip", "Невозможно синхронизировать адресную книгу с сервером"), - ("synced_peer_readded_tip", ""), + ("synced_peer_readded_tip", "Устройства, присутствовавшие в последних сеансах, будут синхронизированы с адресной книгой."), ].iter().cloned().collect(); } From 8dcb2e073a7d525c3e1938341018e88ea690a68d Mon Sep 17 00:00:00 2001 From: leroyloren <57643470+leroyloren@users.noreply.github.com> Date: Thu, 17 Aug 2023 09:41:13 +0200 Subject: [PATCH 461/612] Update cs.rs some fixes --- src/lang/cs.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 215f03953..51c483e65 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -14,7 +14,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Service is not running", "Služba není spuštěná"), ("not_ready_status", "Nepřipraveno. Zkontrolujte své připojení."), ("Control Remote Desktop", "Ovládat vzdálenou plochu"), - ("Transfer File", "Přenést soubor"), + ("Transfer File", "Přenos souborů"), ("Connect", "Připojit"), ("Recent Sessions", "Nedávné relace"), ("Address Book", "Adresář kontaktů"), @@ -46,7 +46,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("About", "O aplikaci"), ("Slogan_tip", "Vytvořeno srdcem v tomto chaotickém světě!"), ("Privacy Statement", "Prohlášení o ochraně osobních údajů"), - ("Mute", "Ztlumit"), + ("Mute", "Ztlumit zvuk"), ("Build Date", "Datum sestavení"), ("Version", "Verze"), ("Home", "Domů"), @@ -124,14 +124,14 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("ScrollAuto", "Automatické rolování"), ("Good image quality", "Dobrá kvalita obrazu"), ("Balanced", "Vyvážené"), - ("Optimize reaction time", "Optimalizovat pro co nejnižší prodlevu odezvy"), + ("Optimize reaction time", "Nejlepší reakční rychlost"), ("Custom", "Vlastní"), - ("Show remote cursor", "Zobrazovat ukazatel myši z protistrany"), + ("Show remote cursor", "Zobrazit vzdálený kurzor"), ("Show quality monitor", "Zobrazit monitor kvality"), ("Disable clipboard", "Vypnout schránku"), ("Lock after session end", "Po ukončení relace zamknout plochu"), ("Insert", "Vložit"), - ("Insert Lock", "Vložit zámek"), + ("Insert Lock", "Zamknout"), ("Refresh", "Načíst znovu"), ("ID does not exist", "Toto ID neexistuje"), ("Failed to connect to rendezvous server", "Nepodařilo se připojit ke zprostředkovávajícímu serveru"), @@ -267,7 +267,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Pinch to Zoom", "Přiblížíte roztažením dvěma prsty"), ("Canvas Zoom", "Přiblížení zobrazení"), ("Reset canvas", "Vrátit měřtko zobrazení na výchozí"), - ("No permission of file transfer", "Žádné oprávnění přenosu souboru"), + ("No permission of file transfer", "Žádné oprávnění přenosu souborů"), ("Note", "Poznámka"), ("Connection", "Připojení"), ("Share Screen", "Sdílet obrazovku"), @@ -444,7 +444,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Please confirm if you want to share your desktop?", "Potvrďte prosím, zda chcete sdílet svou plochu?"), ("Display", "Obrazovka"), ("Default View Style", "Výchozí styl zobrazení"), - ("Default Scroll Style", "Výchozí styl posouvání"), + ("Default Scroll Style", "Výchozí styl rolování"), ("Default Image Quality", "Výchozí kvalita obrazu"), ("Default Codec", "Výchozí kodek"), ("Bitrate", "Datový tok"), From 443d9669b62b75790d2d6f2373ac882e20c58f9f Mon Sep 17 00:00:00 2001 From: leroyloren <57643470+leroyloren@users.noreply.github.com> Date: Thu, 17 Aug 2023 09:45:59 +0200 Subject: [PATCH 462/612] Update cs.rs --- src/lang/cs.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 51c483e65..4c36c60f2 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -343,8 +343,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Relay Connection", "Připojení předávací server"), ("Secure Connection", "Zabezpečené připojení"), ("Insecure Connection", "Nezabezpečené připojení"), - ("Scale original", "Měřítko původní"), - ("Scale adaptive", "Měřítko adaptivní"), + ("Scale original", "Originální měřítko"), + ("Scale adaptive", "Adaptivní měřítko"), ("General", "Obecné"), ("Security", "Zabezpečení"), ("Theme", "Motiv"), @@ -371,7 +371,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Unpin Toolbar", "Odepnout panel nástrojů"), ("Recording", "Nahrávání"), ("Directory", "Adresář"), - ("Automatically record incoming sessions", "Automaticky zaznamenávat příchozí relace"), + ("Automatically record incoming sessions", "Automaticky nahrávat příchozí relace"), ("Change", "Změnit"), ("Start session recording", "Spustit záznam relace"), ("Stop session recording", "Zastavit záznam relace"), @@ -492,7 +492,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("no_desktop_title_tip", "Není k dispozici žádná plocha"), ("no_desktop_text_tip", "Nainstalujte si prosím prostředí GNOME"), ("No need to elevate", "Není třeba navýšení"), - ("System Sound", "Zvuk systému"), + ("System Sound", "Systémový zvuk"), ("Default", "Výchozí"), ("New RDP", "Nové RDP"), ("Fingerprint", "Otisk"), From be4c64de71d3d65bf07cfc10fd8a1143bd3ba8d1 Mon Sep 17 00:00:00 2001 From: leroyloren <57643470+leroyloren@users.noreply.github.com> Date: Thu, 17 Aug 2023 09:49:35 +0200 Subject: [PATCH 463/612] Update cs.rs --- src/lang/cs.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 4c36c60f2..9d0ed2170 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -123,8 +123,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Scrollbar", "Posuvník"), ("ScrollAuto", "Automatické rolování"), ("Good image quality", "Dobrá kvalita obrazu"), - ("Balanced", "Vyvážené"), - ("Optimize reaction time", "Nejlepší reakční rychlost"), + ("Balanced", "Vyvážená"), + ("Optimize reaction time", "Optimalizovat reakční dobu"), ("Custom", "Vlastní"), ("Show remote cursor", "Zobrazit vzdálený kurzor"), ("Show quality monitor", "Zobrazit monitor kvality"), From 1976fd6164633467a5191aae2b4d309cbefeb0ad Mon Sep 17 00:00:00 2001 From: leroyloren <57643470+leroyloren@users.noreply.github.com> Date: Thu, 17 Aug 2023 09:56:35 +0200 Subject: [PATCH 464/612] Update cs.rs --- src/lang/cs.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 9d0ed2170..8362bc9ee 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -267,7 +267,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Pinch to Zoom", "Přiblížíte roztažením dvěma prsty"), ("Canvas Zoom", "Přiblížení zobrazení"), ("Reset canvas", "Vrátit měřtko zobrazení na výchozí"), - ("No permission of file transfer", "Žádné oprávnění přenosu souborů"), + ("No permission of file transfer", "Žádné oprávnění k přenosu souborů"), ("Note", "Poznámka"), ("Connection", "Připojení"), ("Share Screen", "Sdílet obrazovku"), From 6045b5fead5f83e7c18ecd5bf7cc677faf1212f0 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 17 Aug 2023 17:20:08 +0800 Subject: [PATCH 465/612] fix search alias doesn't match in address book Signed-off-by: 21pages --- flutter/lib/common.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 794815b86..eb21ac821 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1352,7 +1352,7 @@ Future matchPeer(String searchText, Peer peer) async { peer.username.toLowerCase().contains(searchText)) { return true; } - final alias = await bind.mainGetPeerOption(id: peer.id, key: 'alias'); + final alias = peer.alias; if (alias.isEmpty) { return false; } From 90c55c00960018695aa9256bb920080df2315651 Mon Sep 17 00:00:00 2001 From: 2mao Date: Thu, 17 Aug 2023 18:41:47 +0800 Subject: [PATCH 466/612] Update history.yml --- .github/workflows/history.yml | 301 +--------------------------------- 1 file changed, 9 insertions(+), 292 deletions(-) diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index c2c3dcf03..2b4eb939c 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -4,8 +4,7 @@ on: [workflow_dispatch] env: LLVM_VERSION: "10.0" - # Note: currently 3.0.5 does not support arm64 officially, we use latest stable version first. - FLUTTER_VERSION: "3.0.5" + FLUTTER_VERSION: "3.10.5" TAG_NAME: "tmp" # vcpkg version: 2022.05.10 # for multiarch gcc compatibility @@ -13,7 +12,7 @@ env: VERSION: "1.2.2" jobs: - build-for-windows-2022-12-05: + build-for-windows-2023-08-04: name: ${{ matrix.job.target }} (${{ matrix.job.os }}) runs-on: ${{ matrix.job.os }} strategy: @@ -22,12 +21,13 @@ jobs: job: # - { target: i686-pc-windows-msvc , os: windows-2019 } # - { target: x86_64-pc-windows-gnu , os: windows-2019 } - - { target: x86_64-pc-windows-msvc, os: windows-2019 } + - { target: x86_64-pc-windows-msvc, os: windows-2019, arch: x86_64 } + # - { target: aarch64-pc-windows-msvc, os: windows-2019, arch: aarch64 } steps: - name: Checkout source code uses: actions/checkout@v3 with: - ref: '8d1254cf14b69f545c9cefa026c5eeb0e7dd3e7c' + ref: '72c198a1e94cc1e0242fce88f92b3f3caedcd0c3' - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v1 @@ -41,17 +41,10 @@ jobs: flutter-version: ${{ env.FLUTTER_VERSION }} cache: true - - name: Replace engine with rustdesk custom flutter engine - run: | - flutter doctor -v - flutter precache --windows - Invoke-WebRequest -Uri https://github.com/Kingtous/engine/releases/download/v3.0.5-rustdesk.2/windows-x64-flutter-release.zip -OutFile windows-x64-flutter-release.zip - Expand-Archive windows-x64-flutter-release.zip -DestinationPath engine - mv -Force engine/* C:/hostedtoolcache/windows/flutter/stable-3.0.5-x64/bin/cache/artifacts/engine/windows-x64-release/ - name: Install Rust toolchain uses: actions-rs/toolchain@v1 with: - toolchain: "1.62" + toolchain: stable target: ${{ matrix.job.target }} override: true components: rustfmt @@ -61,21 +54,12 @@ jobs: with: prefix-key: ${{ matrix.job.os }} + - name: Install flutter rust bridge deps run: | - dart pub global activate ffigen --version 5.0.1 - $exists = Test-Path ~/.cargo/bin/flutter_rust_bridge_codegen.exe - Push-Location .. - git clone https://github.com/SoLongAndThanksForAllThePizza/flutter_rust_bridge --depth=1 - Push-Location flutter_rust_bridge/frb_codegen ; cargo install --path . ; Pop-Location - Pop-Location + cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid" Push-Location flutter ; flutter pub get ; Pop-Location ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart - - name: Restore from cache and install vcpkg - uses: lukka/run-vcpkg@v7 - with: - setupOnly: true - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} - name: Install vcpkg dependencies run: | @@ -83,7 +67,7 @@ jobs: shell: bash - name: Build rustdesk - run: python3 .\build.py --portable --hwcodec --flutter + run: python3 .\build.py --portable --hwcodec --flutter --feature IddDriver - name: Build self-extracted executable shell: bash @@ -101,270 +85,3 @@ jobs: tag_name: ${{ env.TAG_NAME }} files: | ./SignOutput/rustdesk-*.exe - - build-for-windows-2022-12-12: - name: ${{ matrix.job.target }} (${{ matrix.job.os }}) - runs-on: ${{ matrix.job.os }} - strategy: - fail-fast: false - matrix: - job: - # - { target: i686-pc-windows-msvc , os: windows-2019 } - # - { target: x86_64-pc-windows-gnu , os: windows-2019 } - - { target: x86_64-pc-windows-msvc, os: windows-2019 } - steps: - - name: Checkout source code - uses: actions/checkout@v3 - with: - ref: '3dd43b79ec0409fc38103bed0c7eb0bc3cd993d5' - - - name: Install LLVM and Clang - uses: KyleMayes/install-llvm-action@v1 - with: - version: ${{ env.LLVM_VERSION }} - - - name: Install flutter - uses: subosito/flutter-action@v2 - with: - channel: "stable" - flutter-version: ${{ env.FLUTTER_VERSION }} - cache: true - - - name: Replace engine with rustdesk custom flutter engine - run: | - flutter doctor -v - flutter precache --windows - Invoke-WebRequest -Uri https://github.com/Kingtous/engine/releases/download/v3.0.5-rustdesk.2/windows-x64-flutter-release.zip -OutFile windows-x64-flutter-release.zip - Expand-Archive windows-x64-flutter-release.zip -DestinationPath engine - mv -Force engine/* C:/hostedtoolcache/windows/flutter/stable-3.0.5-x64/bin/cache/artifacts/engine/windows-x64-release/ - - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: "1.62" - target: ${{ matrix.job.target }} - override: true - components: rustfmt - profile: minimal # minimal component installation (ie, no documentation) - - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: ${{ matrix.job.os }} - - - name: Install flutter rust bridge deps - run: | - dart pub global activate ffigen --version 5.0.1 - $exists = Test-Path ~/.cargo/bin/flutter_rust_bridge_codegen.exe - Push-Location .. - git clone https://github.com/SoLongAndThanksForAllThePizza/flutter_rust_bridge --depth=1 - Push-Location flutter_rust_bridge/frb_codegen ; cargo install --path . ; Pop-Location - Pop-Location - Push-Location flutter ; flutter pub get ; Pop-Location - ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart - - name: Restore from cache and install vcpkg - uses: lukka/run-vcpkg@v7 - with: - setupOnly: true - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} - - - name: Install vcpkg dependencies - run: | - $VCPKG_ROOT/vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static - shell: bash - - - name: Build rustdesk - run: python3 .\build.py --portable --hwcodec --flutter - - - name: Build self-extracted executable - shell: bash - run: | - pushd ./libs/portable - python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe - popd - mkdir -p ./SignOutput - mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-2022-12-12-${{ matrix.job.target }}.exe - - - name: Publish Release - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - ./SignOutput/rustdesk-*.exe - - build-for-windows-2022-12-19: - name: ${{ matrix.job.target }} (${{ matrix.job.os }}) - runs-on: ${{ matrix.job.os }} - strategy: - fail-fast: false - matrix: - job: - # - { target: i686-pc-windows-msvc , os: windows-2019 } - # - { target: x86_64-pc-windows-gnu , os: windows-2019 } - - { target: x86_64-pc-windows-msvc, os: windows-2019 } - steps: - - name: Checkout source code - uses: actions/checkout@v3 - with: - ref: '1054715891c4e73ad9b164acec6dadecfc599a65' - - - name: Install LLVM and Clang - uses: KyleMayes/install-llvm-action@v1 - with: - version: ${{ env.LLVM_VERSION }} - - - name: Install flutter - uses: subosito/flutter-action@v2 - with: - channel: "stable" - flutter-version: ${{ env.FLUTTER_VERSION }} - cache: true - - - name: Replace engine with rustdesk custom flutter engine - run: | - flutter doctor -v - flutter precache --windows - Invoke-WebRequest -Uri https://github.com/Kingtous/engine/releases/download/v3.0.5-rustdesk.2/windows-x64-flutter-release.zip -OutFile windows-x64-flutter-release.zip - Expand-Archive windows-x64-flutter-release.zip -DestinationPath engine - mv -Force engine/* C:/hostedtoolcache/windows/flutter/stable-3.0.5-x64/bin/cache/artifacts/engine/windows-x64-release/ - - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: "1.62" - target: ${{ matrix.job.target }} - override: true - components: rustfmt - profile: minimal # minimal component installation (ie, no documentation) - - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: ${{ matrix.job.os }} - - - name: Install flutter rust bridge deps - run: | - dart pub global activate ffigen --version 5.0.1 - $exists = Test-Path ~/.cargo/bin/flutter_rust_bridge_codegen.exe - Push-Location .. - git clone https://github.com/SoLongAndThanksForAllThePizza/flutter_rust_bridge --depth=1 - Push-Location flutter_rust_bridge/frb_codegen ; cargo install --path . ; Pop-Location - Pop-Location - Push-Location flutter ; flutter pub get ; Pop-Location - ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart - - name: Restore from cache and install vcpkg - uses: lukka/run-vcpkg@v7 - with: - setupOnly: true - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} - - - name: Install vcpkg dependencies - run: | - $VCPKG_ROOT/vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static - shell: bash - - - name: Build rustdesk - run: python3 .\build.py --portable --hwcodec --flutter - - - name: Build self-extracted executable - shell: bash - run: | - pushd ./libs/portable - python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe - popd - mkdir -p ./SignOutput - mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-2022-12-19-${{ matrix.job.target }}.exe - - - name: Publish Release - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - ./SignOutput/rustdesk-*.exe - - build-for-windows-2022-12-26: - name: ${{ matrix.job.target }} (${{ matrix.job.os }}) - runs-on: ${{ matrix.job.os }} - strategy: - fail-fast: false - matrix: - job: - # - { target: i686-pc-windows-msvc , os: windows-2019 } - # - { target: x86_64-pc-windows-gnu , os: windows-2019 } - - { target: x86_64-pc-windows-msvc, os: windows-2019 } - steps: - - name: Checkout source code - uses: actions/checkout@v3 - with: - ref: 'b241925fe093dc4da804a5aac419375f4ca7653f' - - - name: Install LLVM and Clang - uses: KyleMayes/install-llvm-action@v1 - with: - version: ${{ env.LLVM_VERSION }} - - - name: Install flutter - uses: subosito/flutter-action@v2 - with: - channel: "stable" - flutter-version: ${{ env.FLUTTER_VERSION }} - cache: true - - - name: Replace engine with rustdesk custom flutter engine - run: | - flutter doctor -v - flutter precache --windows - Invoke-WebRequest -Uri https://github.com/Kingtous/engine/releases/download/v3.0.5-rustdesk.2/windows-x64-flutter-release.zip -OutFile windows-x64-flutter-release.zip - Expand-Archive windows-x64-flutter-release.zip -DestinationPath engine - mv -Force engine/* C:/hostedtoolcache/windows/flutter/stable-3.0.5-x64/bin/cache/artifacts/engine/windows-x64-release/ - - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: "1.62" - target: ${{ matrix.job.target }} - override: true - components: rustfmt - profile: minimal # minimal component installation (ie, no documentation) - - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: ${{ matrix.job.os }} - - - name: Install flutter rust bridge deps - run: | - dart pub global activate ffigen --version 5.0.1 - $exists = Test-Path ~/.cargo/bin/flutter_rust_bridge_codegen.exe - Push-Location .. - git clone https://github.com/SoLongAndThanksForAllThePizza/flutter_rust_bridge --depth=1 - Push-Location flutter_rust_bridge/frb_codegen ; cargo install --path . ; Pop-Location - Pop-Location - Push-Location flutter ; flutter pub get ; Pop-Location - ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart - - name: Restore from cache and install vcpkg - uses: lukka/run-vcpkg@v7 - with: - setupOnly: true - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }} - - - name: Install vcpkg dependencies - run: | - $VCPKG_ROOT/vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static - shell: bash - - - name: Build rustdesk - run: python3 .\build.py --portable --hwcodec --flutter - - - name: Build self-extracted executable - shell: bash - run: | - pushd ./libs/portable - python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe - popd - mkdir -p ./SignOutput - mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-2022-12-26-${{ matrix.job.target }}.exe - - - name: Publish Release - uses: softprops/action-gh-release@v1 - with: - prerelease: true - tag_name: ${{ env.TAG_NAME }} - files: | - ./SignOutput/rustdesk-*.exe From 8651466cf2da0d5245c6b2f50de8fda187156c7b Mon Sep 17 00:00:00 2001 From: 2mao Date: Thu, 17 Aug 2023 18:49:03 +0800 Subject: [PATCH 467/612] Update history.yml --- .github/workflows/history.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index 2b4eb939c..a439ddf57 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -12,7 +12,7 @@ env: VERSION: "1.2.2" jobs: - build-for-windows-2023-08-04: + build-for-history-windows: name: ${{ matrix.job.target }} (${{ matrix.job.os }}) runs-on: ${{ matrix.job.os }} strategy: @@ -21,13 +21,13 @@ jobs: job: # - { target: i686-pc-windows-msvc , os: windows-2019 } # - { target: x86_64-pc-windows-gnu , os: windows-2019 } - - { target: x86_64-pc-windows-msvc, os: windows-2019, arch: x86_64 } + - { target: x86_64-pc-windows-msvc, os: windows-2019, arch: x86_64, date: 2023-08-04, ref: 72c198a1e94cc1e0242fce88f92b3f3caedcd0c3 } # - { target: aarch64-pc-windows-msvc, os: windows-2019, arch: aarch64 } steps: - name: Checkout source code uses: actions/checkout@v3 with: - ref: '72c198a1e94cc1e0242fce88f92b3f3caedcd0c3' + ref: ${{ matrix.job.ref }} - name: Install LLVM and Clang uses: KyleMayes/install-llvm-action@v1 @@ -76,7 +76,7 @@ jobs: python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe popd mkdir -p ./SignOutput - mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-2022-12-05-${{ matrix.job.target }}.exe + mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-${{ matrix.job.date }}-${{ matrix.job.target }}.exe - name: Publish Release uses: softprops/action-gh-release@v1 From 37d540544add04bea7d3a21f3908141f72a571ff Mon Sep 17 00:00:00 2001 From: 2mao Date: Thu, 17 Aug 2023 18:50:47 +0800 Subject: [PATCH 468/612] Update history.yml --- .github/workflows/history.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index a439ddf57..65e5ff30f 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -6,9 +6,10 @@ env: LLVM_VERSION: "10.0" FLUTTER_VERSION: "3.10.5" TAG_NAME: "tmp" + FLUTTER_RUST_BRIDGE_VERSION: "1.75.3" # vcpkg version: 2022.05.10 # for multiarch gcc compatibility - VCPKG_COMMIT_ID: "14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44" + VCPKG_COMMIT_ID: "501db0f17ef6df184fcdbfbe0f87cde2313b6ab1" VERSION: "1.2.2" jobs: From d805d74f053b6bb70e6e7a923f3da55886e6b4a8 Mon Sep 17 00:00:00 2001 From: 2mao Date: Thu, 17 Aug 2023 19:09:01 +0800 Subject: [PATCH 469/612] Update history.yml --- .github/workflows/history.yml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index 65e5ff30f..7d416870a 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -51,11 +51,6 @@ jobs: components: rustfmt profile: minimal # minimal component installation (ie, no documentation) - - uses: Swatinem/rust-cache@v2 - with: - prefix-key: ${{ matrix.job.os }} - - - name: Install flutter rust bridge deps run: | cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid" @@ -64,10 +59,12 @@ jobs: - name: Install vcpkg dependencies run: | - $VCPKG_ROOT/vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static - shell: bash - + cd C:\ + git clone https://github.com/Kingtous/rustdesk_thirdpary_lib --depth=1 + - name: Build rustdesk + env: + VCPKG_ROOT: C:\rustdesk_thirdpary_lib\vcpkg run: python3 .\build.py --portable --hwcodec --flutter --feature IddDriver - name: Build self-extracted executable From d7f0acd96d4ef7655b6227435ec358c8d65f40b5 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 17 Aug 2023 18:21:37 +0800 Subject: [PATCH 470/612] ab: unremember password in ab also unremember password in recent, and set alias also sync to recent Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_card.dart | 27 +++++++++---------- flutter/lib/common/widgets/peer_tab_page.dart | 11 +------- flutter/lib/models/ab_model.dart | 21 +++++++++++++++ 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 27b485023..31116b0dd 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -659,6 +659,7 @@ abstract class BasePeerCard extends StatelessWidget { if (newName != oldName) { if (tab == PeerTabIndex.ab) { gFFI.abModel.changeAlias(id: id, alias: newName); + await bind.mainSetPeerAlias(id: id, alias: newName); gFFI.abModel.pushAb(); } else { await bind.mainSetPeerAlias(id: id, alias: newName); @@ -713,16 +714,8 @@ abstract class BasePeerCard extends StatelessWidget { case PeerTabIndex.ab: gFFI.abModel.deletePeer(id); final future = gFFI.abModel.pushAb(); - if (shouldSyncAb() && await bind.mainPeerExists(id: peer.id)) { - Future.delayed(Duration.zero, () async { - final succ = await future; - if (succ) { - await Future.delayed(Duration(seconds: 2)); // success msg - BotToast.showText( - contentColor: Colors.lightBlue, - text: translate('synced_peer_readded_tip')); - } - }); + if (await bind.mainPeerExists(id: peer.id)) { + gFFI.abModel.reSyncToast(future); } break; case PeerTabIndex.group: @@ -748,9 +741,15 @@ abstract class BasePeerCard extends StatelessWidget { translate('Unremember Password'), style: style, ), - proc: () { - bind.mainForgetPassword(id: id); - showToast(translate('Successful')); + proc: () async { + if (tab == PeerTabIndex.ab) { + gFFI.abModel.unrememberPassword(id); + await bind.mainForgetPassword(id: id); + gFFI.abModel.pushAb(); + } else { + bind.mainForgetPassword(id: id); + showToast(translate('Successful')); + } }, padding: menuPadding, dismissOnClicked: true, @@ -1046,7 +1045,7 @@ class AddressBookPeerCard extends BasePeerCard { } menuItems.add(MenuEntryDivider()); menuItems.add(_renameAction(peer.id)); - if (await bind.mainPeerHasPassword(id: peer.id)) { + if (peer.hash.isNotEmpty) { menuItems.add(_unrememberPasswordAction(peer.id)); } if (gFFI.abModel.tags.isNotEmpty) { diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 047d95f11..1014c283c 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -345,16 +345,7 @@ class _PeerTabPageState extends State gFFI.abModel.deletePeers(peers.map((p) => p.id).toList()); final future = gFFI.abModel.pushAb(); if (hasSynced) { - Future.delayed(Duration.zero, () async { - final succ = await future; - if (succ) { - await Future.delayed( - Duration(seconds: 2)); // success msg - BotToast.showText( - contentColor: Colors.lightBlue, - text: translate('synced_peer_readded_tip')); - } - }); + gFFI.abModel.reSyncToast(future); } } break; diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index c160a139c..9660fdcfe 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -212,6 +212,14 @@ class AbModel { it.first.alias = alias; } + void unrememberPassword(String id) { + final it = peers.where((element) => element.id == id); + if (it.isEmpty) { + return; + } + it.first.hash = ''; + } + Future pushAb( {bool toastIfFail = true, bool toastIfSucc = true, @@ -507,4 +515,17 @@ class AbModel { throw err; } } + + reSyncToast(Future future) { + if (!shouldSyncAb()) return; + Future.delayed(Duration.zero, () async { + final succ = await future; + if (succ) { + await Future.delayed(Duration(seconds: 2)); // success msg + BotToast.showText( + contentColor: Colors.lightBlue, + text: translate('synced_peer_readded_tip')); + } + }); + } } From 8b6be8234d362331678359aee2c5d949412ac81a Mon Sep 17 00:00:00 2001 From: 2mao Date: Thu, 17 Aug 2023 19:20:47 +0800 Subject: [PATCH 471/612] Update history.yml --- .github/workflows/history.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index 7d416870a..08de626f6 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -14,7 +14,7 @@ env: jobs: build-for-history-windows: - name: ${{ matrix.job.target }} (${{ matrix.job.os }}) + name: ${{ matrix.job.date }}) runs-on: ${{ matrix.job.os }} strategy: fail-fast: false From d2c84c5fc2a347920e1fdea56570a001de0bb787 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 17 Aug 2023 18:28:55 +0800 Subject: [PATCH 472/612] fix splash not using onetime-password when changing peer tab Signed-off-by: 21pages --- flutter/lib/models/server_model.dart | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index e48ceef42..8f56ffbe2 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -197,17 +197,18 @@ class ServerModel with ChangeNotifier { _approveMode = approveMode; update = true; } - final oldPwdText = _serverPasswd.text; - if (_serverPasswd.text != temporaryPassword && - temporaryPassword.isNotEmpty) { - _serverPasswd.text = temporaryPassword; - } var stopped = option2bool( "stop-service", await bind.mainGetOption(key: "stop-service")); + final oldPwdText = _serverPasswd.text; if (stopped || verificationMethod == kUsePermanentPassword || _approveMode == 'click') { _serverPasswd.text = '-'; + } else { + if (_serverPasswd.text != temporaryPassword && + temporaryPassword.isNotEmpty) { + _serverPasswd.text = temporaryPassword; + } } if (oldPwdText != _serverPasswd.text) { update = true; From 7fa1bcfdfb1dda37e09e0f591aaae221c9a73c40 Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Thu, 17 Aug 2023 21:07:20 +0800 Subject: [PATCH 473/612] Update history.yml --- .github/workflows/history.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index 08de626f6..b852d1350 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -14,16 +14,13 @@ env: jobs: build-for-history-windows: - name: ${{ matrix.job.date }}) + name: ${{ matrix.job.date }} runs-on: ${{ matrix.job.os }} strategy: fail-fast: false matrix: job: - # - { target: i686-pc-windows-msvc , os: windows-2019 } - # - { target: x86_64-pc-windows-gnu , os: windows-2019 } - { target: x86_64-pc-windows-msvc, os: windows-2019, arch: x86_64, date: 2023-08-04, ref: 72c198a1e94cc1e0242fce88f92b3f3caedcd0c3 } - # - { target: aarch64-pc-windows-msvc, os: windows-2019, arch: aarch64 } steps: - name: Checkout source code uses: actions/checkout@v3 From 2279c1ce70906e82ed9040c6a113352016d469a9 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 17 Aug 2023 21:17:31 +0800 Subject: [PATCH 474/612] fix ab ui update on every time callback Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 30 +++++++++++++----------------- flutter/lib/models/peer_model.dart | 6 +++--- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index c36c14966..ba6c136ff 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -163,7 +163,7 @@ class AbModel { void addPeer(Peer peer) { final index = peers.indexWhere((e) => e.id == peer.id); if (index >= 0) { - peers[index] = merge(peer, peers[index]); + merge(peer, peers[index]); } else { peers.add(peer); } @@ -365,18 +365,14 @@ class AbModel { } } - Peer merge(Peer r, Peer p) { - return Peer( - id: p.id, - hash: r.hash.isEmpty ? p.hash : r.hash, - username: r.username.isEmpty ? p.username : r.username, - hostname: r.hostname.isEmpty ? p.hostname : r.hostname, - platform: r.platform.isEmpty ? p.platform : r.platform, - alias: p.alias.isEmpty ? r.alias : p.alias, - tags: p.tags, - forceAlwaysRelay: r.forceAlwaysRelay, - rdpPort: r.rdpPort, - rdpUsername: r.rdpUsername); + void merge(Peer r, Peer p) { + p.hash = r.hash.isEmpty ? p.hash : r.hash; + p.username = r.username.isEmpty ? p.username : r.username; + p.hostname = r.hostname.isEmpty ? p.hostname : r.hostname; + p.alias = p.alias.isEmpty ? r.alias : p.alias; + p.forceAlwaysRelay = r.forceAlwaysRelay; + p.rdpPort = r.rdpPort; + p.rdpUsername = r.rdpUsername; } Future syncFromRecent({bool push = true}) async { @@ -445,14 +441,14 @@ class AbModel { needSync = true; } } else { - if (!r.equal(peers[index])) { - uiChanged = true; - } Peer old = Peer.copy(peers[index]); - peers[index] = merge(r, peers[index]); + merge(r, peers[index]); if (!peerSyncEqual(peers[index], old)) { needSync = true; } + if (!old.equal(peers[index])) { + uiChanged = true; + } } } // Be careful with loop calls diff --git a/flutter/lib/models/peer_model.dart b/flutter/lib/models/peer_model.dart index 34afbfeaf..4d7ac3b28 100644 --- a/flutter/lib/models/peer_model.dart +++ b/flutter/lib/models/peer_model.dart @@ -7,9 +7,9 @@ import 'package:collection/collection.dart'; class Peer { final String id; String hash; - final String username; - final String hostname; - final String platform; + String username; + String hostname; + String platform; String alias; List tags; bool forceAlwaysRelay = false; From 17a6c697c7536613f8d000e419d221670d5ed1a8 Mon Sep 17 00:00:00 2001 From: "Miguel F. G" <116861809+flusheDData@users.noreply.github.com> Date: Thu, 17 Aug 2023 16:43:12 +0200 Subject: [PATCH 475/612] Update es.rs A few updates plus new terms --- src/lang/es.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lang/es.rs b/src/lang/es.rs index 8fbea74ef..aabbbfd27 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -17,7 +17,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Transfer File", "Transferir archivo"), ("Connect", "Conectar"), ("Recent Sessions", "Sesiones recientes"), - ("Address Book", "Libreta de direcciones"), + ("Address Book", "Directorio"), ("Confirmation", "Confirmación"), ("TCP Tunneling", "Túnel TCP"), ("Remove", "Quitar"), @@ -412,7 +412,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("wayland_experiment_tip", "El soporte para Wayland está en fase experimental, por favor, use X11 si necesita acceso desatendido."), ("Right click to select tabs", "Clic derecho para seleccionar pestañas"), ("Skipped", "Omitido"), - ("Add to Address Book", "Añadir a la libreta de direcciones"), + ("Add to Address Book", "Añadir al directorio"), ("Group", "Grupo"), ("Search", "Búsqueda"), ("Closed manually by web console", "Cerrado manualmente por la consola web"), @@ -472,7 +472,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("empty_recent_tip", "¡Vaya, no hay conexiones recientes!\nEs hora de planificar una nueva."), ("empty_favorite_tip", "¿Sin pares favoritos aún?\nEncontremos uno al que conectarte y ¡añádelo a tus favoritos!"), ("empty_lan_tip", "Oh no, parece que aún no has descubierto ningún par."), - ("empty_address_book_tip", "Parece que actualmente no hay pares en tu libreta de direcciones."), + ("empty_address_book_tip", "Parece que actualmente no hay pares en tu directorio."), ("eg: admin", "ej.: admin"), ("Empty Username", "Nombre de usuario vacío"), ("Empty Password", "Contraseña vacía"), @@ -531,12 +531,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Password", "Cambiar contraseña"), ("Refresh Password", "Refrescar contraseña"), ("ID", ""), - ("Grid View", "Ver en Cuadrícula"), - ("List View", "Ver en Lista"), + ("Grid View", "Vista Cuadrícula"), + ("List View", "Vista Lista"), ("Select", "Seleccionar"), ("Toggle Tags", "Alternar Etiquetas"), - ("pull_ab_failed_tip", ""), - ("push_ab_failed_tip", ""), - ("synced_peer_readded_tip", ""), + ("pull_ab_failed_tip", "No se ha podido refrescar el directorio"), + ("push_ab_failed_tip", "No se ha podido sincronizar el directorio con el servidor"), + ("synced_peer_readded_tip", "Los dispositivos presentes en sesiones recientes se sincronizarán con el directorio."), ].iter().cloned().collect(); } From be11c7127df6ce634056dabcc55e6686540ddf09 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 18 Aug 2023 12:09:52 +0800 Subject: [PATCH 476/612] flutter 3.13.0 for fixing flutter sluggish caused by combination of offstage and loading animation in ab, issue #5410 --- .github/workflows/bridge.yml | 2 +- .github/workflows/flutter-build.yml | 11 +++-- .github/workflows/history.yml | 2 +- flutter/pubspec.lock | 66 ++++++++++++++++------------- flutter/pubspec.yaml | 6 +-- 5 files changed, 49 insertions(+), 38 deletions(-) diff --git a/.github/workflows/bridge.yml b/.github/workflows/bridge.yml index 246d5ddfa..9c68130fc 100644 --- a/.github/workflows/bridge.yml +++ b/.github/workflows/bridge.yml @@ -6,7 +6,7 @@ on: workflow_call: env: - FLUTTER_VERSION: "3.10.5" + FLUTTER_VERSION: "3.13.0" FLUTTER_RUST_BRIDGE_VERSION: "1.75.3" jobs: diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 3bbadda58..094a3c359 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -13,10 +13,10 @@ on: env: CARGO_NDK_VERSION: "3.1.2" LLVM_VERSION: "15.0.6" - FLUTTER_VERSION: "3.10.5" + FLUTTER_VERSION: "3.13.0" FLUTTER_RUST_BRIDGE_VERSION: "1.75.3" # for arm64 linux - FLUTTER_ELINUX_VERSION: "3.10.5" + FLUTTER_ELINUX_VERSION: "3.13.0" FLUTTER_ELINUX_COMMIT_ID: "410b3ca42f2cd0c485edf517a1666652bab442d4" TAG_NAME: "${{ inputs.upload-tag }}" # vcpkg version: 2023.04.15 @@ -895,7 +895,8 @@ jobs: if ${{ matrix.job.enable-headless }}; then export DEFAULT_FEAT=linux_headless fi - cargo build --lib --features flutter,flutter_texture_render,${{ matrix.job.extra-build-features }},$DEFAULT_FEAT --release + export CARGO_INCREMENTAL=0 + cargo build --jobs 1 --lib --features flutter,flutter_texture_render,${{ matrix.job.extra-build-features }},$DEFAULT_FEAT --release - name: Upload Artifacts uses: actions/upload-artifact@master @@ -1007,10 +1008,11 @@ jobs: export VCPKG_ROOT=/opt/artifacts/vcpkg export ARCH=armhf export DEFAULT_FEAT="" + export CARGO_INCREMENTAL=0 if ${{ matrix.job.enable-headless }}; then export DEFAULT_FEAT=linux_headless fi - cargo build --features inline,${{ matrix.job.extra-build-features }},$DEFAULT_FEAT --release --bins + cargo build --jobs 1 --features inline,${{ matrix.job.extra-build-features }},$DEFAULT_FEAT --release --bins # package mkdir -p ./Release mv ./target/release/rustdesk ./Release/rustdesk @@ -1153,6 +1155,7 @@ jobs: sed -i "s/x64\/release/arm\/release/g" ./build.py ;; esac + export CARGO_INCREMENTAL=0 python3 ./build.py --flutter --hwcodec --skip-cargo # rpm package echo -e "start packaging fedora package" diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index 08de626f6..f1987c7c0 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -4,7 +4,7 @@ on: [workflow_dispatch] env: LLVM_VERSION: "10.0" - FLUTTER_VERSION: "3.10.5" + FLUTTER_VERSION: "3.13.0" TAG_NAME: "tmp" FLUTTER_RUST_BRIDGE_VERSION: "1.75.3" # vcpkg version: 2022.05.10 diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index c876f1d6f..cfd41ab75 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "0c80aeab9bc807ab10022cd3b2f4cf2ecdf231949dc1ddd9442406a003f19201" + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 url: "https://pub.dev" source: hosted - version: "52.0.0" + version: "64.0.0" after_layout: dependency: transitive description: @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: analyzer - sha256: cd8ee83568a77f3ae6b913a36093a1c9b1264e7cb7f834d9ddd2311dade9c1f4 + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "6.2.0" animations: dependency: transitive description: @@ -93,10 +93,10 @@ packages: dependency: transitive description: name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.1" build_cli_annotations: dependency: transitive description: @@ -117,26 +117,26 @@ packages: dependency: transitive description: name: build_daemon - sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" + sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "4.0.0" build_resolvers: dependency: transitive description: name: build_resolvers - sha256: "7c35a3a7868626257d8aee47b51c26b9dba11eaddf3431117ed2744951416aab" + sha256: "6c4dd11d05d056e76320b828a1db0fc01ccd376922526f8e9d6c796a5adbac20" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.1" build_runner: dependency: "direct dev" description: name: build_runner - sha256: b0a8a7b8a76c493e85f1b84bffa0588859a06197863dba8c9036b15581fd9727 + sha256: "10c6bcdbf9d049a0b666702cf1cee4ddfdc38f02a19d35ae392863b47519848b" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.4.6" build_runner_core: dependency: transitive description: @@ -237,10 +237,10 @@ packages: dependency: transitive description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.17.2" colorize: dependency: transitive description: @@ -293,10 +293,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" + sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" url: "https://pub.dev" source: hosted - version: "2.2.4" + version: "2.3.2" dash_chat_2: dependency: "direct main" description: @@ -557,10 +557,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c + sha256: "2118df84ef0c3ca93f96123a616ae8540879991b8b57af2f81b76a7ada49b2a4" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.0.2" flutter_localizations: dependency: "direct main" description: flutter @@ -607,18 +607,18 @@ packages: dependency: "direct dev" description: name: freezed - sha256: e819441678f1679b719008ff2ff0ef045d66eed9f9ec81166ca0d9b02a187454 + sha256: "83462cfc33dc9680533a7f3a4a6ab60aa94f287db5f4ee6511248c22833c497f" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.2" freezed_annotation: dependency: "direct main" description: name: freezed_annotation - sha256: aeac15850ef1b38ee368d4c53ba9a847e900bb2c53a4db3f6881cbb3cb684338 + sha256: c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.1" frontend_server_client: dependency: transitive description: @@ -743,10 +743,10 @@ packages: dependency: transitive description: name: intl - sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" url: "https://pub.dev" source: hosted - version: "0.18.0" + version: "0.18.1" io: dependency: transitive description: @@ -799,10 +799,10 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: @@ -1117,10 +1117,10 @@ packages: dependency: transitive description: name: source_gen - sha256: "2d79738b6bbf38a43920e2b8d189e9a3ce6cc201f4b8fc76be5e4fe377b1c38d" + sha256: fc0da689e5302edb6177fdd964efcb7f58912f43c28c2047a808f5bfff643d16 url: "https://pub.dev" source: hosted - version: "1.2.6" + version: "1.4.0" source_span: dependency: transitive description: @@ -1474,6 +1474,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -1557,5 +1565,5 @@ packages: source: hosted version: "0.2.0" sdks: - dart: ">=3.0.0-0 <4.0.0" + dart: ">=3.1.0-185.0.dev <4.0.0" flutter: ">=3.7.0-0" diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index 9ae0016b6..fc0be7018 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -102,9 +102,9 @@ dev_dependencies: icons_launcher: ^2.0.4 #flutter_test: #sdk: flutter - build_runner: ^2.1.11 - freezed: ^2.0.3 - flutter_lints: ^2.0.0 + build_runner: ^2.4.6 + freezed: ^2.4.2 + flutter_lints: ^2.0.2 ffigen: ^7.2.4 # rerun: flutter pub run flutter_launcher_icons From 24e6b54650bc8ff160ab8c242394206c105627ba Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 18 Aug 2023 12:52:50 +0800 Subject: [PATCH 477/612] don't use Offstage as widget of animated loading, reuse refresh as loading Signed-off-by: 21pages --- flutter/lib/common/widgets/address_book.dart | 27 +------- .../widgets/animated_rotation_widget.dart | 27 +++++++- .../common/widgets/loading_dot_widget.dart | 65 ------------------- flutter/lib/common/widgets/peer_tab_page.dart | 1 + flutter/lib/models/ab_model.dart | 10 +-- 5 files changed, 28 insertions(+), 102 deletions(-) delete mode 100644 flutter/lib/common/widgets/loading_dot_widget.dart diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index 3c192c166..4aa1326bf 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -10,7 +10,6 @@ import 'package:get/get.dart'; import '../../common.dart'; import 'dialog.dart'; -import 'loading_dot_widget.dart'; import 'login.dart'; final hideAbTagsPanel = false.obs; @@ -47,8 +46,7 @@ class _AddressBookState extends State { } return Column( children: [ - _buildNotEmptyLoading(), - _buildRetryProgress(), + if (gFFI.abModel.retrying.value) LinearProgressIndicator(), _buildErrorBanner( err: gFFI.abModel.pullError, retry: null, @@ -121,29 +119,6 @@ class _AddressBookState extends State { )); } - Widget _buildNotEmptyLoading() { - double size = 15; - return Obx(() => Offstage( - offstage: !(gFFI.abModel.abLoading.value && !gFFI.abModel.emtpy), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - SizedBox( - height: size, - child: Center(child: LoadingDotWidget(size: size))) - .marginSymmetric(vertical: 10) - ], - ), - )); - } - - Widget _buildRetryProgress() { - return Obx(() => Offstage( - offstage: !gFFI.abModel.retrying.value, - child: LinearProgressIndicator(), - )); - } - Widget _buildAddressBookDesktop() { return Row( children: [ diff --git a/flutter/lib/common/widgets/animated_rotation_widget.dart b/flutter/lib/common/widgets/animated_rotation_widget.dart index 525508e44..0efc71552 100644 --- a/flutter/lib/common/widgets/animated_rotation_widget.dart +++ b/flutter/lib/common/widgets/animated_rotation_widget.dart @@ -1,11 +1,17 @@ import 'package:flutter/material.dart'; +import 'package:get/get.dart'; class AnimatedRotationWidget extends StatefulWidget { final VoidCallback onPressed; final ValueChanged? onHover; final Widget child; + final RxBool? spinning; const AnimatedRotationWidget( - {super.key, required this.onPressed, required this.child, this.onHover}); + {super.key, + required this.onPressed, + required this.child, + this.spinning, + this.onHover}); @override State createState() => AnimatedRotationWidgetState(); @@ -14,14 +20,31 @@ class AnimatedRotationWidget extends StatefulWidget { class AnimatedRotationWidgetState extends State { double turns = 0.0; + @override + void initState() { + super.initState(); + widget.spinning?.listen((v) { + if (v && mounted) { + setState(() { + turns += 1; + }); + } + }); + } + @override Widget build(BuildContext context) { return AnimatedRotation( turns: turns, duration: const Duration(milliseconds: 200), + onEnd: () { + if (widget.spinning?.value == true && mounted) { + setState(() => turns += 1.0); + } + }, child: InkWell( onTap: () { - setState(() => turns += 1.0); + if (mounted) setState(() => turns += 1.0); widget.onPressed(); }, onHover: widget.onHover, diff --git a/flutter/lib/common/widgets/loading_dot_widget.dart b/flutter/lib/common/widgets/loading_dot_widget.dart deleted file mode 100644 index 6f8ca4425..000000000 --- a/flutter/lib/common/widgets/loading_dot_widget.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'dart:async'; -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; - -class LoadingDotWidget extends StatefulWidget { - final int count; - final double size; - final int duration; - LoadingDotWidget( - {Key? key, required this.size, this.count = 3, this.duration = 200}) - : super(key: key); - - @override - State createState() => _LoadingDotWidgetState(); -} - -class _LoadingDotWidgetState extends State { - int counter = 0; - Timer? timer; - - @override - void initState() { - super.initState(); - startAnimation(); - } - - @override - void dispose() { - timer?.cancel(); - super.dispose(); - } - - void startAnimation() { - timer = Timer.periodic(Duration(milliseconds: widget.duration), (timer) { - if (mounted) { - setState(() { - counter = (counter + 1) % widget.count; - }); - } - }); - } - - @override - Widget build(BuildContext context) { - getChild(int index) { - return AnimatedContainer( - duration: Duration(milliseconds: widget.duration), - width: counter == index ? widget.size : widget.size / 2, - height: counter == index ? widget.size : widget.size / 2, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Colors.grey, - ), - ).marginSymmetric(horizontal: widget.size); - } - - return Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: List.generate(widget.count, (e) => e) - .map((e) => getChild(e)) - .toList()), - ); - } -} diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 1014c283c..c05eb6243 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -219,6 +219,7 @@ class _PeerTabPageState extends State entries[gFFI.peerTabModel.currentTab].load(); } }, + spinning: gFFI.abModel.abLoading, child: RotatedBox( quarterTurns: 2, child: Tooltip( diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index ba6c136ff..d802f456c 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -59,7 +59,6 @@ class AbModel { if (!gFFI.userModel.isLogin) return; if (abLoading.value) return; if (!force && initialized) return; - DateTime startTime = DateTime.now(); if (pushError.isNotEmpty) { try { // push to retry @@ -120,14 +119,7 @@ class AbModel { } } } finally { - var ms = - (Duration(milliseconds: 300) - DateTime.now().difference(startTime)) - .inMilliseconds; - ms = ms > 0 ? ms : 0; - Future.delayed(Duration(milliseconds: ms), () { - abLoading.value = false; - }); - + abLoading.value = false; initialized = true; _syncAllFromRecent = true; _timerCounter = 0; From d30a9b545ee3fe751ce297ee2e23fa200e95af1c Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 18 Aug 2023 14:58:05 +0800 Subject: [PATCH 478/612] went back to flutter 3.10.6, because 3.13 does not work well with bridge --- .github/workflows/bridge.yml | 2 +- .github/workflows/flutter-build.yml | 4 ++-- .github/workflows/history.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/bridge.yml b/.github/workflows/bridge.yml index 9c68130fc..b9285a87a 100644 --- a/.github/workflows/bridge.yml +++ b/.github/workflows/bridge.yml @@ -6,7 +6,7 @@ on: workflow_call: env: - FLUTTER_VERSION: "3.13.0" + FLUTTER_VERSION: "3.10.6" FLUTTER_RUST_BRIDGE_VERSION: "1.75.3" jobs: diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 094a3c359..1415cc79d 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -13,10 +13,10 @@ on: env: CARGO_NDK_VERSION: "3.1.2" LLVM_VERSION: "15.0.6" - FLUTTER_VERSION: "3.13.0" + FLUTTER_VERSION: "3.10.6" FLUTTER_RUST_BRIDGE_VERSION: "1.75.3" # for arm64 linux - FLUTTER_ELINUX_VERSION: "3.13.0" + FLUTTER_ELINUX_VERSION: "3.10.6" FLUTTER_ELINUX_COMMIT_ID: "410b3ca42f2cd0c485edf517a1666652bab442d4" TAG_NAME: "${{ inputs.upload-tag }}" # vcpkg version: 2023.04.15 diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index 104216663..6e276162a 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -4,7 +4,7 @@ on: [workflow_dispatch] env: LLVM_VERSION: "10.0" - FLUTTER_VERSION: "3.13.0" + FLUTTER_VERSION: "3.10.6" TAG_NAME: "tmp" FLUTTER_RUST_BRIDGE_VERSION: "1.75.3" # vcpkg version: 2022.05.10 From a7163c6a04e794744d20ecff6ccf5a74f89edf48 Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 18 Aug 2023 15:49:15 +0800 Subject: [PATCH 479/612] when connecting with ab, if recent peer's alias is empty, set it to ab's alias Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_card.dart | 42 ++++++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 31116b0dd..71b63d975 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -27,11 +27,13 @@ final peerCardUiType = PeerUiType.grid.obs; class _PeerCard extends StatefulWidget { final Peer peer; + final PeerTabIndex tab; final Function(BuildContext, String) connect; final PopupMenuEntryBuilder popupMenuEntryBuilder; const _PeerCard( {required this.peer, + required this.tab, required this.connect, required this.popupMenuEntryBuilder, Key? key}) @@ -71,10 +73,14 @@ class _PeerCardState extends State<_PeerCard> if (peerTabModel.multiSelectionMode) { peerTabModel.select(peer); } else { - if (!isWebDesktop) connect(context, peer.id); + if (!isWebDesktop) { + connectInPeerTab(context, peer.id, widget.tab); + } } }, - onDoubleTap: isWebDesktop ? () => connect(context, peer.id) : null, + onDoubleTap: isWebDesktop + ? () => connectInPeerTab(context, peer.id, widget.tab) + : null, onLongPress: () { peerTabModel.select(peer); }, @@ -443,7 +449,9 @@ abstract class BasePeerCard extends StatelessWidget { Widget build(BuildContext context) { return _PeerCard( peer: peer, - connect: (BuildContext context, String id) => connect(context, id), + tab: tab, + connect: (BuildContext context, String id) => + connectInPeerTab(context, id, tab), popupMenuEntryBuilder: _buildPopupMenuEntry, ); } @@ -477,9 +485,10 @@ abstract class BasePeerCard extends StatelessWidget { style: style, ), proc: () { - connect( + connectInPeerTab( context, peer.id, + tab, isFileTransfer: isFileTransfer, isTcpTunneling: isTcpTunneling, isRDP: isRDP, @@ -552,7 +561,7 @@ abstract class BasePeerCard extends StatelessWidget { ], )), proc: () { - connect(context, id, isRDP: true); + connectInPeerTab(context, id, tab, isRDP: true); }, padding: menuPadding, dismissOnClicked: true, @@ -1309,3 +1318,26 @@ class TagPainter extends CustomPainter { return true; } } + +void connectInPeerTab(BuildContext context, String id, PeerTabIndex tab, + {bool isFileTransfer = false, + bool isTcpTunneling = false, + bool isRDP = false}) async { + if (tab == PeerTabIndex.ab) { + // If recent peer's alias is empty, set it to ab's alias + // Because the platform is not set, it may not take effect, but it is more important not to display if the connection is not successful + Peer? p = gFFI.abModel.find(id); + if (p != null && + p.alias.isNotEmpty && + (await bind.mainGetPeerOption(id: id, key: "alias")).isEmpty) { + await bind.mainSetPeerAlias( + id: id, + alias: p.alias, + ); + } + } + connect(context, id, + isFileTransfer: isFileTransfer, + isTcpTunneling: isTcpTunneling, + isRDP: isRDP); +} From 979203cbdb0a0c1c1800321d492a96d432f22777 Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 18 Aug 2023 16:13:24 +0800 Subject: [PATCH 480/612] replace offstage with if-else for LinearProgressIndicator in dialog Signed-off-by: 21pages --- flutter/lib/common/widgets/address_book.dart | 9 +++-- flutter/lib/common/widgets/dialog.dart | 18 ++++----- flutter/lib/common/widgets/login.dart | 23 +++++++---- flutter/lib/common/widgets/peer_tab_page.dart | 40 +++++++++---------- .../desktop/pages/desktop_setting_page.dart | 6 +-- flutter/lib/desktop/pages/install_page.dart | 13 +++--- flutter/lib/mobile/widgets/dialog.dart | 5 +-- 7 files changed, 59 insertions(+), 55 deletions(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index 4aa1326bf..86a5b2c55 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -46,6 +46,7 @@ class _AddressBookState extends State { } return Column( children: [ + // NOT use Offstage to wrap LinearProgressIndicator if (gFFI.abModel.retrying.value) LinearProgressIndicator(), _buildErrorBanner( err: gFFI.abModel.pullError, @@ -397,8 +398,8 @@ class _AddressBookState extends State { const SizedBox( height: 4.0, ), - Offstage( - offstage: !isInProgress, child: const LinearProgressIndicator()) + // NOT use Offstage to wrap LinearProgressIndicator + if (isInProgress) const LinearProgressIndicator(), ], ), actions: [ @@ -463,8 +464,8 @@ class _AddressBookState extends State { const SizedBox( height: 4.0, ), - Offstage( - offstage: !isInProgress, child: const LinearProgressIndicator()) + // NOT use Offstage to wrap LinearProgressIndicator + if (isInProgress) const LinearProgressIndicator(), ], ), actions: [ diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index 40f0901aa..ce4b68ae0 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -156,8 +156,8 @@ void changeIdDialog() { }).toList(), )).marginOnly(bottom: 8) : SizedBox.shrink(), - Offstage( - offstage: !isInProgress, child: const LinearProgressIndicator()) + // NOT use Offstage to wrap LinearProgressIndicator + if (isInProgress) const LinearProgressIndicator(), ], ), actions: [ @@ -202,8 +202,8 @@ void changeWhiteList({Function()? callback}) async { const SizedBox( height: 4.0, ), - Offstage( - offstage: !isInProgress, child: const LinearProgressIndicator()) + // NOT use Offstage to wrap LinearProgressIndicator + if (isInProgress) const LinearProgressIndicator(), ], ), actions: [ @@ -1435,8 +1435,8 @@ void editAbTagDialog( .toList(growable: false), ), ), - Offstage( - offstage: !isInProgress, child: const LinearProgressIndicator()) + // NOT use Offstage to wrap LinearProgressIndicator + if (isInProgress) const LinearProgressIndicator(), ], ), actions: [ @@ -1496,9 +1496,9 @@ void renameDialog( ), ), ), - Obx(() => Offstage( - offstage: isInProgress.isFalse, - child: const LinearProgressIndicator())), + // NOT use Offstage to wrap LinearProgressIndicator + Obx(() => + isInProgress.value ? const LinearProgressIndicator() : Offstage()) ], ), actions: [ diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index d7037e58f..7c17e9dea 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -12,7 +12,15 @@ import 'package:url_launcher/url_launcher.dart'; import '../../common.dart'; import './dialog.dart'; -const kOpSvgList = ['github', 'google', 'apple', 'okta', 'facebook', 'azure', 'auth0']; +const kOpSvgList = [ + 'github', + 'google', + 'apple', + 'okta', + 'facebook', + 'azure', + 'auth0' +]; class _IconOP extends StatelessWidget { final String op; @@ -27,7 +35,8 @@ class _IconOP extends StatelessWidget { @override Widget build(BuildContext context) { - final svgFile = kOpSvgList.contains(op.toLowerCase()) ? op.toLowerCase() : 'default'; + final svgFile = + kOpSvgList.contains(op.toLowerCase()) ? op.toLowerCase() : 'default'; return Container( margin: margin, child: icon == null @@ -345,9 +354,8 @@ class LoginWidgetUserPass extends StatelessWidget { autoFocus: false, errorText: passMsg, ), - Offstage( - offstage: !isInProgress, - child: const LinearProgressIndicator()), + // NOT use Offstage to wrap LinearProgressIndicator + if (isInProgress) const LinearProgressIndicator(), const SizedBox(height: 12.0), FittedBox( child: @@ -664,9 +672,8 @@ Future verificationCodeDialog(UserPayload? user) async { }, ), */ - Offstage( - offstage: !isInProgress, - child: const LinearProgressIndicator()), + // NOT use Offstage to wrap LinearProgressIndicator + if (isInProgress) const LinearProgressIndicator(), ], ), onCancel: close, diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index c05eb6243..b4c9b4018 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -208,28 +208,26 @@ class _PeerTabPageState extends State } Widget _createRefresh() { + if (gFFI.peerTabModel.currentTab < 3) return Offstage(); final textColor = Theme.of(context).textTheme.titleLarge?.color; - return Offstage( - offstage: gFFI.peerTabModel.currentTab < 3, // local tab can't see effect - child: Container( - padding: EdgeInsets.all(4.0), - child: AnimatedRotationWidget( - onPressed: () { - if (gFFI.peerTabModel.currentTab < entries.length) { - entries[gFFI.peerTabModel.currentTab].load(); - } - }, - spinning: gFFI.abModel.abLoading, - child: RotatedBox( - quarterTurns: 2, - child: Tooltip( - message: translate('Refresh'), - child: Icon( - Icons.refresh, - size: 18, - color: textColor, - )))), - ), + return Container( + padding: EdgeInsets.all(4.0), + child: AnimatedRotationWidget( + onPressed: () { + if (gFFI.peerTabModel.currentTab < entries.length) { + entries[gFFI.peerTabModel.currentTab].load(); + } + }, + spinning: gFFI.abModel.abLoading, + child: RotatedBox( + quarterTurns: 2, + child: Tooltip( + message: translate('Refresh'), + child: Icon( + Icons.refresh, + size: 18, + color: textColor, + )))), ); } diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index b868042a4..f158efb82 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -2065,9 +2065,9 @@ void changeSocks5Proxy() async { ), ], ), - Offstage( - offstage: !isInProgress, - child: const LinearProgressIndicator().marginOnly(top: 8)) + // NOT use Offstage to wrap LinearProgressIndicator + if (isInProgress) + const LinearProgressIndicator().marginOnly(top: 8), ], ), ), diff --git a/flutter/lib/desktop/pages/install_page.dart b/flutter/lib/desktop/pages/install_page.dart index 871030e15..44ba06263 100644 --- a/flutter/lib/desktop/pages/install_page.dart +++ b/flutter/lib/desktop/pages/install_page.dart @@ -182,8 +182,8 @@ class _InstallPageBodyState extends State<_InstallPageBody> .marginOnly(bottom: em), InkWell( hoverColor: Colors.transparent, - onTap: () => - launchUrlString('https://rustdesk.com/privacy.html'), + onTap: () => launchUrlString( + 'https://rustdesk.com/privacy.html'), child: Tooltip( message: 'https://rustdesk.com/privacy.html', child: Row(children: [ @@ -204,11 +204,10 @@ class _InstallPageBodyState extends State<_InstallPageBody> Row( children: [ Expanded( - child: Obx(() => Offstage( - offstage: !showProgress.value, - child: - LinearProgressIndicator().marginOnly(right: 10), - )), + // NOT use Offstage to wrap LinearProgressIndicator + child: Obx(() => showProgress.value + ? LinearProgressIndicator().marginOnly(right: 10) + : Offstage()), ), Obx( () => OutlinedButton.icon( diff --git a/flutter/lib/mobile/widgets/dialog.dart b/flutter/lib/mobile/widgets/dialog.dart index 8c321e785..550b37d72 100644 --- a/flutter/lib/mobile/widgets/dialog.dart +++ b/flutter/lib/mobile/widgets/dialog.dart @@ -223,9 +223,8 @@ void showServerSettingsWithValue( labelText: 'Key', ), ), - Offstage( - offstage: !isInProgress, - child: LinearProgressIndicator()) + // NOT use Offstage to wrap LinearProgressIndicator + if (isInProgress) const LinearProgressIndicator(), ])), actions: [ dialogButton('Cancel', onPressed: () { From 15839d98159e38490143bf4838adde3dd45aed25 Mon Sep 17 00:00:00 2001 From: leroyloren <57643470+leroyloren@users.noreply.github.com> Date: Fri, 18 Aug 2023 12:56:44 +0200 Subject: [PATCH 481/612] Update cs.rs --- src/lang/cs.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 8362bc9ee..66465f621 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -146,9 +146,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Set Password", "Nastavit heslo"), ("OS Password", "Heslo do operačního systému"), ("install_tip", "Kvůli řízení oprávnění v systému (UAC), RustDesk v některých případech na protistraně nefunguje správně. Abyste se UAC vyhnuli, klikněte na níže uvedené tlačítko a nainstalujte tak RustDesk do systému."), - ("Click to upgrade", "Kliknout pro aktualizaci"), - ("Click to download", "Kliknout pro stažení"), - ("Click to update", "Kliknout pro aktualizaci"), + ("Click to upgrade", "Aktualizovat"), + ("Click to download", "Stáhnout"), + ("Click to update", "Aktualizovat"), ("Configure", "Nastavit"), ("config_acc", "Aby bylo možné na dálku ovládat vaši plochu, je třeba aplikaci RustDesk udělit oprávnění pro \"Zpřístupnění pro hendikepované\"."), ("config_screen", "Aby bylo možné přistupovat k vaší ploše na dálku, je třeba aplikaci RustDesk udělit oprávnění pro \"Nahrávání obsahu obrazovky\"."), From 30b260ab21bf04a032661803b548b94182e3f031 Mon Sep 17 00:00:00 2001 From: leroyloren <57643470+leroyloren@users.noreply.github.com> Date: Fri, 18 Aug 2023 12:58:55 +0200 Subject: [PATCH 482/612] Update cs.rs --- src/lang/cs.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 8362bc9ee..a1462e789 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -356,7 +356,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Enable hardware codec", "Povolit hardwarový kodek"), ("Unlock Security Settings", "Odemknout nastavení zabezpečení"), ("Enable Audio", "Povolit zvuk"), - ("Unlock Network Settings", "Odemknutí na"), + ("Unlock Network Settings", "Odemknout nastavení sítě"), ("Server", "Server"), ("Direct IP Access", "Přímý IP přístup"), ("Proxy", "Proxy"), From ce5abfc3cd2893c474adc2e6fca989555b482237 Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 18 Aug 2023 19:45:19 +0800 Subject: [PATCH 483/612] fix missing await in pullAb Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index d802f456c..491dae33b 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -62,7 +62,7 @@ class AbModel { if (pushError.isNotEmpty) { try { // push to retry - pushAb(toastIfFail: false, toastIfSucc: false); + await pushAb(toastIfFail: false, toastIfSucc: false); } catch (_) {} } if (!quiet) { From 83061afe6ff4b73d92b8efbec3aa57644371d0e1 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sat, 19 Aug 2023 01:21:55 +0800 Subject: [PATCH 484/612] fix, linux crash, rdev, xdisplay Signed-off-by: fufesou --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 99ec6b4ea..6c49fb9ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4894,7 +4894,7 @@ dependencies = [ [[package]] name = "rdev" version = "0.5.0-2" -source = "git+https://github.com/fufesou/rdev#66c55439b0daf8836b188ddff47a497711cf164e" +source = "git+https://github.com/fufesou/rdev#ee3057bd97c91529e8b9daf2ca133a5c49f0c0eb" dependencies = [ "cocoa", "core-foundation", From 73c19803a233cc1f193fce39b2fc8d6b728fe3bc Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 19 Aug 2023 10:45:55 +0800 Subject: [PATCH 485/612] upgrade tao which may solve tray theme issue on windows --- Cargo.lock | 60 ++++++++++++++++++------------------------------------ Cargo.toml | 2 +- 2 files changed, 21 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c49fb9ca..1dc94cfda 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1197,7 +1197,7 @@ dependencies = [ "js-sys", "libc", "mach2", - "ndk 0.7.0", + "ndk", "ndk-context", "oboe", "once_cell", @@ -3764,19 +3764,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "ndk" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys 0.3.0", - "num_enum", - "thiserror", -] - [[package]] name = "ndk" version = "0.7.0" @@ -3785,7 +3772,7 @@ checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ "bitflags", "jni-sys", - "ndk-sys 0.4.1+23.1.7779620", + "ndk-sys", "num_enum", "raw-window-handle", "thiserror", @@ -3797,15 +3784,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" -[[package]] -name = "ndk-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" -dependencies = [ - "jni-sys", -] - [[package]] name = "ndk-sys" version = "0.4.1+23.1.7779620" @@ -4116,7 +4094,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0" dependencies = [ "jni 0.20.0", - "ndk 0.7.0", + "ndk", "ndk-context", "num-derive", "num-traits 0.2.15", @@ -5409,7 +5387,7 @@ dependencies = [ "jni 0.21.1", "lazy_static", "log", - "ndk 0.7.0", + "ndk", "num_cpus", "pkg-config", "quest", @@ -5915,8 +5893,8 @@ dependencies = [ [[package]] name = "tao" -version = "0.19.1" -source = "git+https://github.com/rustdesk-org/tao?branch=muda#173f128608d282dc4036f213c1c42137464ff096" +version = "0.22.2" +source = "git+https://github.com/rustdesk-org/tao?branch=dev#1e5b97258cf42a30f80f85a6aa0b1a4aece1977e" dependencies = [ "bitflags", "cairo-rs", @@ -5937,13 +5915,13 @@ dependencies = [ "gtk", "image", "instant", - "jni 0.20.0", + "jni 0.21.1", "lazy_static", "libc", "log", - "ndk 0.6.0", + "ndk", "ndk-context", - "ndk-sys 0.3.0", + "ndk-sys", "objc", "once_cell", "parking_lot", @@ -5952,16 +5930,18 @@ dependencies = [ "scopeguard", "tao-macros", "unicode-segmentation", + "url", "uuid", - "windows 0.44.0", + "windows 0.48.0", "windows-implement", "x11-dl", + "zbus", ] [[package]] name = "tao-macros" -version = "0.1.1" -source = "git+https://github.com/rustdesk-org/tao?branch=muda#173f128608d282dc4036f213c1c42137464ff096" +version = "0.1.2" +source = "git+https://github.com/rustdesk-org/tao?branch=dev#1e5b97258cf42a30f80f85a6aa0b1a4aece1977e" dependencies = [ "proc-macro2 1.0.63", "quote 1.0.27", @@ -6850,8 +6830,6 @@ version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" dependencies = [ - "windows-implement", - "windows-interface", "windows-targets 0.42.2", ] @@ -6870,14 +6848,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ + "windows-implement", + "windows-interface", "windows-targets 0.48.0", ] [[package]] name = "windows-implement" -version = "0.44.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce87ca8e3417b02dc2a8a22769306658670ec92d78f1bd420d6310a67c245c6" +checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" dependencies = [ "proc-macro2 1.0.63", "quote 1.0.27", @@ -6886,9 +6866,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.44.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853f69a591ecd4f810d29f17e902d40e349fb05b0b11fff63b08b826bfe39c7f" +checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" dependencies = [ "proc-macro2 1.0.63", "quote 1.0.27", diff --git a/Cargo.toml b/Cargo.toml index b5a5a9a50..f1e714e82 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -111,7 +111,7 @@ objc_id = "0.1" [target.'cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))'.dependencies] tray-icon = { git = "https://github.com/rustdesk-org/tray-icon" } -tao = { git = "https://github.com/rustdesk-org/tao", branch = "muda" } +tao = { git = "https://github.com/rustdesk-org/tao", branch = "dev" } image = "0.24" [target.'cfg(any(target_os = "macos", target_os = "linux"))'.dependencies] From cdb264d47b264f4ceb7f13651e05f302bb56ca3c Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 19 Aug 2023 08:20:48 +0800 Subject: [PATCH 486/612] opt ui: hover decoration of peer tab icon, add tile card checkbox margin Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_card.dart | 11 +- flutter/lib/common/widgets/peer_tab_page.dart | 248 ++++++++++++------ 2 files changed, 167 insertions(+), 92 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 71b63d975..b5f876d2e 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -222,7 +222,7 @@ class _PeerCardState extends State<_PeerCard> ], ).marginOnly(top: 2), ), - checkBoxOrActionMoreDesktop(peer), + checkBoxOrActionMoreDesktop(peer, isTile: true), ], ).paddingOnly(left: 10.0, top: 3.0), ), @@ -321,7 +321,7 @@ class _PeerCardState extends State<_PeerCard> style: Theme.of(context).textTheme.titleSmall, )), ]).paddingSymmetric(vertical: 8)), - checkBoxOrActionMoreDesktop(peer), + checkBoxOrActionMoreDesktop(peer, isTile: false), ], ).paddingSymmetric(horizontal: 12.0), ) @@ -387,7 +387,7 @@ class _PeerCardState extends State<_PeerCard> } } - Widget checkBoxOrActionMoreDesktop(Peer peer) { + Widget checkBoxOrActionMoreDesktop(Peer peer, {required bool isTile}) { final PeerTabModel peerTabModel = Provider.of(context); final selected = peerTabModel.isPeerSelected(peer.id); if (peerTabModel.multiSelectionMode) { @@ -398,14 +398,15 @@ class _PeerCardState extends State<_PeerCard> ) : Icon(Icons.check_box_outline_blank); bool last = peerTabModel.isShiftDown && peer.id == peerTabModel.lastId; + double right = isTile ? 4 : 0; if (last) { return Container( decoration: BoxDecoration( border: Border.all(color: MyTheme.accent, width: 1)), child: icon, - ); + ).marginOnly(right: right); } else { - return icon; + return icon.marginOnly(right: right); } } else { return _actionMore(peer); diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index b4c9b4018..30b67abbe 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -111,31 +111,26 @@ class _PeerTabPageState extends State child: _createPeerViewTypeSwitch(context)), Offstage( offstage: gFFI.peerTabModel.currentTab == 0, - child: PeerSortDropdown().marginOnly(left: 8), + child: PeerSortDropdown(), ), Offstage( offstage: gFFI.peerTabModel.currentTab != 3, - child: InkWell( - child: Obx(() => Container( - padding: EdgeInsets.all(4.0), - decoration: hideAbTagsPanel.value - ? null - : BoxDecoration( - color: Theme.of(context).colorScheme.background, - borderRadius: BorderRadius.circular(6)), - child: Tooltip( - message: translate('Toggle Tags'), - child: Icon( - Icons.tag_rounded, - size: 18, - )))), + child: _hoverAction( + context: context, + hoverableWhenfalse: hideAbTagsPanel, + child: Tooltip( + message: translate('Toggle Tags'), + child: Icon( + Icons.tag_rounded, + size: 18, + )), onTap: () async { await bind.mainSetLocalOption( key: "hideAbTagsPanel", value: hideAbTagsPanel.value ? "" : "Y"); hideAbTagsPanel.value = !hideAbTagsPanel.value; }, - ).marginOnly(left: 8), + ), ), ], )), @@ -211,8 +206,7 @@ class _PeerTabPageState extends State if (gFFI.peerTabModel.currentTab < 3) return Offstage(); final textColor = Theme.of(context).textTheme.titleLarge?.color; return Container( - padding: EdgeInsets.all(4.0), - child: AnimatedRotationWidget( + child: RefreshWidget( onPressed: () { if (gFFI.peerTabModel.currentTab < entries.length) { entries[gFFI.peerTabModel.currentTab].load(); @@ -234,57 +228,45 @@ class _PeerTabPageState extends State Widget _createPeerViewTypeSwitch(BuildContext context) { final textColor = Theme.of(context).textTheme.titleLarge?.color; final types = [PeerUiType.grid, PeerUiType.list]; - final hover = false.obs; - final deco = BoxDecoration( - color: Theme.of(context).colorScheme.background, - borderRadius: BorderRadius.circular(5), - ); - return Obx( - () => Container( - padding: EdgeInsets.all(4.0), - decoration: hover.value ? deco : null, - child: InkWell( - onHover: (value) => hover.value = value, - onTap: () async { - final type = types.elementAt( - peerCardUiType.value == types.elementAt(0) ? 1 : 0); - await bind.setLocalFlutterOption( - k: 'peer-card-ui-type', v: type.index.toString()); - peerCardUiType.value = type; - }, - child: Tooltip( - message: peerCardUiType.value == PeerUiType.grid - ? translate('List View') - : translate('Grid View'), - child: Icon( - peerCardUiType.value == PeerUiType.grid - ? Icons.view_list_rounded - : Icons.grid_view_rounded, - size: 18, - color: textColor, - )))), - ); + return Obx(() => _hoverAction( + context: context, + onTap: () async { + final type = types + .elementAt(peerCardUiType.value == types.elementAt(0) ? 1 : 0); + await bind.setLocalFlutterOption( + k: 'peer-card-ui-type', v: type.index.toString()); + peerCardUiType.value = type; + }, + child: Tooltip( + message: peerCardUiType.value == PeerUiType.grid + ? translate('List View') + : translate('Grid View'), + child: Icon( + peerCardUiType.value == PeerUiType.grid + ? Icons.view_list_rounded + : Icons.grid_view_rounded, + size: 18, + color: textColor, + )))); } Widget _createMultiSelection() { final textColor = Theme.of(context).textTheme.titleLarge?.color; final model = Provider.of(context); if (model.currentTabCachedPeers.isEmpty) return Offstage(); - return Container( - padding: EdgeInsets.all(4.0), - child: InkWell( - onTap: () { - model.setMultiSelectionMode(true); - }, - child: Tooltip( - message: translate('Select'), - child: Icon( - IconFont.checkbox, - size: 18, - color: textColor, - )), - ), + return _hoverAction( + context: context, + onTap: () { + model.setMultiSelectionMode(true); + }, + child: Tooltip( + message: translate('Select'), + child: Icon( + IconFont.checkbox, + size: 18, + color: textColor, + )), ); } @@ -306,7 +288,8 @@ class _PeerTabPageState extends State Widget deleteSelection() { final model = Provider.of(context); - return InkWell( + return _hoverAction( + context: context, onTap: () { onSubmit() async { final peers = model.selectedPeers; @@ -367,7 +350,8 @@ class _PeerTabPageState extends State return Offstage( offstage: model.currentTab != PeerTabIndex.recent.index, // show based on recent - child: InkWell( + child: _hoverAction( + context: context, onTap: () async { final peers = model.selectedPeers; final favs = (await bind.mainGetFav()).toList(); @@ -381,10 +365,9 @@ class _PeerTabPageState extends State showToast(translate('Successful')); }, child: Tooltip( - message: translate('Add to Favorites'), - child: Icon(model.icons[PeerTabIndex.fav.index])) - .marginOnly(left: isMobile ? 15 : 10), - ), + message: translate('Add to Favorites'), + child: Icon(model.icons[PeerTabIndex.fav.index])), + ).marginOnly(left: isMobile ? 11 : 6), ); } @@ -393,7 +376,8 @@ class _PeerTabPageState extends State return Offstage( offstage: !gFFI.userModel.isLogin || model.currentTab == PeerTabIndex.ab.index, - child: InkWell( + child: _hoverAction( + context: context, onTap: () { if (gFFI.abModel.isFull(true)) { return; @@ -409,10 +393,9 @@ class _PeerTabPageState extends State }); }, child: Tooltip( - message: translate('Add to Address Book'), - child: Icon(model.icons[PeerTabIndex.ab.index])) - .marginOnly(left: isMobile ? 15 : 10), - ), + message: translate('Add to Address Book'), + child: Icon(model.icons[PeerTabIndex.ab.index])), + ).marginOnly(left: isMobile ? 11 : 6), ); } @@ -422,7 +405,8 @@ class _PeerTabPageState extends State offstage: !gFFI.userModel.isLogin || model.currentTab != PeerTabIndex.ab.index || gFFI.abModel.tags.isEmpty, - child: InkWell( + child: _hoverAction( + context: context, onTap: () { editAbTagDialog(List.empty(), (selectedTags) async { final peers = model.selectedPeers; @@ -435,7 +419,7 @@ class _PeerTabPageState extends State }, child: Tooltip( message: translate('Edit Tag'), child: Icon(Icons.tag))) - .marginOnly(left: isMobile ? 15 : 10), + .marginOnly(left: isMobile ? 11 : 6), ); } @@ -451,26 +435,27 @@ class _PeerTabPageState extends State return Offstage( offstage: model.selectedPeers.length >= model.currentTabCachedPeers.length, - child: InkWell( + child: _hoverAction( + context: context, onTap: () { model.selectAll(); }, child: Tooltip( - message: translate('Select All'), child: Icon(Icons.select_all)) - .marginOnly(left: 10), - ), + message: translate('Select All'), child: Icon(Icons.select_all)), + ).marginOnly(left: 6), ); } Widget closeSelection() { final model = Provider.of(context); - return InkWell( + return _hoverAction( + context: context, onTap: () { model.setMultiSelectionMode(false); }, child: Tooltip(message: translate('Close'), child: Icon(Icons.clear))) - .marginOnly(left: 10); + .marginOnly(left: 6); } } @@ -488,15 +473,15 @@ class _PeerSearchBarState extends State { Widget build(BuildContext context) { return drawer ? _buildSearchBar() - : IconButton( - alignment: Alignment.centerRight, + : _hoverAction( + context: context, padding: const EdgeInsets.only(right: 2), - onPressed: () { + onTap: () { setState(() { drawer = true; }); }, - icon: Tooltip( + child: Tooltip( message: translate('Search'), child: Icon( Icons.search_rounded, @@ -514,7 +499,7 @@ class _PeerSearchBarState extends State { extentOffset: peerSearchTextController.value.text.length); }); return Container( - width: 120, + width: isMobile ? 120 : 140, decoration: BoxDecoration( color: Theme.of(context).colorScheme.background, borderRadius: BorderRadius.circular(6), @@ -638,7 +623,8 @@ class _PeerSortDropdownState extends State { } var menuPos = RelativeRect.fromLTRB(0, 0, 0, 0); - return InkWell( + return _hoverAction( + context: context, child: Tooltip( message: translate('Sort by'), child: Icon( @@ -659,3 +645,91 @@ class _PeerSortDropdownState extends State { ); } } + +class RefreshWidget extends StatefulWidget { + final VoidCallback onPressed; + final Widget child; + final RxBool? spinning; + const RefreshWidget( + {super.key, required this.onPressed, required this.child, this.spinning}); + + @override + State createState() => RefreshWidgetState(); +} + +class RefreshWidgetState extends State { + double turns = 0.0; + bool hover = false; + + @override + void initState() { + super.initState(); + widget.spinning?.listen((v) { + if (v && mounted) { + setState(() { + turns += 1; + }); + } + }); + } + + @override + Widget build(BuildContext context) { + final deco = BoxDecoration( + color: Theme.of(context).colorScheme.background, + borderRadius: BorderRadius.circular(6), + ); + return AnimatedRotation( + turns: turns, + duration: const Duration(milliseconds: 200), + onEnd: () { + if (widget.spinning?.value == true && mounted) { + setState(() => turns += 1.0); + } + }, + child: Container( + padding: EdgeInsets.all(4.0), + margin: EdgeInsets.symmetric(horizontal: 1), + decoration: hover ? deco : null, + child: InkWell( + onTap: () { + if (mounted) setState(() => turns += 1.0); + widget.onPressed(); + }, + onHover: (value) { + if (mounted) { + setState(() { + hover = value; + }); + } + }, + child: widget.child), + )); + } +} + +Widget _hoverAction( + {required BuildContext context, + required Widget child, + required Function() onTap, + GestureTapDownCallback? onTapDown, + RxBool? hoverableWhenfalse, + EdgeInsetsGeometry padding = const EdgeInsets.all(4.0)}) { + final hover = false.obs; + final deco = BoxDecoration( + color: Theme.of(context).colorScheme.background, + borderRadius: BorderRadius.circular(6), + ); + return Obx( + () => Container( + padding: padding, + margin: EdgeInsets.symmetric(horizontal: 1), + decoration: + (hover.value || hoverableWhenfalse?.value == false) ? deco : null, + child: InkWell( + onHover: (value) => hover.value = value, + onTap: onTap, + onTapDown: onTapDown, + child: child)), + ); +} From df02292338d6a0a9406b094cea4cd0f3eae62529 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 19 Aug 2023 15:17:13 +0800 Subject: [PATCH 487/612] restore online status after pullAb Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 491dae33b..03e08434f 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -93,6 +93,8 @@ class AbModel { } catch (e) {} final data = jsonDecode(json['data']); if (data != null) { + final oldOnlineIDs = + peers.where((e) => e.online).map((e) => e.id).toList(); tags.clear(); peers.clear(); if (data['tags'] is List) { @@ -106,6 +108,11 @@ class AbModel { if (isFull(false)) { peers.removeRange(licensedDevices, peers.length); } + // restore online + peers + .where((e) => oldOnlineIDs.contains(e.id)) + .map((e) => e.online = true) + .toList(); _saveCache(); // save on success } } From f68ef1492f30030a389517d5b50123231c0036dc Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Sat, 19 Aug 2023 17:41:28 +0800 Subject: [PATCH 488/612] Update flutter-build.yml --- .github/workflows/flutter-build.yml | 81 +++++++++++++++-------------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 1415cc79d..2c1e2ad49 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -617,7 +617,7 @@ jobs: build-rustdesk-lib-linux-amd64: needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] - runs-on: ${{ matrix.job.os }} + runs-on: [self-hosted] strategy: fail-fast: false matrix: @@ -648,25 +648,26 @@ jobs: } # - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, use-cross: true } steps: - - name: Maximize build space - run: | - sudo rm -rf /opt/ghc - sudo rm -rf /usr/local/lib/android - sudo rm -rf /usr/share/dotnet - sudo apt update -y - sudo apt install qemu-user-static + #- name: Maximize build space + # run: | + # sudo rm -rf /opt/ghc + # sudo rm -rf /usr/local/lib/android + # sudo rm -rf /usr/share/dotnet + # sudo apt update -y + # sudo apt install qemu-user-static -y - name: Checkout source code uses: actions/checkout@v3 - - name: Set Swap Space - uses: pierotofy/set-swap-space@master - with: - swap-size-gb: 12 + #- name: Set Swap Space + # uses: pierotofy/set-swap-space@master + # with: + # swap-size-gb: 12 - name: Free Space run: | - df + df -h + free -m - name: Install Rust toolchain uses: actions-rs/toolchain@v1 @@ -765,7 +766,7 @@ jobs: if: ${{ inputs.upload-artifact }} needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] - runs-on: ${{ matrix.job.os }} + runs-on: [self-hosted] strategy: fail-fast: false matrix: @@ -798,25 +799,26 @@ jobs: # - { arch: armv7, target: armv7-unknown-linux-gnueabihf , os: ubuntu-20.04, use-cross: true, extra-build-features: "appimage" } # - { target: arm-unknown-linux-musleabihf, os: ubuntu-20.04, use-cross: true } steps: - - name: Maximize build space - run: | - sudo rm -rf /opt/ghc - sudo rm -rf /usr/local/lib/android - sudo rm -rf /usr/share/dotnet - sudo apt update -y - sudo apt install qemu-user-static + #- name: Maximize build space + # run: | + # sudo rm -rf /opt/ghc + # sudo rm -rf /usr/local/lib/android + # sudo rm -rf /usr/share/dotnet + # sudo apt update -y + # sudo apt install qemu-user-static -y - name: Checkout source code uses: actions/checkout@v3 - - name: Set Swap Space - uses: pierotofy/set-swap-space@master - with: - swap-size-gb: 12 + #- name: Set Swap Space + # uses: pierotofy/set-swap-space@master + # with: + # swap-size-gb: 12 - name: Free Space run: | - df + df -h + free -m - name: Install Rust toolchain uses: actions-rs/toolchain@v1 @@ -908,7 +910,7 @@ jobs: if: ${{ inputs.upload-artifact }} needs: [build-vcpkg-deps-linux] name: build-rustdesk(sciter) ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] - runs-on: ${{ matrix.job.os }} + runs-on: [self-hosted] strategy: fail-fast: false matrix: @@ -927,25 +929,26 @@ jobs: # - { target: arm-unknown-linux-musleabihf, os: ubuntu-20.04, use-cross: true } steps: - - name: Maximize build space - run: | - sudo rm -rf /opt/ghc - sudo rm -rf /usr/local/lib/android - sudo rm -rf /usr/share/dotnet - sudo apt update -y - sudo apt install qemu-user-static + #- name: Maximize build space + # run: | + # sudo rm -rf /opt/ghc + # sudo rm -rf /usr/local/lib/android + # sudo rm -rf /usr/share/dotnet + # sudo apt update -y + # sudo apt install qemu-user-static -y - name: Checkout source code uses: actions/checkout@v3 - - name: Set Swap Space - uses: pierotofy/set-swap-space@master - with: - swap-size-gb: 12 + #- name: Set Swap Space + # uses: pierotofy/set-swap-space@master + # with: + # swap-size-gb: 12 - name: Free Space run: | - df + df -h + free -m - name: Install Rust toolchain uses: actions-rs/toolchain@v1 From 9cba0a0b89930e7c131c78fe46b56f93da4a1819 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 19 Aug 2023 18:12:03 +0800 Subject: [PATCH 489/612] fix refresh icon stops after switching tab Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_tab_page.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 30b67abbe..259a59300 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -203,9 +203,9 @@ class _PeerTabPageState extends State } Widget _createRefresh() { - if (gFFI.peerTabModel.currentTab < 3) return Offstage(); final textColor = Theme.of(context).textTheme.titleLarge?.color; - return Container( + return Offstage( + offstage: gFFI.peerTabModel.currentTab != PeerTabIndex.ab.index, child: RefreshWidget( onPressed: () { if (gFFI.peerTabModel.currentTab < entries.length) { From 8ce51cbf53e301f9574cfefc91e9b412d457143d Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 19 Aug 2023 19:38:32 +0800 Subject: [PATCH 490/612] revert amd64 backto github runner --- .github/workflows/flutter-build.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 2c1e2ad49..588c5457d 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -617,7 +617,7 @@ jobs: build-rustdesk-lib-linux-amd64: needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] - runs-on: [self-hosted] + runs-on: ${{ matrix.job.os }} strategy: fail-fast: false matrix: @@ -648,21 +648,21 @@ jobs: } # - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, use-cross: true } steps: - #- name: Maximize build space - # run: | - # sudo rm -rf /opt/ghc - # sudo rm -rf /usr/local/lib/android - # sudo rm -rf /usr/share/dotnet - # sudo apt update -y - # sudo apt install qemu-user-static -y + - name: Maximize build space + run: | + sudo rm -rf /opt/ghc + sudo rm -rf /usr/local/lib/android + sudo rm -rf /usr/share/dotnet + sudo apt update -y + sudo apt install qemu-user-static -y - name: Checkout source code uses: actions/checkout@v3 - #- name: Set Swap Space - # uses: pierotofy/set-swap-space@master - # with: - # swap-size-gb: 12 + - name: Set Swap Space + uses: pierotofy/set-swap-space@master + with: + swap-size-gb: 12 - name: Free Space run: | From e1ae3601c42264ad77e7f753af258bb4f48b057c Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 19 Aug 2023 20:44:54 +0800 Subject: [PATCH 491/612] encrypt return emtpy if exceed max len to avoid another encrypt Signed-off-by: 21pages --- libs/hbb_common/src/password_security.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libs/hbb_common/src/password_security.rs b/libs/hbb_common/src/password_security.rs index 28b32e68e..64dce1fdc 100644 --- a/libs/hbb_common/src/password_security.rs +++ b/libs/hbb_common/src/password_security.rs @@ -89,6 +89,9 @@ pub fn encrypt_str_or_original(s: &str, version: &str, max_len: usize) -> String log::error!("Duplicate encryption!"); return s.to_owned(); } + if s.bytes().len() > max_len { + return String::default(); + } if version == "00" { if let Ok(s) = encrypt(s.as_bytes(), max_len) { return version.to_owned() + &s; @@ -122,6 +125,9 @@ pub fn encrypt_vec_or_original(v: &[u8], version: &str, max_len: usize) -> Vec max_len { + return vec![]; + } if version == "00" { if let Ok(s) = encrypt(v, max_len) { let mut version = version.to_owned().into_bytes(); From 3cc6ba005ad7bb1676d675fbe68ad83c63d53a79 Mon Sep 17 00:00:00 2001 From: NicKoehler <53040044+NicKoehler@users.noreply.github.com> Date: Sat, 19 Aug 2023 19:39:58 +0000 Subject: [PATCH 492/612] Update it.rs --- src/lang/it.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index f3ec2d941..4febb9e00 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -537,6 +537,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Toggle Tags", "Attiva/disattiva tag"), ("pull_ab_failed_tip", "Impossibile aggiornare la rubrica"), ("push_ab_failed_tip", "Impossibile sincronizzare la rubrica con il server"), - ("synced_peer_readded_tip", ""), + ("synced_peer_readded_tip", "I dispositivi presenti nelle sessioni recenti saranno sincronizzati di nuovo nella rubrica."), ].iter().cloned().collect(); } From ee8510cec7fdedf9ae2b7370fc4db070d87c5a88 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 20 Aug 2023 11:24:34 +0800 Subject: [PATCH 493/612] peer_to_map function serde password Signed-off-by: 21pages --- src/flutter_ffi.rs | 2 +- src/ui_interface.rs | 16 +++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index f076b4b23..50f1e33dc 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -895,7 +895,7 @@ pub fn main_load_recent_peers_for_ab(filter: String) -> String { if !config::APP_DIR.read().unwrap().is_empty() { let peers: Vec> = PeerConfig::peers(id_filters) .drain(..) - .map(|(id, _, p)| peer_to_map_ab(id, p)) + .map(|(id, _, p)| peer_to_map(id, p)) .collect(); return serde_json::ser::to_string(&peers).unwrap_or("".to_owned()); } diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 1589a4e2b..7e1b3a9bb 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -625,6 +625,7 @@ pub fn discover() { #[cfg(feature = "flutter")] pub fn peer_to_map(id: String, p: PeerConfig) -> HashMap<&'static str, String> { + use hbb_common::sodiumoxide::base64; HashMap::<&str, String>::from_iter([ ("id", id), ("username", p.info.username.clone()), @@ -634,20 +635,13 @@ pub fn peer_to_map(id: String, p: PeerConfig) -> HashMap<&'static str, String> { "alias", p.options.get("alias").unwrap_or(&"".to_owned()).to_owned(), ), + ( + "hash", + base64::encode(p.password, base64::Variant::Original), + ), ]) } -#[cfg(feature = "flutter")] -pub fn peer_to_map_ab(id: String, p: PeerConfig) -> HashMap<&'static str, String> { - use hbb_common::sodiumoxide::base64; - let mut m = peer_to_map(id, p.clone()); - m.insert( - "hash", - base64::encode(p.password, base64::Variant::Original), - ); - m -} - #[cfg(feature = "flutter")] pub fn peer_exists(id: &str) -> bool { PeerConfig::exists(id) From 7ec462737b178a0671842be4d23a712682f43333 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 20 Aug 2023 15:49:00 +0800 Subject: [PATCH 494/612] save ab password to recent PeerConfig when connected with it Signed-off-by: 21pages --- src/client.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/client.rs b/src/client.rs index 84f338c63..7b4d052aa 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1074,6 +1074,7 @@ pub struct LoginConfigHandler { pub direct: Option, pub received: bool, switch_uuid: Option, + pub save_ab_password_to_recent: bool, } impl Deref for LoginConfigHandler { @@ -1647,7 +1648,10 @@ impl LoginConfigHandler { log::debug!("remember password of {}", self.id); } } else { - if !password0.is_empty() { + if self.save_ab_password_to_recent { + config.password = password; + log::debug!("save ab password of {} to recent", self.id); + } else if !password0.is_empty() { config.password = Default::default(); log::debug!("remove password of {}", self.id); } @@ -2173,6 +2177,7 @@ pub fn handle_login_error( err: &str, interface: &impl Interface, ) -> bool { + lc.write().unwrap().save_ab_password_to_recent = false; if err == LOGIN_MSG_PASSWORD_EMPTY { lc.write().unwrap().password = Default::default(); interface.msgbox("input-password", "Password Required", "", ""); @@ -2252,7 +2257,11 @@ pub async fn handle_hash( .find_map(|p| if p.id == id { Some(p) } else { None }) { if let Ok(hash) = base64::decode(p.hash.clone(), base64::Variant::Original) { - password = hash; + if !hash.is_empty() { + password = hash; + lc.write().unwrap().save_ab_password_to_recent = true; + lc.write().unwrap().password = password.clone(); + } } } } From c3abd3e2b3f2f7c7e5f366c20306724cb7c844d7 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 20 Aug 2023 17:14:52 +0800 Subject: [PATCH 495/612] save user info when refreshCurrentUser Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_tab_page.dart | 3 +-- flutter/lib/models/user_model.dart | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 259a59300..120ea7ff1 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -722,7 +722,6 @@ Widget _hoverAction( ); return Obx( () => Container( - padding: padding, margin: EdgeInsets.symmetric(horizontal: 1), decoration: (hover.value || hoverableWhenfalse?.value == false) ? deco : null, @@ -730,6 +729,6 @@ Widget _hoverAction( onHover: (value) => hover.value = value, onTap: onTap, onTapDown: onTapDown, - child: child)), + child: Container(padding: padding, child: child))), ); } diff --git a/flutter/lib/models/user_model.dart b/flutter/lib/models/user_model.dart index 2d8e5c61a..559e8be36 100644 --- a/flutter/lib/models/user_model.dart +++ b/flutter/lib/models/user_model.dart @@ -95,6 +95,7 @@ class UserModel { _parseAndUpdateUser(UserPayload user) { userName.value = user.name; isAdmin.value = user.isAdmin; + bind.mainSetLocalOption(key: 'user_info', value: jsonEncode(user)); } // update ab and group status From cff872dd07b06fce9a53164218da66de6899657a Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 20 Aug 2023 21:44:13 +0800 Subject: [PATCH 496/612] arm runner --- .github/workflows/flutter-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 588c5457d..b0382b38b 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -766,7 +766,7 @@ jobs: if: ${{ inputs.upload-artifact }} needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] - runs-on: [self-hosted] + runs-on: [self-hosted, Linux, X64] strategy: fail-fast: false matrix: @@ -910,7 +910,7 @@ jobs: if: ${{ inputs.upload-artifact }} needs: [build-vcpkg-deps-linux] name: build-rustdesk(sciter) ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] - runs-on: [self-hosted] + runs-on: [self-hosted, Linux, ARM64] strategy: fail-fast: false matrix: From 71f136be206153c5df43946673b54dbca338fc5b Mon Sep 17 00:00:00 2001 From: jimmyGALLAND <64364019+jimmyGALLAND@users.noreply.github.com> Date: Sun, 20 Aug 2023 18:41:53 +0200 Subject: [PATCH 497/612] Update fr.rs --- src/lang/fr.rs | 80 +++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 18e1b1ffb..16e0585ee 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -233,7 +233,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Username missed", "Nom d'utilisateur manquant"), ("Password missed", "Mot de passe manquant"), ("Wrong credentials", "Identifiant ou mot de passe erroné"), - ("The verification code is incorrect or has expired", ""), + ("The verification code is incorrect or has expired", "Le code de vérification est incorrect ou a expiré"), ("Edit Tag", "Modifier la balise"), ("Unremember Password", "Oublier le Mot de passe"), ("Favorites", "Favoris"), @@ -303,7 +303,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Unsupported", "Non pris en charge"), ("Peer denied", "Machine distante refusée"), ("Please install plugins", "Veuillez installer les plugins"), - ("Peer exit", ""), + ("Peer exit", "Machine distante déconnectée"), ("Failed to turn off", "Échec de la désactivation"), ("Turned off", "Désactivé"), ("In privacy mode", "en mode privé"), @@ -337,8 +337,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Ratio", "Rapport"), ("Image Quality", "Qualité d'image"), ("Scroll Style", "Style de défilement"), - ("Show Toolbar", ""), - ("Hide Toolbar", ""), + ("Show Toolbar", "Afficher la barre d'outils"), + ("Hide Toolbar", "Masquer la barre d'outils"), ("Direct Connection", "Connexion directe"), ("Relay Connection", "Connexion relais"), ("Secure Connection", "Connexion sécurisée"), @@ -367,8 +367,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Use IP Whitelisting", "Utiliser une liste blanche d'IP"), ("Network", "Réseau"), ("Enable RDP", "Activer connection RDP"), - ("Pin Toolbar", ""), - ("Unpin Toolbar", ""), + ("Pin Toolbar", "Épingler la barre d'outil"), + ("Unpin Toolbar", "Détacher la barre d'outil"), ("Recording", "Enregistrement"), ("Directory", "Répertoire"), ("Automatically record incoming sessions", "Enregistrement automatique des sessions entrantes"), @@ -460,8 +460,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Résolution"), ("No transfers in progress", "Pas de transfert en cours"), ("Set one-time password length", "Définir la longueur du mot de passe à usage unique"), - ("install_cert_tip", ""), - ("confirm_install_cert_tip", ""), + ("install_cert_tip", "Installer le certificat RustDesk"), + ("confirm_install_cert_tip", "Il s'agit d'un certificat RustDesk, auquel on peut faire confiance. Le certificat sera utilisé pour approuver et installer les pilotes RustDesk si nécessaire."), ("RDP Settings", "Configuration RDP"), ("Sort by", "Trier par"), ("New Connection", "Nouvelle connexion"), @@ -506,37 +506,37 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Enable", "Activé"), ("Disable", "Desactivé"), ("Options", "Options"), - ("resolution_original_tip", ""), - ("resolution_fit_local_tip", ""), - ("resolution_custom_tip", ""), - ("Collapse toolbar", ""), - ("Accept and Elevate", ""), - ("accept_and_elevate_btn_tooltip", ""), - ("clipboard_wait_response_timeout_tip", ""), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), - ("logout_tip", ""), - ("Service", ""), - ("Start", ""), - ("Stop", ""), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), - ("Open connection in new tab", ""), - ("Move tab to new window", ""), - ("Can not be empty", ""), - ("Already exists", ""), - ("Change Password", ""), - ("Refresh Password", ""), - ("ID", ""), - ("Grid View", ""), - ("List View", ""), - ("Select", ""), - ("Toggle Tags", ""), - ("pull_ab_failed_tip", ""), - ("push_ab_failed_tip", ""), - ("synced_peer_readded_tip", ""), + ("resolution_original_tip", "Résolution d'origine"), + ("resolution_fit_local_tip", "Adapter la résolution local"), + ("resolution_custom_tip", "Résolution personnalisée"), + ("Collapse toolbar", "Réduire la barre d'outils"), + ("Accept and Elevate", "Accepter et autoriser l'augmentation des privilèges"), + ("accept_and_elevate_btn_tooltip", "Accepter la connexion l'augmentation des privilèges UAC."), + ("clipboard_wait_response_timeout_tip", "Expiration du délai d'attente presse-papiers."), + ("Incoming connection", "Connexion entrante"), + ("Outgoing connection", "Connexion sortante"), + ("Exit", "Quitter"), + ("Open", "Ouvrir"), + ("logout_tip", "Êtes-vous sûr de vouloir vous déconnecter?"), + ("Service", "Service"), + ("Start", "Lancer"), + ("Stop", "Stopper"), + ("exceed_max_devices", "Vous avez atteint le nombre maximal d'appareils gérés."), + ("Sync with recent sessions", "Synchroniser avec les sessions récentes"), + ("Sort tags", "Trier les Tags"), + ("Open connection in new tab", "Ouvrir la connexion dans un nouvel onglet"), + ("Move tab to new window", "Déplacer l'onglet vers une nouvelle fenêtre"), + ("Can not be empty", "Ne peux pas être vide"), + ("Already exists", "Existe déjà"), + ("Change Password", "Changer le mot de passe"), + ("Refresh Password", "Actualiser le mot de passe"), + ("ID", "ID"), + ("Grid View", "Vue Grille"), + ("List View", "Vue Liste"), + ("Select", "Sélectionner"), + ("Toggle Tags", "Basculer vers les Tags"), + ("pull_ab_failed_tip", "Impossible d'actualiser le carnet d'adresses"), + ("push_ab_failed_tip", "Échec de la synchronisation du carnet d'adresses"), + ("synced_peer_readded_tip", "Les appareils qui étaient présents dans les sessions récentes seront synchronisés avec le carnet d'adresses."), ].iter().cloned().collect(); } From b5411b686dbf801adbd68542a47d7562b374ccc6 Mon Sep 17 00:00:00 2001 From: 21pages Date: Mon, 21 Aug 2023 08:39:47 +0800 Subject: [PATCH 498/612] recent/ab password keep same: sync connected password to addressbook anyway, delete recent password also delete ab password Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_card.dart | 13 ++++++------- flutter/lib/models/ab_model.dart | 12 ++++++++---- flutter/lib/models/model.dart | 11 +++++++++++ src/client.rs | 18 +++++++++++++++--- 4 files changed, 40 insertions(+), 14 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index b5f876d2e..889ba3fbe 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -752,14 +752,13 @@ abstract class BasePeerCard extends StatelessWidget { style: style, ), proc: () async { - if (tab == PeerTabIndex.ab) { - gFFI.abModel.unrememberPassword(id); - await bind.mainForgetPassword(id: id); - gFFI.abModel.pushAb(); - } else { - bind.mainForgetPassword(id: id); - showToast(translate('Successful')); + bool result = gFFI.abModel.changePassword(id, ''); + await bind.mainForgetPassword(id: id); + if (result) { + bool toast = tab == PeerTabIndex.ab; + gFFI.abModel.pushAb(toastIfFail: toast, toastIfSucc: toast); } + showToast(translate('Successful')); }, padding: menuPadding, dismissOnClicked: true, diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index 03e08434f..f5e217472 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -211,12 +211,15 @@ class AbModel { it.first.alias = alias; } - void unrememberPassword(String id) { + bool changePassword(String id, String hash) { final it = peers.where((element) => element.id == id); - if (it.isEmpty) { - return; + if (it.isNotEmpty) { + if (it.first.hash != hash) { + it.first.hash = hash; + return true; + } } - it.first.hash = ''; + return false; } Future pushAb( @@ -225,6 +228,7 @@ class AbModel { bool isRetry = false}) async { debugPrint( "pushAb: toastIfFail:$toastIfFail, toastIfSucc:$toastIfSucc, isRetry:$isRetry"); + if (!gFFI.userModel.isLogin) return false; pushError.value = ''; if (isRetry) retrying.value = true; DateTime startTime = DateTime.now(); diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 4dc17f9c2..6f68524f4 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -241,6 +241,17 @@ class FfiModel with ChangeNotifier { handleReloading(evt); } else if (name == 'plugin_option') { handleOption(evt); + } else if (name == "sync_peer_password_to_ab") { + if (desktopType == DesktopType.main) { + final id = evt['id']; + final password = evt['password']; + if (id != null && password != null) { + if (gFFI.abModel + .changePassword(id.toString(), password.toString())) { + gFFI.abModel.pushAb(toastIfFail: false, toastIfSucc: false); + } + } + } } else { debugPrint('Unknown event name: $name'); } diff --git a/src/client.rs b/src/client.rs index 7b4d052aa..3ac6e8bb6 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1074,7 +1074,7 @@ pub struct LoginConfigHandler { pub direct: Option, pub received: bool, switch_uuid: Option, - pub save_ab_password_to_recent: bool, + pub save_ab_password_to_recent: bool, // true: connected with ab password } impl Deref for LoginConfigHandler { @@ -1656,6 +1656,18 @@ impl LoginConfigHandler { log::debug!("remove password of {}", self.id); } } + #[cfg(feature = "flutter")] + { + // sync ab password with PeerConfig password + let password = base64::encode(config.password.clone(), base64::Variant::Original); + let evt: HashMap<&str, String> = HashMap::from([ + ("name", "sync_peer_password_to_ab".to_string()), + ("id", self.id.clone()), + ("password", password), + ]); + let evt = serde_json::ser::to_string(&evt).unwrap_or("".to_owned()); + crate::flutter::push_global_event(crate::flutter::APP_TYPE_MAIN, evt); + } if config.keyboard_mode.is_empty() { if is_keyboard_mode_supported(&KeyboardMode::Map, get_version_number(&pi.version)) { config.keyboard_mode = KeyboardMode::Map.to_string(); @@ -2260,12 +2272,12 @@ pub async fn handle_hash( if !hash.is_empty() { password = hash; lc.write().unwrap().save_ab_password_to_recent = true; - lc.write().unwrap().password = password.clone(); } } } } } + lc.write().unwrap().password = password.clone(); let password = if password.is_empty() { // login without password, the remote side can click accept interface.msgbox("input-password", "Password Required", "", ""); @@ -2337,9 +2349,9 @@ pub async fn handle_login_from_ui( hasher.update(&lc.read().unwrap().hash.salt); let res = hasher.finalize(); lc.write().unwrap().remember = remember; - lc.write().unwrap().password = res[..].into(); res[..].into() }; + lc.write().unwrap().password = hash_password.clone(); let mut hasher2 = Sha256::new(); hasher2.update(&hash_password[..]); hasher2.update(&lc.read().unwrap().hash.challenge); From f8a6423bf4fcbb820694d5a81bea8a9604395703 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 21 Aug 2023 11:14:33 +0800 Subject: [PATCH 499/612] interesting, armv6 build very well on oracle arm64 --- .github/workflows/flutter-build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index b0382b38b..3ccf4988a 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -766,7 +766,7 @@ jobs: if: ${{ inputs.upload-artifact }} needs: [generate-bridge-linux, build-vcpkg-deps-linux] name: build-rust-lib ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-features }}] - runs-on: [self-hosted, Linux, X64] + runs-on: [self-hosted, Linux, ARM64] strategy: fail-fast: false matrix: @@ -898,7 +898,7 @@ jobs: export DEFAULT_FEAT=linux_headless fi export CARGO_INCREMENTAL=0 - cargo build --jobs 1 --lib --features flutter,flutter_texture_render,${{ matrix.job.extra-build-features }},$DEFAULT_FEAT --release + cargo build --lib --features flutter,flutter_texture_render,${{ matrix.job.extra-build-features }},$DEFAULT_FEAT --release - name: Upload Artifacts uses: actions/upload-artifact@master @@ -1015,7 +1015,7 @@ jobs: if ${{ matrix.job.enable-headless }}; then export DEFAULT_FEAT=linux_headless fi - cargo build --jobs 1 --features inline,${{ matrix.job.extra-build-features }},$DEFAULT_FEAT --release --bins + cargo build --features inline,${{ matrix.job.extra-build-features }},$DEFAULT_FEAT --release --bins # package mkdir -p ./Release mv ./target/release/rustdesk ./Release/rustdesk From e03399749a39f92a1c6f300fe66297aa8e23e273 Mon Sep 17 00:00:00 2001 From: Ibnul Mutaki Date: Mon, 21 Aug 2023 16:10:55 +0700 Subject: [PATCH 500/612] add and fixing some translate Indonesia --- src/lang/id.rs | 478 ++++++++++++++++++++++++------------------------- 1 file changed, 239 insertions(+), 239 deletions(-) diff --git a/src/lang/id.rs b/src/lang/id.rs index 4692b280b..45cb3f1c8 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -4,7 +4,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Status", "Status"), ("Your Desktop", "Desktop Anda"), ("desk_tip", "Desktop Anda dapat diakses dengan ID dan kata sandi ini."), - ("Password", "Password"), + ("Password", "Kata sandi"), ("Ready", "Siap"), ("Established", "Didirikan"), ("connecting_status", "Menghubungkan ke jaringan RustDesk..."), @@ -15,48 +15,48 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("not_ready_status", "Belum siap. Silakan periksa koneksi Anda"), ("Control Remote Desktop", "Kontrol Remote Desktop"), ("Transfer File", "File Transfer"), - ("Connect", "Terhubung"), + ("Connect", "Hubungkan"), ("Recent Sessions", "Sesi Terkini"), ("Address Book", "Buku Alamat"), ("Confirmation", "Konfirmasi"), ("TCP Tunneling", "TCP Tunneling"), ("Remove", "Hapus"), - ("Refresh random password", "Segarkan kata sandi acak"), - ("Set your own password", "Tetapkan kata sandi Anda sendiri"), + ("Refresh random password", "Perbarui kata sandi acak"), + ("Set your own password", "Tetapkan kata sandi Anda"), ("Enable Keyboard/Mouse", "Aktifkan Keyboard/Mouse"), ("Enable Clipboard", "Aktifkan Papan Klip"), ("Enable File Transfer", "Aktifkan Transfer File"), ("Enable TCP Tunneling", "Aktifkan TCP Tunneling"), - ("IP Whitelisting", "Daftar Putih IP"), + ("IP Whitelisting", "Daftar IP yang diizinkan"), ("ID/Relay Server", "ID/Relay Server"), ("Import Server Config", "Impor Konfigurasi Server"), - ("Export Server Config", "Ekspor Konfigutasi Server"), + ("Export Server Config", "Ekspor Konfigurasi Server"), ("Import server configuration successfully", "Impor konfigurasi server berhasil"), ("Export server configuration successfully", "Ekspor konfigurasi server berhasil"), ("Invalid server configuration", "Konfigurasi server tidak valid"), ("Clipboard is empty", "Papan klip kosong"), ("Stop service", "Hentikan Layanan"), ("Change ID", "Ubah ID"), - ("Your new ID", ""), - ("length %min% to %max%", ""), - ("starts with a letter", ""), - ("allowed characters", ""), + ("Your new ID", "ID baru anda"), + ("length %min% to %max%", "panjang %min% s/d %max%"), + ("starts with a letter", "Dimulai dengan huruf"), + ("allowed characters", "Karakter yang dapat digunakan"), ("id_change_tip", "Hanya karakter a-z, A-Z, 0-9 dan _ (underscore) yang diperbolehkan. Huruf pertama harus a-z, A-Z. Panjang antara 6 dan 16."), - ("Website", "Website"), + ("Website", "Situs Web"), ("About", "Tentang"), - ("Slogan_tip", ""), + ("Slogan_tip", "Dibuat dengan penuh kasih sayang dalam dunia yang penuh kekacauan ini"), ("Privacy Statement", "Pernyataan Privasi"), ("Mute", "Bisukan"), ("Build Date", ""), - ("Version", ""), + ("Version", "Versi"), ("Home", ""), - ("Audio Input", "Masukkan Audio"), + ("Audio Input", "Input Audio"), ("Enhancements", "Peningkatan"), ("Hardware Codec", "Codec Perangkat Keras"), ("Adaptive bitrate", "Kecepatan Bitrate Adaptif"), ("ID Server", "Server ID"), ("Relay Server", "Server Relay"), - ("API Server", "API Server"), + ("API Server", "Server API"), ("invalid_http", "harus dimulai dengan http:// atau https://"), ("Invalid IP", "IP tidak valid"), ("Invalid format", "Format tidak valid"), @@ -66,16 +66,16 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Cancel", "Batal"), ("Skip", "Lanjutkan"), ("Close", "Tutup"), - ("Retry", "Ulangi"), + ("Retry", "Coba lagi"), ("OK", "Oke"), ("Password Required", "Kata sandi dibutuhkan"), ("Please enter your password", "Silahkan masukkan kata sandi anda"), - ("Remember password", "Ingat Password"), + ("Remember password", "Ingat kata sandi"), ("Wrong Password", "Kata sandi Salah"), ("Do you want to enter again?", "Apakah anda ingin masuk lagi?"), ("Connection Error", "Kesalahan koneksi"), ("Error", "Kesalahan"), - ("Reset by the peer", "Setel ulang oleh rekan"), + ("Reset by the peer", "Direset oleh rekan"), ("Connecting...", "Menghubungkan..."), ("Connection in progress. Please wait.", "Koneksi sedang berlangsung. Mohon tunggu."), ("Please try 1 minute later", "Silahkan coba 1 menit lagi"), @@ -114,19 +114,19 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Speed", "Kecepatan"), ("Custom Image Quality", "Sesuaikan Kualitas Gambar"), ("Privacy mode", "Mode Privasi"), - ("Block user input", "Blokir masukan pengguna"), - ("Unblock user input", "Jangan blokir masukan pengguna"), + ("Block user input", "Blokir input pengguna"), + ("Unblock user input", "Jangan blokir input pengguna"), ("Adjust Window", "Sesuaikan Jendela"), ("Original", "Asli"), ("Shrink", "Susutkan"), ("Stretch", "Regangkan"), - ("Scrollbar", "Scroll bar"), - ("ScrollAuto", "Gulir Otomatis"), + ("Scrollbar", "Scrollbar"), + ("ScrollAuto", "Scroll Otomatis"), ("Good image quality", "Kualitas Gambar Baik"), ("Balanced", "Seimbang"), ("Optimize reaction time", "Optimalkan waktu reaksi"), ("Custom", "Kustom"), - ("Show remote cursor", "Tampilkan remote kursor"), + ("Show remote cursor", "Tampilkan kursor remote"), ("Show quality monitor", "Tampilkan kualitas monitor"), ("Disable clipboard", "Matikan papan klip"), ("Lock after session end", "Kunci setelah sesi berakhir"), @@ -143,30 +143,30 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Failed to connect via rendezvous server", "Gagal terkoneksi via rendezvous server"), ("Failed to connect via relay server", "Gagal terkoneksi via relay server"), ("Failed to make direct connection to remote desktop", "Gagal membuat koneksi langsung ke desktop jarak jauh"), - ("Set Password", "Tetapkan Password"), + ("Set Password", "Tetapkan kata sandi"), ("OS Password", "Kata Sandi OS"), ("install_tip", "Karena UAC, RustDesk tidak dapat bekerja dengan baik sebagai sisi remote dalam beberapa kasus. Untuk menghindari UAC, silakan klik tombol di bawah ini untuk menginstal RustDesk ke sistem."), ("Click to upgrade", "Klik untuk upgrade"), - ("Click to download", "Kli untuk download"), - ("Click to update", "Klik untuk update"), + ("Click to download", "Klik untuk unduh"), + ("Click to update", "Klik untuk memperbarui"), ("Configure", "Konfigurasi"), ("config_acc", "Untuk mengontrol Desktop Anda dari jarak jauh, Anda perlu memberikan izin \"Aksesibilitas\" RustDesk."), ("config_screen", "Untuk mengakses Desktop Anda dari jarak jauh, Anda perlu memberikan izin \"Perekaman Layar\" RustDesk."), ("Installing ...", "Menginstall"), ("Install", "Instal"), ("Installation", "Instalasi"), - ("Installation Path", "Jalur Instalasi"), + ("Installation Path", "Direktori Instalasi"), ("Create start menu shortcuts", "Buat pintasan start menu"), ("Create desktop icon", "Buat icon desktop"), ("agreement_tip", "Dengan memulai instalasi, Anda menerima perjanjian lisensi."), ("Accept and Install", "Terima dan Install"), - ("End-user license agreement", "Perjanjian lisensi pengguna akhir"), - ("Generating ...", "Menghasilkan..."), + ("End-user license agreement", "Perjanjian lisensi pengguna"), + ("Generating ...", "Memproses..."), ("Your installation is lower version.", "Instalasi Anda adalah versi yang lebih rendah."), ("not_close_tcp_tip", "Jangan tutup jendela ini saat menggunakan tunnel"), - ("Listening ...", "Mendengarkan..."), - ("Remote Host", "Remote Host"), - ("Remote Port", "Remote Port"), + ("Listening ...", "Menghubungkan..."), + ("Remote Host", "Host Remote"), + ("Remote Port", "Port Remote"), ("Action", "Aksi"), ("Add", "Tambah"), ("Local Port", "Port Lokal"), @@ -182,46 +182,46 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Allow using keyboard and mouse", "Izinkan menggunakan keyboard dan mouse"), ("Allow using clipboard", "Izinkan menggunakan papan klip"), ("Allow hearing sound", "Izinkan mendengarkan suara"), - ("Allow file copy and paste", "Izinkan penyalinan dan tempel file"), - ("Connected", "Terkoneksi"), + ("Allow file copy and paste", "Izinkan salin dan tempel file"), + ("Connected", "Terhubung"), ("Direct and encrypted connection", "Koneksi langsung dan terenkripsi"), - ("Relayed and encrypted connection", "Koneksi relai dan terenkripsi"), + ("Relayed and encrypted connection", "Koneksi relay dan terenkripsi"), ("Direct and unencrypted connection", "Koneksi langsung dan tidak terenkripsi"), - ("Relayed and unencrypted connection", "Koneksi relai dan tidak terenkripsi"), - ("Enter Remote ID", "Masukkan Remote ID"), - ("Enter your password", "Masukkan password anda"), + ("Relayed and unencrypted connection", "Koneksi relay dan tidak terenkripsi"), + ("Enter Remote ID", "Masukkan ID Remote"), + ("Enter your password", "Masukkan kata sandi anda"), ("Logging in...", "Masuk..."), ("Enable RDP session sharing", "Aktifkan berbagi sesi RDP"), - ("Auto Login", "Auto Login (Hanya valid jika Anda menyetel \"Kunci setelah sesi berakhir\")"), + ("Auto Login", "Auto Login (Hanya berlaku jika Anda mengatur \"Kunci setelah sesi berakhir\")"), ("Enable Direct IP Access", "Aktifkan Akses IP Langsung"), ("Rename", "Ubah nama"), ("Space", "Spasi"), ("Create Desktop Shortcut", "Buat Pintasan Desktop"), - ("Change Path", "Ubah Jalur"), + ("Change Path", "Ubah Direktori"), ("Create Folder", "Buat Folder"), ("Please enter the folder name", "Silahkan masukkan nama folder"), - ("Fix it", "Memperbaiki"), + ("Fix it", "Perbaiki"), ("Warning", "Peringatan"), ("Login screen using Wayland is not supported", "Layar masuk menggunakan Wayland tidak didukung"), ("Reboot required", "Diperlukan boot ulang"), ("Unsupported display server", "Server tampilan tidak didukung "), - ("x11 expected", "x11 diharapkan"), + ("x11 expected", "Diperlukan x11"), ("Port", "Port"), ("Settings", "Pengaturan"), - ("Username", "Username"), + ("Username", "Nama pengguna"), ("Invalid port", "Kesalahan port"), ("Closed manually by the peer", "Ditutup secara manual oleh peer"), - ("Enable remote configuration modification", "Aktifkan modifikasi konfigurasi jarak jauh"), + ("Enable remote configuration modification", "Aktifkan modifikasi konfigurasi remotE"), ("Run without install", "Jalankan tanpa menginstal"), - ("Connect via relay", ""), - ("Always connect via relay", "Selalu terhubung melalui relai"), - ("whitelist_tip", "Hanya whitelisted IP yang dapat mengakses saya"), + ("Connect via relay", "Sambungkan via relay"), + ("Always connect via relay", "Selalu terhubung melalui relay"), + ("whitelist_tip", "Hanya IP yang diizikan dapat mengakses"), ("Login", "Masuk"), - ("Verify", ""), - ("Remember me", ""), - ("Trust this device", ""), - ("Verification code", ""), - ("verification_tip", ""), + ("Verify", "Verifikasi"), + ("Remember me", "Ingatkan saya"), + ("Trust this device", "Izinkan perangkat ini"), + ("Verification code", "Kode verifikasi"), + ("verification_tip", "Kode verifikasi sudah dikirim ke email yang terdaftar, masukkan kode verifikasi untuk melanjutkan."), ("Logout", "Keluar"), ("Tags", "Tag"), ("Search ID", "Cari ID"), @@ -230,31 +230,31 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Add Tag", "Tambah Tag"), ("Unselect all tags", "Batalkan pilihan semua tag"), ("Network error", "Kesalahan Jaringan"), - ("Username missed", "Username tidak sesuai"), + ("Username missed", "Nama pengguna tidak sesuai"), ("Password missed", "Kata sandi tidak sesuai"), - ("Wrong credentials", "Username atau password salah"), - ("The verification code is incorrect or has expired", ""), + ("Wrong credentials", "Nama pengguna atau kata sandi salah"), + ("The verification code is incorrect or has expired", "Kode verifikasi salah atau sudah kadaluarsa"), ("Edit Tag", "Ubah Tag"), - ("Unremember Password", "Lupa Kata Sandi"), + ("Unremember Password", "Lupakan Kata Sandi"), ("Favorites", "Favorit"), ("Add to Favorites", "Tambah ke Favorit"), ("Remove from Favorites", "Hapus dari favorit"), ("Empty", "Kosong"), ("Invalid folder name", "Nama folder tidak valid"), - ("Socks5 Proxy", "Socks5 Proxy"), + ("Socks5 Proxy", "Proxy Socks5"), ("Hostname", "Hostname"), ("Discovered", "Telah ditemukan"), ("install_daemon_tip", "Untuk memulai saat boot, Anda perlu menginstal system service."), - ("Remote ID", "Remote ID"), + ("Remote ID", "ID Remote"), ("Paste", "Tempel"), ("Paste here?", "Tempel disini?"), ("Are you sure to close the connection?", "Apakah anda yakin akan menutup koneksi?"), - ("Download new version", "Untuk versi baru"), - ("Touch mode", "Mode Sentuh"), + ("Download new version", "Unduh versi baru"), + ("Touch mode", "Mode Layar Sentuh"), ("Mouse mode", "Mode Mouse"), ("One-Finger Tap", "Ketuk Satu Jari"), ("Left Mouse", "Mouse Kiri"), - ("One-Long Tap", "Ketuk Satu Panjang"), + ("One-Long Tap", "Ketuk Tahan"), ("Two-Finger Tap", "Ketuk Dua Jari"), ("Right Mouse", "Mouse Kanan"), ("One-Finger Move", "Gerakan Satu Jari"), @@ -275,25 +275,25 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Total", "Total"), ("items", "item"), ("Selected", "Dipilih"), - ("Screen Capture", "Rekam Layar"), - ("Input Control", "kontrol input"), + ("Screen Capture", "Tangkapan Layar"), + ("Input Control", "Kontrol input"), ("Audio Capture", "Rekam Suara"), ("File Connection", "Koneksi File"), - ("Screen Connection", "koneksi layar"), - ("Do you accept?", "Apakah diperbolehkan?"), + ("Screen Connection", "Koneksi layar"), + ("Do you accept?", "Apakah anda setuju?"), ("Open System Setting", "Buka Pengaturan Sistem"), - ("How to get Android input permission?", ""), + ("How to get Android input permission?", "Bagaimana cara mendapatkan izin input dari Android?"), ("android_input_permission_tip1", "Agar perangkat jarak jauh dapat mengontrol perangkat Android Anda melalui mouse atau sentuhan, Anda harus mengizinkan RustDesk untuk menggunakan layanan \"Aksesibilitas\"."), ("android_input_permission_tip2", "Silakan buka halaman pengaturan sistem berikutnya, temukan dan masuk ke [Layanan Terinstal], aktifkan layanan [Input RustDesk]."), - ("android_new_connection_tip", "Permintaan kontrol baru telah diterima, yang ingin mengontrol perangkat Anda saat ini."), - ("android_service_will_start_tip", "Mengaktifkan \"Tangkapan Layar\" akan memulai layanan secara otomatis, memungkinkan perangkat lain untuk meminta sambungan ke perangkat Anda."), - ("android_stop_service_tip", "Menutup layanan akan secara otomatis menutup semua koneksi yang dibuat."), + ("android_new_connection_tip", "Permintaan akses remote telah diterima"), + ("android_service_will_start_tip", "Mengaktifkan \"Tangkapan Layar\" akan memulai secara otomatis, memungkinkan perangkat lain untuk meminta koneksi ke perangkat Anda."), + ("android_stop_service_tip", "Menutup layanan secara otomatis akan menutup semua koneksi yang dibuat."), ("android_version_audio_tip", "Versi Android saat ini tidak mendukung pengambilan audio, harap tingkatkan ke Android 10 atau lebih tinggi."), - ("android_start_service_tip", ""), - ("android_permission_may_not_change_tip", ""), + ("android_start_service_tip", "Tap [Mulai Layanan] atau aktifkan izin [Tangkapan Layar] untuk memulai berbagi layar."), + ("android_permission_may_not_change_tip", "Izin untuk koneksi yang sudah terhubung mungkin tidak dapat diubah secara instan hingga terhubung kembali"), ("Account", "Akun"), - ("Overwrite", "Timpa"), - ("This file exists, skip or overwrite this file?", "File ini sudah ada, lewati atau timpa file ini?"), + ("Overwrite", "Ganti"), + ("This file exists, skip or overwrite this file?", "File ini sudah ada, lewati atau ganti file ini?"), ("Quit", "Keluar"), ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), ("Help", "Bantuan"), @@ -303,30 +303,30 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Unsupported", "Tidak didukung"), ("Peer denied", "Rekan ditolak"), ("Please install plugins", "Silakan instal plugin"), - ("Peer exit", "keluar rekan"), + ("Peer exit", "Rekan keluar"), ("Failed to turn off", "Gagal mematikan"), - ("Turned off", "Matikan"), + ("Turned off", "Dimatikan"), ("In privacy mode", "Dalam mode privasi"), ("Out privacy mode", "Keluar dari mode privasi"), ("Language", "Bahasa"), - ("Keep RustDesk background service", "Pertahankan RustDesk berjalan pada background service"), + ("Keep RustDesk background service", "Pertahankan RustDesk berjalan pada service background"), ("Ignore Battery Optimizations", "Abaikan Pengoptimalan Baterai"), - ("android_open_battery_optimizations_tip", ""), - ("Start on Boot", ""), - ("Start the screen sharing service on boot, requires special permissions", ""), - ("Connection not allowed", "Koneksi tidak dijinkan"), - ("Legacy mode", "Mode lama"), + ("android_open_battery_optimizations_tip", "Jika kamu ingin menonaktifkan fitur ini, buka halam pengaturan, cari dan pilih [Baterai], Uncheck [Tidak dibatasi]"), + ("Start on Boot", "Mulai saat dihidupkan"), + ("Start the screen sharing service on boot, requires special permissions", "Mulai layanan berbagi layar saat sistem dinyalakan, memerlukan izin khusus."), + ("Connection not allowed", "Koneksi tidak dizinkan"), + ("Legacy mode", "Mode lawas"), ("Map mode", "Mode peta"), ("Translate mode", "Mode terjemahan"), ("Use permanent password", "Gunakan kata sandi permanaen"), - ("Use both passwords", "Gunakan kedua kata sandi "), + ("Use both passwords", "Gunakan kedua kata sandi"), ("Set permanent password", "Setel kata sandi permanen"), - ("Enable Remote Restart", "Aktifkan Restart Jarak Jauh"), - ("Allow remote restart", "Ijinkan Restart Jarak Jauh"), - ("Restart Remote Device", "Restart Perangkat Jarak Jauh"), - ("Are you sure you want to restart", "Apakah Anda yakin untuk memulai ulang"), - ("Restarting Remote Device", "Memulai Ulang Perangkat Jarak Jauh"), - ("remote_restarting_tip", ""), + ("Enable Remote Restart", "Aktifkan Restart Remote"), + ("Allow remote restart", "Ijinkan Restart Remote"), + ("Restart Remote Device", "Restart Perangkat Remote"), + ("Are you sure you want to restart", "Apakah Anda yakin ingin merestart"), + ("Restarting Remote Device", "Merestart Perangkat Remote"), + ("remote_restarting_tip", "Perangkat remote sedang merestart, harap tutup pesan ini dan sambungkan kembali dengan kata sandi permanen setelah beberapa saat."), ("Copied", "Disalin"), ("Exit Fullscreen", "Keluar dari Layar Penuh"), ("Fullscreen", "Layar penuh"), @@ -334,11 +334,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Select Monitor", "Pilih Monitor"), ("Control Actions", "Tindakan Kontrol"), ("Display Settings", "Pengaturan tampilan"), - ("Ratio", "Perbandingan"), + ("Ratio", "Rasio"), ("Image Quality", "Kualitas gambar"), - ("Scroll Style", "Gaya Gulir"), - ("Show Toolbar", ""), - ("Hide Toolbar", ""), + ("Scroll Style", "Gaya Scroll"), + ("Show Toolbar", "Tampilkan Toolbar"), + ("Hide Toolbar", "Sembunyikan Toolbar"), ("Direct Connection", "Koneksi langsung"), ("Relay Connection", "Koneksi Relay"), ("Secure Connection", "Koneksi aman"), @@ -348,31 +348,31 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("General", "Umum"), ("Security", "Keamanan"), ("Theme", "Tema"), - ("Dark Theme", "Tema gelap"), - ("Light Theme", ""), + ("Dark Theme", "Tema Gelap"), + ("Light Theme", "Tema Terang"), ("Dark", "Gelap"), ("Light", "Terang"), - ("Follow System", "Ikuti sistem"), + ("Follow System", "Ikuti Sistem"), ("Enable hardware codec", "Aktifkan codec perangkat keras"), - ("Unlock Security Settings", "Buka Kunci Pengaturan Keamanan"), + ("Unlock Security Settings", "Buka Keamanan Pengaturan"), ("Enable Audio", "Aktifkan Audio"), - ("Unlock Network Settings", "Buka Kunci Pengaturan Jaringan"), + ("Unlock Network Settings", "Buka Keamanan Pengaturan Jaringan"), ("Server", "Server"), - ("Direct IP Access", "Direct IP Access"), + ("Direct IP Access", "Akses IP Langsung"), ("Proxy", "Proxy"), ("Apply", "Terapkan"), ("Disconnect all devices?", "Putuskan sambungan semua perangkat?"), - ("Clear", ""), - ("Audio Input Device", ""), - ("Use IP Whitelisting", "Gunakan Daftar Putih IP"), + ("Clear", "Bersihkan"), + ("Audio Input Device", "Input Perangkat Audio"), + ("Use IP Whitelisting", "Gunakan daftar IP yang diizinkan"), ("Network", "Jaringan"), ("Enable RDP", "Aktifkan RDP"), - ("Pin Toolbar", ""), - ("Unpin Toolbar", ""), - ("Recording", "Rekaman"), + ("Pin Toolbar", "Sematkan Toolbar"), + ("Unpin Toolbar", "Batal sematkan Toolbar"), + ("Recording", "Sedang Merekam"), ("Directory", "Direktori"), ("Automatically record incoming sessions", "Secara otomatis merekam sesi masuk"), - ("Change", "Mengubah"), + ("Change", "Ubah"), ("Start session recording", "Mulai sesi perekaman"), ("Stop session recording", "Hentikan sesi perekaman"), ("Enable Recording Session", "Aktifkan Sesi Perekaman"), @@ -381,8 +381,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Deny LAN Discovery", "Tolak Penemuan LAN"), ("Write a message", "Menulis pesan"), ("Prompt", ""), - ("Please wait for confirmation of UAC...", ""), - ("elevated_foreground_window_tip", ""), + ("Please wait for confirmation of UAC...", "Harap tunggu konfirmasi UAC"), + ("elevated_foreground_window_tip", "Jendela remote desktop ini memerlukan hak akses khusus, jadi anda tidak bisa menggunakan mouse dan keyboard untuk sementara. Kamu bisa meminta pengguna remote untuk menyembunyikan jendela ini atau klik tombol elevasi di jendela pengaturan koneksi. Untuk menghindari masalah ini, direkomendasikan untuk menginstall aplikasi secara permanen"), ("Disconnected", "Terputus"), ("Other", "Lainnya"), ("Confirm before closing multiple tabs", "Konfirmasi sebelum menutup banyak tab"), @@ -391,152 +391,152 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Screen Share", "Berbagi Layar"), ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland membutuhkan Ubuntu 21.04 atau versi yang lebih tinggi."), ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland membutuhkan versi distro linux yang lebih tinggi. Silakan coba desktop X11 atau ubah OS Anda."), - ("JumpLink", "View"), - ("Please Select the screen to be shared(Operate on the peer side).", "Silakan Pilih layar yang akan dibagikan (Operasi di sisi rekan)."), + ("JumpLink", "Tautan Cepat"), + ("Please Select the screen to be shared(Operate on the peer side).", "Silakan Pilih layar yang akan dibagikan kepada rekan."), ("Show RustDesk", "Tampilkan RustDesk"), ("This PC", "PC ini"), ("or", "atau"), ("Continue with", "Lanjutkan dengan"), - ("Elevate", ""), - ("Zoom cursor", ""), + ("Elevate", "Elevasi"), + ("Zoom cursor", "Perbersar Kursor"), ("Accept sessions via password", "Izinkan sesi dengan kata sandi"), ("Accept sessions via click", "Izinkan sesi dengan klik"), ("Accept sessions via both", "Izinkan sesi dengan keduanya"), - ("Please wait for the remote side to accept your session request...", "Harap tunggu sisi jarak jauh untuk menerima permintaan sesi Anda..."), + ("Please wait for the remote side to accept your session request...", "Harap tunggu pihak pengguna remote untuk menerima permintaan sesi..."), ("One-time Password", "Kata sandi satu kali"), ("Use one-time password", "Gunakan kata sandi satu kali"), - ("One-time password length", ""), - ("Request access to your device", ""), - ("Hide connection management window", ""), - ("hide_cm_tip", ""), - ("wayland_experiment_tip", ""), - ("Right click to select tabs", ""), - ("Skipped", ""), - ("Add to Address Book", ""), - ("Group", ""), + ("One-time password length", "Panjang kata sandi satu kali pakai"), + ("Request access to your device", "Permintaan akses ke perangkat ini"), + ("Hide connection management window", "Sembunyikan jendela pengaturan koneksi"), + ("hide_cm_tip", "Izinkan untuk menyembunyikan hanya jika menerima sesi melalui kata sandi dan menggunakan kata sandi permanen"), + ("wayland_experiment_tip", "Dukungan Wayland masih dalam tahap percobaan, harap gunakan X11 jika Anda memerlukan akses tanpa pengawasan"), + ("Right click to select tabs", "Klik kanan untuk memilih tab"), + ("Skipped", "Dilewati"), + ("Add to Address Book", "Tambahkan ke Buku Alamat"), + ("Group", "Grup"), ("Search", "Pencarian"), - ("Closed manually by web console", ""), - ("Local keyboard type", ""), - ("Select local keyboard type", ""), - ("software_render_tip", ""), - ("Always use software rendering", ""), - ("config_input", ""), - ("config_microphone", ""), - ("request_elevation_tip", ""), - ("Wait", ""), - ("Elevation Error", ""), - ("Ask the remote user for authentication", ""), - ("Choose this if the remote account is administrator", ""), - ("Transmit the username and password of administrator", ""), - ("still_click_uac_tip", ""), - ("Request Elevation", ""), - ("wait_accept_uac_tip", ""), - ("Elevate successfully", ""), - ("uppercase", ""), - ("lowercase", ""), - ("digit", ""), - ("special character", ""), - ("length>=8", ""), - ("Weak", ""), - ("Medium", ""), - ("Strong", ""), - ("Switch Sides", ""), - ("Please confirm if you want to share your desktop?", ""), - ("Display", ""), - ("Default View Style", ""), - ("Default Scroll Style", ""), - ("Default Image Quality", ""), - ("Default Codec", ""), - ("Bitrate", ""), - ("FPS", ""), - ("Auto", ""), - ("Other Default Options", ""), - ("Voice call", ""), - ("Text chat", ""), - ("Stop voice call", ""), - ("relay_hint_tip", ""), - ("Reconnect", ""), - ("Codec", ""), - ("Resolution", ""), - ("No transfers in progress", ""), - ("Set one-time password length", ""), - ("install_cert_tip", ""), - ("confirm_install_cert_tip", ""), - ("RDP Settings", ""), - ("Sort by", ""), - ("New Connection", ""), - ("Restore", ""), - ("Minimize", ""), - ("Maximize", ""), - ("Your Device", ""), - ("empty_recent_tip", ""), - ("empty_favorite_tip", ""), - ("empty_lan_tip", ""), - ("empty_address_book_tip", ""), + ("Closed manually by web console", "Ditutup secara manual dari konsol web."), + ("Local keyboard type", "Tipe papan ketik"), + ("Select local keyboard type", "Pilih tipe papan ketik"), + ("software_render_tip", "Jika kamu menggunakan kartu grafis Nvidia pada sistem linux dan jendela windows ditutup secara instan setelah terhung, silahkan ubah ke driver open-source Nouveau, dibutukan untuk merestart aplikasi"), + ("Always use software rendering", "Selalu gunakan software rendering"), + ("config_input", "Untuk menggunakan input keyboard remote, anda perlu memberikan izin \"Pemantauan Input\" pada RustDesk"), + ("config_microphone", "Untuk berbicara secara remote, anda perlu memberikan izin \"Rekam Audio\" pada RustDesk"), + ("request_elevation_tip", "Anda juga bisa meminta izin elevasi jika ada pihak pengguna remote"), + ("Wait", "Tunggu"), + ("Elevation Error", "Kesalahan Elevasi"), + ("Ask the remote user for authentication", "Minta pihak pengguna remote untuk otentikasi"), + ("Choose this if the remote account is administrator", "Pilih ini jika akun adalah \"administrator\""), + ("Transmit the username and password of administrator", "Transmisikan nama pengguna dan kata sandi administrator"), + ("still_click_uac_tip", "Masih memerlukan persetujuan pihak pengguna remote untuk mengklik OK pada jendela UAC RustDesk yang sedang berjalan"), + ("Request Elevation", "Permintaan Elevasi"), + ("wait_accept_uac_tip", "Harap tunggu pihak pengguna remote menerima jendela UAC."), + ("Elevate successfully", "Elevasi berhasil"), + ("uppercase", "Huruf besar"), + ("lowercase", "Huruf kecil"), + ("digit", "angka"), + ("special character", "Karakter spesial"), + ("length>=8", "panjang>=8"), + ("Weak", "Lemah"), + ("Medium", "Sedang"), + ("Strong", "Kuat"), + ("Switch Sides", "Tukar Posisi"), + ("Please confirm if you want to share your desktop?", "Harap konfirmasi apakah Anda ingin berbagi layar?"), + ("Display", "Tampilan"), + ("Default View Style", "Gaya Tampilan Default"), + ("Default Scroll Style", "Gaya Scroll Default"), + ("Default Image Quality", "Kualitas Gambar Default"), + ("Default Codec", "Codec default"), + ("Bitrate", "Bitrate"), + ("FPS", "FPS"), + ("Auto", "Otomatis"), + ("Other Default Options", "Opsi Default Lainnya"), + ("Voice call", "Panggilan suara"), + ("Text chat", "Obrolan Teks"), + ("Stop voice call", "Hentikan panggilan suara"), + ("relay_hint_tip", "Tidak memungkinkan untuk terhubung secara langsung; anda bisa mencoba terhubung via relay. Selain itu, jika ingin menggunakan relay pada percobaan pertama, silahkan tambah akhiran \"/r\" pada ID atau pilih \"Selalu terhubung via relay\" di pilihan sesi terbaru."), + ("Reconnect", "Menyambungkan ulang"), + ("Codec", "Codec"), + ("Resolution", "Resolusi"), + ("No transfers in progress", "Tidak ada transfer data yang sedang berlangsung"), + ("Set one-time password length", "Atur panjang kata sandi satu kali pakai"), + ("install_cert_tip", "Install sertifikat RustDesk"), + ("confirm_install_cert_tip", "Ini adalah sertifikat pengujian RustDesk, yang dapat dipercaya. Sertifikat ini akan digunakan untuk menginstal driver RustDesk saat diperlukan"), + ("RDP Settings", "Pengaturan RDP"), + ("Sort by", "Urutkan berdasarkan"), + ("New Connection", "Koneksi baru"), + ("Restore", "Mengembalikan"), + ("Minimize", "Meminimalkan"), + ("Maximize", "Memaksimalkan"), + ("Your Device", "Perangkat anda"), + ("empty_recent_tip", "Tidak ada sesi terbaru!"), + ("empty_favorite_tip", "Belum ada rekan (peer) favorit?\nTemukan seseorang untuk terhubung dan tambahkan ke favorit!"), + ("empty_lan_tip", "Sepertinya kami belum menemukan rekan (peer)"), + ("empty_address_book_tip", "Tampaknya saat ini tidak ada rekan yang terdaftar dalam buku alamat Anda"), ("eg: admin", ""), - ("Empty Username", ""), - ("Empty Password", ""), - ("Me", ""), - ("identical_file_tip", ""), - ("show_monitors_tip", ""), - ("View Mode", ""), - ("login_linux_tip", ""), - ("verify_rustdesk_password_tip", ""), - ("remember_account_tip", ""), - ("os_account_desk_tip", ""), - ("OS Account", ""), - ("another_user_login_title_tip", ""), - ("another_user_login_text_tip", ""), - ("xorg_not_found_title_tip", ""), - ("xorg_not_found_text_tip", ""), - ("no_desktop_title_tip", ""), - ("no_desktop_text_tip", ""), - ("No need to elevate", ""), - ("System Sound", ""), - ("Default", ""), - ("New RDP", ""), + ("Empty Username", "Nama pengguna kosong"), + ("Empty Password", "Kata sandi kosong"), + ("Me", "Saya"), + ("identical_file_tip", "Data ini identik dengan milik rekan (peer)"), + ("show_monitors_tip", "Tampilkan monitor di toolbar"), + ("View Mode", "Mode Tampilan"), + ("login_linux_tip", "Anda harus masuk ke akun remote linux untuk mengaktifkan sesi X desktop"), + ("verify_rustdesk_password_tip", "Verifikasi Kata Sandi RustDesk"), + ("remember_account_tip", "Ingat akun ini"), + ("os_account_desk_tip", "Akun ini digunakan untuk masuk ke sistem operasi remote dan mengaktifkan sesi desktop dalam mode tanpa tampilan (headless)"), + ("OS Account", "Akun OS"), + ("another_user_login_title_tip", "Akun ini sedang digunakan"), + ("another_user_login_text_tip", "Putuskan koneksi diperangkat lain"), + ("xorg_not_found_title_tip", "Xorg tidak ditemukan"), + ("xorg_not_found_text_tip", "Silahkan install Xorg"), + ("no_desktop_title_tip", "Desktop tidak tersedia"), + ("no_desktop_text_tip", "Silahkan install GNOME Desktop"), + ("No need to elevate", "Tidak perlu elevasi"), + ("System Sound", "Suara Sistem"), + ("Default", "Default"), + ("New RDP", "RDP Baru"), ("Fingerprint", ""), ("Copy Fingerprint", ""), ("no fingerprints", ""), - ("Select a peer", ""), - ("Select peers", ""), - ("Plugins", ""), - ("Uninstall", ""), - ("Update", ""), - ("Enable", ""), - ("Disable", ""), - ("Options", ""), - ("resolution_original_tip", ""), - ("resolution_fit_local_tip", ""), - ("resolution_custom_tip", ""), + ("Select a peer", "Pilih rekan"), + ("Select peers", "Pilih rekan-rekan"), + ("Plugins", "Plugin"), + ("Uninstall", "Hapus instalasi"), + ("Update", "Perbarui"), + ("Enable", "Aktifkan"), + ("Disable", "Nonaktifkan"), + ("Options", "Opsi"), + ("resolution_original_tip", "Resolusi original"), + ("resolution_fit_local_tip", "Sesuaikan resolusi lokal"), + ("resolution_custom_tip", "Resolusi kustom"), ("Collapse toolbar", ""), - ("Accept and Elevate", ""), - ("accept_and_elevate_btn_tooltip", ""), - ("clipboard_wait_response_timeout_tip", ""), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), - ("logout_tip", ""), - ("Service", ""), - ("Start", ""), - ("Stop", ""), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), - ("Open connection in new tab", ""), - ("Move tab to new window", ""), - ("Can not be empty", ""), - ("Already exists", ""), - ("Change Password", ""), - ("Refresh Password", ""), - ("ID", ""), - ("Grid View", ""), - ("List View", ""), - ("Select", ""), - ("Toggle Tags", ""), - ("pull_ab_failed_tip", ""), - ("push_ab_failed_tip", ""), - ("synced_peer_readded_tip", ""), + ("Accept and Elevate", "Terima dan Elevasi"), + ("accept_and_elevate_btn_tooltip", "Terima koneksi dan elevasi izin UAC"), + ("clipboard_wait_response_timeout_tip", "Batas waktu habis saat menunggu respons salinan"), + ("Incoming connection", "Koneksi akan masuk"), + ("Outgoing connection", "Koneksi akan keluar"), + ("Exit", "Keluar"), + ("Open", "Buka"), + ("logout_tip", "Apakah Anda yakin ingin keluar?"), + ("Service", "Service"), + ("Start", "Mulai"), + ("Stop", "Berhenti"), + ("exceed_max_devices", "Anda telah mencapai jumlah maksimal perangkat yang dikelola"), + ("Sync with recent sessions", "Sinkronkan dengan sesi terbaru"), + ("Sort tags", "Urutkan tag"), + ("Open connection in new tab", "Buka koneksi di tab baru"), + ("Move tab to new window", "Pindahkan tabn ke jendela baru"), + ("Can not be empty", "Tidak boleh kosong"), + ("Already exists", "Sudah ada"), + ("Change Password", "Ganti kata sandi"), + ("Refresh Password", "Perbarui Kata Sandi"), + ("ID", "ID"), + ("Grid View", "Tampilan Kotak"), + ("List View", "Tampilan Daftar"), + ("Select", "Pilih"), + ("Toggle Tags", "Toggle Tag"), + ("pull_ab_failed_tip", "Gagal memuat ulang buku alamat"), + ("push_ab_failed_tip", "Gagal menyinkronkan buku alamat ke server"), + ("synced_peer_readded_tip", "Perangkat yang terdaftar dalam sesi-sesi terbaru akan di-sinkronkan kembali ke buku alamat."), ].iter().cloned().collect(); } From 16da5ccc91e328d72c182dc2bd54a8dd19f2c968 Mon Sep 17 00:00:00 2001 From: Ibnul Mutaki Date: Mon, 21 Aug 2023 21:20:21 +0700 Subject: [PATCH 501/612] fix some mistake on README-ID --- docs/README-ID.md | 91 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 65 insertions(+), 26 deletions(-) diff --git a/docs/README-ID.md b/docs/README-ID.md index e071cf6ee..33dab8445 100644 --- a/docs/README-ID.md +++ b/docs/README-ID.md @@ -6,52 +6,64 @@ StructureSnapshot
    [English] | [Українська] | [česky] | [中文] | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي] | [Tiếng Việt] | [Ελληνικά]
    - Kami membutuhkan bantuan Anda untuk menerjemahkan README ini dan RustDesk UI ke bahasa asli anda + Kami membutuhkan bantuan kamu untuk menterjemahkan file README dan RustDesk UI ke Bahasa Indonesia

    -Birbincang bersama kami: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk) +Mari mengobrol 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) -Perangkat lunak desktop jarak jauh lainnya, ditulis dengan Rust. Bekerja begitu saja, tidak memerlukan konfigurasi. Anda memiliki kendali penuh atas data Anda, tanpa khawatir tentang keamanan. Anda dapat menggunakan server rendezvous/relay kami, [konfigurasi server sendiri](https://rustdesk.com/server), or [tulis rendezvous/relay server anda sendiri](https://github.com/rustdesk/rustdesk-server-demo). +Merupakan perangkat lunak Remote Desktop yang baru, dibangun dengan Rust. kamu bisa langsung menggunakannya tanpa perlu konfigurasi tambahan. Serta ,emiliki kontrol penuh terhadap semua data, tanpa perlu merasa was-was tentang isu keamanan, dan yang lebih menarik adalah memiliki opsi untuk menggunakan server rendezvous/relay milik kami, [konfigurasi server sendiri](https://rustdesk.com/server), atau [tulis rendezvous/relay server anda sendiri](https://github.com/rustdesk/rustdesk-server-demo). -RustDesk menyambut baik kontribusi dari semua orang. Lihat [`docs/CONTRIBUTING.md`](CONTRIBUTING.md) untuk membantu sebelum memulai. +RustDesk mengajak semua orang untuk ikut berkontribusi. Lihat [`docs/CONTRIBUTING.md`](CONTRIBUTING.md) untuk melihat panduan. -[**BINARY DOWNLOAD**](https://github.com/rustdesk/rustdesk/releases) +[**UNDUH BINARY**](https://github.com/rustdesk/rustdesk/releases) -## Publik Server Gratis +## Server Publik Gratis -Di bawah ini adalah server yang bisa Anda gunakan secara gratis, dapat berubah seiring waktu. Jika Anda tidak dekat dengan salah satu dari ini, jaringan Anda mungkin lambat. -| Lokasi | Vendor | Spesifikasi | +Di bawah ini merupakan server gratis yang bisa kamu gunakan, seiring waktu kemungkinan akan terjadi perubahan spesifikasi pada setiap server. Jika lokasi kamu berada jauh dengan salah satu server yang tersedia, kemungkinan koneksi akan terasa lambat ketika melakukan proses remote. +| Lokasi | Penyedia | Spesifikasi | | --------- | ------------- | ------------------ | -| Germany | Hetzner | 2 vCPU / 4GB RAM | -| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | +| Jerman | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4GB RAM | +| Ukraina (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM | -## Dependencies +## Dev Container -Versi desktop menggunakan [sciter](https://sciter.com/) untuk GUI, silahkan download sendiri sciter dynamic library. +[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Container&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/rustdesk/rustdesk) + +Apabila kamu sudah menginstall VS Code dan Docker, kamu bisa mengklik badge yang ada diatas untuk memulainya. Dengan mengklik badge tersebut secara otomatis akan menginstal ekstensi pada VS Code, lakukan kloning (clone) source code kedalam container volume, dan aktifkan dev container untuk menggunakannya. + +## Dependensi + +Pada versi desktop, antarmuka pengguna (GUI) menggunakan [Sciter](https://sciter.com/) atau flutter, tutorial ini hanya berlaku untuk Sciter + +Kamu bisa mengunduh Sciter dynamic library disini. [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) -## Langkah untuk RAW Build +## Langkah awal untuk memulai -- Siapkan env pengembangan Rust dan C++ build env +- Siapkan env development Rust dan env build C++ -- Install [vcpkg](https://github.com/microsoft/vcpkg), dan arahkan `VCPKG_ROOT` env variable dengan benar +- Install [vcpkg](https://github.com/microsoft/vcpkg), dan atur variabel env `VCPKG_ROOT` dengan benar - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static - Linux/MacOS: vcpkg install libvpx libyuv opus aom - jalankan `cargo run` -## Bagaimana Build di Linux +## [Build](https://rustdesk.com/docs/en/dev/build/) + +## Cara Build di Linux ### 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 +sudo apt install -y zip 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 make \ + libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev ``` ### Fedora 28 (CentOS 8) @@ -78,7 +90,7 @@ export VCPKG_ROOT=$HOME/vcpkg vcpkg/vcpkg install libvpx libyuv opus aom ``` -### Perbaiki libvpx (Untuk Fedora) +### Mengatasi masalah libvpx (Untuk Fedora) ```sh cd vcpkg/buildtrees/libvpx/src @@ -104,13 +116,40 @@ mv libsciter-gtk.so target/debug VCPKG_ROOT=$HOME/vcpkg cargo run ``` -### Ubah Wayland menjadi X11 (Xorg) +### Mengubah Wayland ke X11 (Xorg) -RustDesk tidak mendukung Wayland. Cek [ini](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) untuk mengonfigurasi Xorg sebagai sesi GNOME default. +RustDesk tidak mendukung Wayland. Cek [ini](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) untuk mengonfigurasi Xorg sebagai sesi standar di GNOME. -## Bagaimana build dengan Docker +## Kompatibilitas dengan Wayland -Mulailah dengan mengkloning repositori dan build dengan docker container: +Sepertinya Wayland tidak memiliki API untuk mengirimkan ketukan tombol ke jendela lain. Maka dari itu, RustDesk menggunakan API dari level yang lebih rendah, lebih tepatnya perangkat `/dev/uinput` (linux kernel level) + +Saat Wayland menjadi sisi yang dikendalikan atau sisi yang sedang diremote, kamu harus memulai dengan cara ini + +```bash +# Start uinput service +$ sudo rustdesk --service +$ rustdesk +``` + +**Harap Diperhatikan**: Saat Perekaman layar menggunakan Wayland antarmuka (UI) yang ditampilkan akan berbeda. Untuk saat ini RustDesk hanya mendukung org.freedesktop.portal.ScreenCast. + +```bash +$ dbus-send --session --print-reply \ + --dest=org.freedesktop.portal.Desktop \ + /org/freedesktop/portal/desktop \ + org.freedesktop.DBus.Properties.Get \ + string:org.freedesktop.portal.ScreenCast string:version +# Not support +Error org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.ScreenCast” +# Support +method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=257 reply_serial=2 + variant uint32 4 +``` + +## Cara Build dengan Docker + +Mulailah dengan melakukan kloning (clone) repositori dan build dengan docker container: ```sh git clone https://github.com/rustdesk/rustdesk @@ -118,25 +157,25 @@ cd rustdesk docker build -t "rustdesk-builder" . ``` -Kemudian, setiap kali Anda perlu build aplikasi, jalankan perintah berikut: +Selanjutnya, setiap kali ketika kamu akan melakukan build aplikasi, jalankan perintah berikut: ```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 ``` -Perhatikan bahwa build pertama mungkin memerlukan waktu lebih lama sebelum dependensi di-cache, build berikutnya akan lebih cepat. Selain itu, jika Anda perlu menentukan argumen yang berbeda untuk perintah build, Anda dapat melakukannya di akhir perintah di posisi ``. Misalnya, jika Anda ingin membangun versi rilis yang dioptimalkan, Anda akan menjalankan perintah di atas diikuti oleh `--release`. Hasil eksekusi akan tersedia pada target folder di sistem anda, dan dapat dijalankan dengan: +Perlu diingat bahwa pada saat build pertama kali, mungkin memerlukan waktu lebih lama sebelum dependensi di-cache, build berikutnya akan lebih cepat. Selain itu, jika perlu menentukan argumen yang berbeda untuk perintah build, kamu dapat melakukannya di akhir perintah di posisi ``. Misalnya, jika ingin membangun versi rilis yang dioptimalkan, jalankan perintah di atas dan tambahkan `--release`. Hasil eksekusi perintah tersebut akan tersimpan pada target folder di sistem kamu, dan dapat dijalankan dengan: ```sh target/debug/rustdesk ``` -Atau, jika Anda menjalankan rilis yang dapat dieksekusi: +Atau, jika kamu menjalankan rilis yang dapat dieksekusi: ```sh target/release/rustdesk ``` -Harap pastikan bahwa Anda menjalankan perintah ini dari root repositori RustDesk, jika tidak, aplikasi mungkin tidak dapat menemukan sumber daya yang diperlukan. Perhatikan juga perintah cargo seperti `install` atau `run` saat ini tidak didukung melalui metode ini karena mereka akan menginstal atau menjalankan program di dalam container bukan pada host. +Harap pastikan bahwa kamu menjalankan perintah ini dari repositori root RustDesk, jika tidak demikian, aplikasi mungkin tidak dapat menemukan sumber yang diperlukan. Dan juga, perintah cargo seperti `install` atau `run` saat ini tidak didukung melalui metode ini karena, proses menginstal atau menjalankan program terjadi di dalam container bukan pada host. ## Struktur File From cabfdccfa4a43f18d875fac4ec3d4b99aeaf9dcf Mon Sep 17 00:00:00 2001 From: Ibnul Mutaki Date: Mon, 21 Aug 2023 21:22:11 +0700 Subject: [PATCH 502/612] fix a little err --- docs/README-ID.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README-ID.md b/docs/README-ID.md index 33dab8445..e4cb5560c 100644 --- a/docs/README-ID.md +++ b/docs/README-ID.md @@ -6,7 +6,7 @@ StructureSnapshot
    [English] | [Українська] | [česky] | [中文] | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي] | [Tiếng Việt] | [Ελληνικά]
    - Kami membutuhkan bantuan kamu untuk menterjemahkan file README dan RustDesk UI ke Bahasa Indonesia + Kami membutuhkan bantuanmu untuk menterjemahkan file README dan RustDesk UI ke Bahasa Indonesia

    Mari mengobrol bersama kami: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk) From afe12154a240823c5085c97058417f2de587a859 Mon Sep 17 00:00:00 2001 From: jimmyGALLAND <64364019+jimmyGALLAND@users.noreply.github.com> Date: Mon, 21 Aug 2023 16:26:23 +0200 Subject: [PATCH 503/612] Improve some translate fr.rs --- src/lang/fr.rs | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 16e0585ee..f9d711ccd 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -75,7 +75,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Do you want to enter again?", "Voulez-vous participer à nouveau ?"), ("Connection Error", "Erreur de connexion"), ("Error", "Erreur"), - ("Reset by the peer", "La connexion a été fermée par la machine distante"), + ("Reset by the peer", "La connexion a été fermée par l'appareil distant"), ("Connecting...", "Connexion..."), ("Connection in progress. Please wait.", "Connexion en cours. Veuillez patienter."), ("Please try 1 minute later", "Réessayez dans une minute"), @@ -92,8 +92,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Refresh File", "Rafraîchir le contenu"), ("Local", "Local"), ("Remote", "Distant"), - ("Remote Computer", "Ordinateur distant"), - ("Local Computer", "Ordinateur local"), + ("Remote Computer", "Appareil distant"), + ("Local Computer", "Appareil local"), ("Confirm Delete", "Confirmer la suppression"), ("Delete", "Supprimer"), ("Properties", "Propriétés"), @@ -129,9 +129,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Show remote cursor", "Afficher le curseur distant"), ("Show quality monitor", "Afficher le moniteur de qualité"), ("Disable clipboard", "Désactiver le presse-papier"), - ("Lock after session end", "Verrouiller l'ordinateur distant après la déconnexion"), + ("Lock after session end", "Verrouiller l'appareil distant après la déconnexion"), ("Insert", "Envoyer"), - ("Insert Lock", "Verrouiller l'ordinateur distant"), + ("Insert Lock", "Verrouiller l'appareil distant"), ("Refresh", "Rafraîchir l'écran"), ("ID does not exist", "L'ID n'existe pas"), ("Failed to connect to rendezvous server", "Échec de la connexion au serveur rendezvous"), @@ -188,7 +188,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Relayed and encrypted connection", "Connexion relais chiffrée"), ("Direct and unencrypted connection", "Connexion directe non chiffrée"), ("Relayed and unencrypted connection", "Connexion relais non chiffrée"), - ("Enter Remote ID", "Entrer l'ID de l'appareil à distance"), + ("Enter Remote ID", "Entrer l'ID de l'appareil distant"), ("Enter your password", "Entrer votre mot de passe"), ("Logging in...", "En cours de connexion ..."), ("Enable RDP session sharing", "Activer le partage de session RDP"), @@ -210,7 +210,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Settings", "Paramètres"), ("Username", " Nom d'utilisateur"), ("Invalid port", "Port invalide"), - ("Closed manually by the peer", "Fermé manuellement par la machine distante"), + ("Closed manually by the peer", "Fermé manuellement par l'appareil distant"), ("Enable remote configuration modification", "Autoriser la modification de la configuration à distance"), ("Run without install", "Exécuter sans installer"), ("Connect via relay", "Connexion via relais"), @@ -223,12 +223,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Verification code", "Code de vérification"), ("verification_tip", "Un nouvel appareil a été détecté et un code de vérification a été envoyé à l'adresse e-mail enregistrée, entrez le code de vérification pour continuer la connexion."), ("Logout", "Déconnexion"), - ("Tags", "Étiqueter"), + ("Tags", "Étiquettes"), ("Search ID", "Rechercher un ID"), ("whitelist_sep", "Vous pouvez utiliser une virgule, un point-virgule, un espace ou une nouvelle ligne comme séparateur"), ("Add ID", "Ajouter un ID"), ("Add Tag", "Ajouter une balise"), - ("Unselect all tags", "Désélectionner toutes les balises"), + ("Unselect all tags", "Désélectionner toutes les étiquettes"), ("Network error", "Erreur réseau"), ("Username missed", "Nom d'utilisateur manquant"), ("Password missed", "Mot de passe manquant"), @@ -301,9 +301,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Succeeded", "Succès"), ("Someone turns on privacy mode, exit", "Quelqu'un active le mode de confidentialité, quittez"), ("Unsupported", "Non pris en charge"), - ("Peer denied", "Machine distante refusée"), + ("Peer denied", "Appareil distant refusé"), ("Please install plugins", "Veuillez installer les plugins"), - ("Peer exit", "Machine distante déconnectée"), + ("Peer exit", "Appareil distant déconnecté"), ("Failed to turn off", "Échec de la désactivation"), ("Turned off", "Désactivé"), ("In privacy mode", "en mode privé"), @@ -382,7 +382,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Write a message", "Ecrire un message"), ("Prompt", ""), ("Please wait for confirmation of UAC...", "Veuillez attendre la confirmation de l'UAC..."), - ("elevated_foreground_window_tip", "La fenêtre actuelle que la machine distante nécessite des privilèges plus élevés pour fonctionner, elle ne peut donc pas être atteinte par la souris et le clavier. Vous pouvez demander à l'utilisateur distant de réduire la fenêtre actuelle ou de cliquer sur le bouton d'élévation dans la fenêtre de gestion des connexions. Pour éviter ce problème, il est recommandé d'installer le logiciel sur l'appareil distant."), + ("elevated_foreground_window_tip", "La fenêtre actuelle que l'appareil distant nécessite des privilèges plus élevés pour fonctionner, elle ne peut donc pas être atteinte par la souris et le clavier. Vous pouvez demander à l'utilisateur distant de réduire la fenêtre actuelle ou de cliquer sur le bouton d'élévation dans la fenêtre de gestion des connexions. Pour éviter ce problème, il est recommandé d'installer le logiciel sur l'appareil distant."), ("Disconnected", "Déconnecté"), ("Other", "Divers"), ("Confirm before closing multiple tabs", "Confirmer avant de fermer plusieurs onglets"), @@ -392,7 +392,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland nécessite Ubuntu 21.04 ou une version supérieure."), ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland nécessite une version supérieure de la distribution Linux. Veuillez essayer le bureau X11 ou changer votre système d'exploitation."), ("JumpLink", "Afficher"), - ("Please Select the screen to be shared(Operate on the peer side).", "Veuillez sélectionner l'écran à partager (côté machine distante)."), + ("Please Select the screen to be shared(Operate on the peer side).", "Veuillez sélectionner l'écran à partager (côté appareil distant)."), ("Show RustDesk", "Afficher RustDesk"), ("This PC", "Ce PC"), ("or", "ou"), @@ -454,7 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Voice call", "Appel voix"), ("Text chat", "Conversation textuelfle"), ("Stop voice call", "Stopper l'appel voix"), - ("relay_hint_tip", "Il se peut qu'il ne doit pas possible de se connecter directement, vous pouvez essayer de vous connecter via un relais. \nEn outre, si vous souhaitez utiliser directement le relais, vous pouvez ajouter le suffixe \"/r\" à l'ID ou sélectionner l'option \"Toujours se connecter via le relais\" dans la fiche pair."), + ("relay_hint_tip", "Il se peut qu'il ne doit pas possible de se connecter directement, vous pouvez essayer de vous connecter via un relais. \nEn outre, si vous souhaitez utiliser directement le relais, vous pouvez ajouter le suffixe \"/r\" à l'ID ou sélectionner l'option \"Toujours se connecter via le relais\" dans la fiche appareils distants."), ("Reconnect", "Se reconnecter"), ("Codec", "Codec"), ("Resolution", "Résolution"), @@ -470,14 +470,14 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Maximize", "Maximiser"), ("Your Device", "Votre appareil"), ("empty_recent_tip", "Oups, pas de sessions récentes!\nIl est temps d'en prévoir une nouvelle."), - ("empty_favorite_tip", "Vous n'avez pas encore de pairs favoris?\nTrouvons quelqu'un avec qui vous connecter et ajoutez-le à vos favoris!"), - ("empty_lan_tip", "Oh non, il semble que nous n'ayons pas encore de pairs découverts."), - ("empty_address_book_tip", "Ouh là là! il semble qu'il n'y ait actuellement aucun pair répertorié dans votre carnet d'adresses."), + ("empty_favorite_tip", "Vous n'avez pas encore d'appareils distants favorits?\nTrouvons quelqu'un avec qui vous connecter et ajoutez-la à vos favoris!"), + ("empty_lan_tip", "Oh non, il semble que nous n'ayons pas encore d'appareil réseaux local découverts."), + ("empty_address_book_tip", "Ouh là là! il semble qu'il n'y ait actuellement aucun appareil distant répertorié dans votre carnet d'adresses."), ("eg: admin", "ex: admin"), ("Empty Username", "Nom d'utilisation non spécifié"), ("Empty Password", "Mot de passe non spécifié"), ("Me", "Moi"), - ("identical_file_tip", "Ce fichier est identique à celui du pair."), + ("identical_file_tip", "Ce fichier est identique à celui de l'appareil distant."), ("show_monitors_tip", "Afficher les moniteurs dans la barre d'outils"), ("View Mode", "Mode vue"), ("login_linux_tip", "Se connecter au compte Linux distant"), @@ -498,8 +498,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Fingerprint", "Empreinte digitale"), ("Copy Fingerprint", "Copier empreinte digitale"), ("no fingerprints", "Pas d'empreintes digitales"), - ("Select a peer", "Sélectionnez la machine distante"), - ("Select peers", "Sélectionnez des machines distantes"), + ("Select a peer", "Sélectionnez l'appareil distant"), + ("Select peers", "Sélectionnez des appareils distants"), ("Plugins", "Plugins"), ("Uninstall", "Désinstaller"), ("Update", "Mise à jour"), @@ -523,7 +523,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Stop", "Stopper"), ("exceed_max_devices", "Vous avez atteint le nombre maximal d'appareils gérés."), ("Sync with recent sessions", "Synchroniser avec les sessions récentes"), - ("Sort tags", "Trier les Tags"), + ("Sort tags", "Trier les étiquettes"), ("Open connection in new tab", "Ouvrir la connexion dans un nouvel onglet"), ("Move tab to new window", "Déplacer l'onglet vers une nouvelle fenêtre"), ("Can not be empty", "Ne peux pas être vide"), @@ -534,7 +534,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Grid View", "Vue Grille"), ("List View", "Vue Liste"), ("Select", "Sélectionner"), - ("Toggle Tags", "Basculer vers les Tags"), + ("Toggle Tags", "Basculer vers les étiquettes"), ("pull_ab_failed_tip", "Impossible d'actualiser le carnet d'adresses"), ("push_ab_failed_tip", "Échec de la synchronisation du carnet d'adresses"), ("synced_peer_readded_tip", "Les appareils qui étaient présents dans les sessions récentes seront synchronisés avec le carnet d'adresses."), From d8ace7e38bd598aba3c1bc8ae15e423d190e660c Mon Sep 17 00:00:00 2001 From: Jimmy GALLAND Date: Mon, 21 Aug 2023 22:42:16 +0200 Subject: [PATCH 504/612] fix peer tab page count selected translate --- flutter/lib/common/widgets/peer_tab_page.dart | 2 +- src/lang/fr.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 120ea7ff1..3f4161477 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -426,7 +426,7 @@ class _PeerTabPageState extends State Widget selectionCount(int count) { return Align( alignment: Alignment.center, - child: Text('$count selected'), + child: Text('$count ${translate('Selected')}'), ); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index f9d711ccd..fdf9cdf51 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -274,7 +274,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Chat", "Discuter"), ("Total", "Total"), ("items", "éléments"), - ("Selected", "Sélectionné"), + ("Selected", "Sélectionné(s)"), ("Screen Capture", "Capture d'écran"), ("Input Control", "Contrôle de saisie"), ("Audio Capture", "Capture audio"), From 83d9cb55f1ae5e622ae689ac8f136d283e870e5b Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 22 Aug 2023 08:54:01 +0800 Subject: [PATCH 505/612] filter tags with union, not intersection Signed-off-by: 21pages --- flutter/lib/common/widgets/peers_view.dart | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/flutter/lib/common/widgets/peers_view.dart b/flutter/lib/common/widgets/peers_view.dart index b4fd8e1d4..0e4898fc2 100644 --- a/flutter/lib/common/widgets/peers_view.dart +++ b/flutter/lib/common/widgets/peers_view.dart @@ -421,15 +421,12 @@ class AddressBookPeersView extends BasePeersView { if (selectedTags.isEmpty) { return true; } - if (idents.isEmpty) { - return false; - } for (final tag in selectedTags) { - if (!idents.contains(tag)) { - return false; + if (idents.contains(tag)) { + return true; } } - return true; + return false; } } From a48532d0b1c36f5fa1b5933e8bee3f52b50b9ebd Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 22 Aug 2023 09:01:11 +0800 Subject: [PATCH 506/612] fix mobile missing tag color Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_card.dart | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 889ba3fbe..fd558c68c 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -66,7 +66,7 @@ class _PeerCardState extends State<_PeerCard> final name = '${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}'; final PeerTabModel peerTabModel = Provider.of(context); - return Card( + final child = Card( margin: EdgeInsets.symmetric(horizontal: 2), child: GestureDetector( onTap: () { @@ -115,6 +115,23 @@ class _PeerCardState extends State<_PeerCard> ], ), ))); + final colors = _frontN(peer.tags, 25).map((e) => str2color2(e)).toList(); + return Tooltip( + message: peer.tags.isNotEmpty + ? '${translate('Tags')}: ${peer.tags.join(', ')}' + : '', + child: Stack(children: [ + child, + if (colors.isNotEmpty) + Positioned( + top: 2, + right: 10, + child: CustomPaint( + painter: TagPainter(radius: 3, colors: colors), + ), + ) + ]), + ); } Widget _buildDesktop() { From 5a6a7e8d82c5e0022ce72731856331fa7769511e Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 22 Aug 2023 11:41:57 +0800 Subject: [PATCH 507/612] mobile use _buildPeerTile Signed-off-by: 21pages --- flutter/lib/common/widgets/peer_card.dart | 224 +++++++++------------- 1 file changed, 93 insertions(+), 131 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index fd558c68c..8bb4fdfdb 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -63,75 +63,29 @@ class _PeerCardState extends State<_PeerCard> Widget _buildMobile() { final peer = super.widget.peer; - final name = - '${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}'; final PeerTabModel peerTabModel = Provider.of(context); - final child = Card( + return Card( margin: EdgeInsets.symmetric(horizontal: 2), child: GestureDetector( - onTap: () { - if (peerTabModel.multiSelectionMode) { - peerTabModel.select(peer); - } else { - if (!isWebDesktop) { - connectInPeerTab(context, peer.id, widget.tab); - } - } - }, - onDoubleTap: isWebDesktop - ? () => connectInPeerTab(context, peer.id, widget.tab) - : null, - onLongPress: () { + onTap: () { + if (peerTabModel.multiSelectionMode) { peerTabModel.select(peer); - }, - child: Container( + } else { + if (!isWebDesktop) { + connectInPeerTab(context, peer.id, widget.tab); + } + } + }, + onDoubleTap: isWebDesktop + ? () => connectInPeerTab(context, peer.id, widget.tab) + : null, + onLongPress: () { + peerTabModel.select(peer); + }, + child: Container( padding: EdgeInsets.only(left: 12, top: 8, bottom: 8), - child: Row( - children: [ - Container( - width: 50, - height: 50, - decoration: BoxDecoration( - color: str2color('${peer.id}${peer.platform}', 0x7f), - borderRadius: BorderRadius.circular(4), - ), - padding: const EdgeInsets.all(6), - child: getPlatformImage(peer.platform)), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row(children: [ - getOnline(4, peer.online), - Text(peer.alias.isEmpty - ? formatID(peer.id) - : peer.alias) - ]), - Text(name) - ], - ).paddingOnly(left: 8.0), - ), - checkBoxOrActionMoreMobile(peer), - ], - ), - ))); - final colors = _frontN(peer.tags, 25).map((e) => str2color2(e)).toList(); - return Tooltip( - message: peer.tags.isNotEmpty - ? '${translate('Tags')}: ${peer.tags.join(', ')}' - : '', - child: Stack(children: [ - child, - if (colors.isNotEmpty) - Positioned( - top: 2, - right: 10, - child: CustomPaint( - painter: TagPainter(radius: 3, colors: colors), - ), - ) - ]), - ); + child: _buildPeerTile(context, peer, null)), + )); } Widget _buildDesktop() { @@ -178,87 +132,95 @@ class _PeerCardState extends State<_PeerCard> } Widget _buildPeerTile( - BuildContext context, Peer peer, Rx deco) { + BuildContext context, Peer peer, Rx? deco) { final name = '${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}'; final greyStyle = TextStyle( fontSize: 11, color: Theme.of(context).textTheme.titleLarge?.color?.withOpacity(0.6)); - final child = Obx( - () => Container( - foregroundDecoration: deco.value, - child: Row( - mainAxisSize: MainAxisSize.max, - children: [ - Container( - decoration: BoxDecoration( - color: str2color('${peer.id}${peer.platform}', 0x7f), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(_tileRadius), - bottomLeft: Radius.circular(_tileRadius), - ), - ), - alignment: Alignment.center, - width: 42, - child: getPlatformImage(peer.platform, size: 30).paddingAll(6), - ), - Expanded( - child: Container( - decoration: BoxDecoration( - color: Theme.of(context).colorScheme.background, - borderRadius: BorderRadius.only( - topRight: Radius.circular(_tileRadius), - bottomRight: Radius.circular(_tileRadius), + final child = Row( + mainAxisSize: MainAxisSize.max, + children: [ + Container( + decoration: BoxDecoration( + color: str2color('${peer.id}${peer.platform}', 0x7f), + borderRadius: isMobile + ? BorderRadius.circular(_tileRadius) + : BorderRadius.only( + topLeft: Radius.circular(_tileRadius), + bottomLeft: Radius.circular(_tileRadius), ), - ), - child: Row( - children: [ - Expanded( - child: Column( - children: [ - Row(children: [ - getOnline(8, peer.online), - Expanded( - child: Text( - peer.alias.isEmpty - ? formatID(peer.id) - : peer.alias, - overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.titleSmall, - )), - ]).marginOnly(bottom: 0, top: 2), - Align( - alignment: Alignment.centerLeft, - child: Text( - name, - style: greyStyle, - textAlign: TextAlign.start, - overflow: TextOverflow.ellipsis, - ), - ), - ], - ).marginOnly(top: 2), - ), - checkBoxOrActionMoreDesktop(peer, isTile: true), - ], - ).paddingOnly(left: 10.0, top: 3.0), - ), - ) - ], + ), + alignment: Alignment.center, + width: isMobile ? 50 : 42, + height: isMobile ? 50 : null, + child: getPlatformImage(peer.platform, size: isMobile ? 38 : 30) + .paddingAll(6), ), - ), + Expanded( + child: Container( + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.background, + borderRadius: BorderRadius.only( + topRight: Radius.circular(_tileRadius), + bottomRight: Radius.circular(_tileRadius), + ), + ), + child: Row( + children: [ + Expanded( + child: Column( + children: [ + Row(children: [ + getOnline(isMobile ? 4 : 8, peer.online), + Expanded( + child: Text( + peer.alias.isEmpty ? formatID(peer.id) : peer.alias, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.titleSmall, + )), + ]).marginOnly(top: isMobile ? 0 : 2), + Align( + alignment: Alignment.centerLeft, + child: Text( + name, + style: isMobile ? null : greyStyle, + textAlign: TextAlign.start, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ).marginOnly(top: 2), + ), + isMobile + ? checkBoxOrActionMoreMobile(peer) + : checkBoxOrActionMoreDesktop(peer, isTile: true), + ], + ).paddingOnly(left: 10.0, top: 3.0), + ), + ) + ], ); final colors = _frontN(peer.tags, 25).map((e) => str2color2(e)).toList(); return Tooltip( - message: peer.tags.isNotEmpty - ? '${translate('Tags')}: ${peer.tags.join(', ')}' - : '', + message: isMobile + ? '' + : peer.tags.isNotEmpty + ? '${translate('Tags')}: ${peer.tags.join(', ')}' + : '', child: Stack(children: [ - child, + deco == null + ? child + : Obx( + () => Container( + foregroundDecoration: deco.value, + child: child, + ), + ), if (colors.isNotEmpty) Positioned( top: 2, - right: 10, + right: isMobile ? 20 : 10, child: CustomPaint( painter: TagPainter(radius: 3, colors: colors), ), From b27c3ff169b56fd6d44c87179897f10c695c4c0b Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 22 Aug 2023 19:07:01 +0800 Subject: [PATCH 508/612] change tag color Signed-off-by: 21pages --- flutter/lib/common.dart | 16 ++- flutter/lib/common/widgets/address_book.dart | 22 +++- flutter/lib/common/widgets/peer_card.dart | 6 +- flutter/lib/models/ab_model.dart | 117 ++++++++++++------- flutter/pubspec.yaml | 1 + libs/hbb_common/src/config.rs | 6 + src/lang/ca.rs | 1 + src/lang/cn.rs | 1 + src/lang/cs.rs | 1 + src/lang/da.rs | 1 + src/lang/de.rs | 1 + src/lang/el.rs | 1 + src/lang/eo.rs | 1 + src/lang/es.rs | 1 + src/lang/fa.rs | 1 + src/lang/fr.rs | 1 + src/lang/hu.rs | 1 + src/lang/id.rs | 1 + src/lang/it.rs | 1 + src/lang/ja.rs | 1 + src/lang/ko.rs | 1 + src/lang/kz.rs | 1 + src/lang/lt.rs | 1 + src/lang/nl.rs | 1 + src/lang/pl.rs | 1 + src/lang/pt_PT.rs | 1 + src/lang/ptbr.rs | 1 + src/lang/ro.rs | 1 + src/lang/ru.rs | 1 + src/lang/sk.rs | 1 + src/lang/sl.rs | 1 + src/lang/sq.rs | 1 + src/lang/sr.rs | 1 + src/lang/sv.rs | 1 + src/lang/template.rs | 1 + src/lang/th.rs | 1 + src/lang/tr.rs | 1 + src/lang/tw.rs | 1 + src/lang/ua.rs | 1 + src/lang/vn.rs | 1 + 40 files changed, 152 insertions(+), 50 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index eb21ac821..48323d5fa 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1077,7 +1077,7 @@ Color str2color(String str, [alpha = 0xFF]) { return Color((hash & 0xFF7FFF) | (alpha << 24)); } -Color str2color2(String str, [alpha = 0xFF]) { +Color str2color2(String str, {List existing = const []}) { Map colorMap = { "red": Colors.red, "green": Colors.green, @@ -1094,10 +1094,10 @@ Color str2color2(String str, [alpha = 0xFF]) { }; final color = colorMap[str.toLowerCase()]; if (color != null) { - return color.withAlpha(alpha); + return color.withAlpha(0xFF); } if (str.toLowerCase() == 'yellow') { - return Colors.yellow.withAlpha(alpha); + return Colors.yellow.withAlpha(0xFF); } var hash = 0; for (var i = 0; i < str.length; i++) { @@ -1105,7 +1105,15 @@ Color str2color2(String str, [alpha = 0xFF]) { } List colorList = colorMap.values.toList(); hash = hash % colorList.length; - return colorList[hash].withAlpha(alpha); + var result = colorList[hash].withAlpha(0xFF); + if (existing.contains(result.value)) { + Color? notUsed = + colorList.firstWhereOrNull((e) => !existing.contains(e.value)); + if (notUsed != null) { + result = notUsed; + } + } + return result; } const K = 1024; diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index 86a5b2c55..292266ae7 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -7,6 +7,7 @@ import 'package:flutter_hbb/models/ab_model.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import '../../desktop/widgets/material_mod_popup_menu.dart' as mod_menu; import 'package:get/get.dart'; +import 'package:flex_color_picker/flex_color_picker.dart'; import '../../common.dart'; import 'dialog.dart'; @@ -513,7 +514,7 @@ class AddressBookTag extends StatelessWidget { child: Obx(() => Container( decoration: BoxDecoration( color: tags.contains(name) - ? str2color2(name, 0xFF) + ? gFFI.abModel.getTagColor(name) : Theme.of(context).colorScheme.background, borderRadius: BorderRadius.circular(4)), margin: const EdgeInsets.symmetric(horizontal: 4.0, vertical: 4.0), @@ -528,7 +529,7 @@ class AddressBookTag extends StatelessWidget { shape: BoxShape.circle, color: tags.contains(name) ? Colors.white - : str2color2(name)), + : gFFI.abModel.getTagColor(name)), ).marginOnly(right: radius / 2), Expanded( child: Text(name, @@ -568,6 +569,23 @@ class AddressBookTag extends StatelessWidget { Future.delayed(Duration.zero, () => Get.back()); }); }), + getEntry(translate(translate('Change Color')), () async { + final model = gFFI.abModel; + Color oldColor = model.getTagColor(name); + Color newColor = await showColorPickerDialog( + context, + oldColor, + pickersEnabled: { + ColorPickerType.accent: false, + ColorPickerType.wheel: true, + }, + showColorCode: true, + ); + if (oldColor != newColor) { + model.setTagColor(name, newColor); + model.pushAb(); + } + }), getEntry(translate("Delete"), () { gFFI.abModel.deleteTag(name); gFFI.abModel.pushAb(); diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 8bb4fdfdb..74f0dcb31 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -201,7 +201,8 @@ class _PeerCardState extends State<_PeerCard> ) ], ); - final colors = _frontN(peer.tags, 25).map((e) => str2color2(e)).toList(); + final colors = + _frontN(peer.tags, 25).map((e) => gFFI.abModel.getTagColor(e)).toList(); return Tooltip( message: isMobile ? '' @@ -311,7 +312,8 @@ class _PeerCardState extends State<_PeerCard> ), ); - final colors = _frontN(peer.tags, 25).map((e) => str2color2(e)).toList(); + final colors = + _frontN(peer.tags, 25).map((e) => gFFI.abModel.getTagColor(e)).toList(); return Tooltip( message: peer.tags.isNotEmpty ? '${translate('Tags')}: ${peer.tags.join(', ')}' diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index f5e217472..e91e42ef9 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -28,6 +28,7 @@ class AbModel { final pullError = "".obs; final pushError = "".obs; final tags = [].obs; + final RxMap tagColors = Map.fromEntries([]).obs; final peers = List.empty(growable: true).obs; final sortTags = shouldSortTags().obs; final retrying = false.obs; @@ -80,10 +81,11 @@ class AbModel { if (resp.body.toLowerCase() == "null") { // normal reply, emtpy ab return null tags.clear(); + tagColors.clear(); peers.clear(); } else if (resp.body.isNotEmpty) { Map json = - _jsonDecode(utf8.decode(resp.bodyBytes), resp.statusCode); + _jsonDecodeResp(utf8.decode(resp.bodyBytes), resp.statusCode); if (json.containsKey('error')) { throw json['error']; } else if (json.containsKey('data')) { @@ -93,26 +95,7 @@ class AbModel { } catch (e) {} final data = jsonDecode(json['data']); if (data != null) { - final oldOnlineIDs = - peers.where((e) => e.online).map((e) => e.id).toList(); - tags.clear(); - peers.clear(); - if (data['tags'] is List) { - tags.value = data['tags']; - } - if (data['peers'] is List) { - for (final peer in data['peers']) { - peers.add(Peer.fromJson(peer)); - } - } - if (isFull(false)) { - peers.removeRange(licensedDevices, peers.length); - } - // restore online - peers - .where((e) => oldOnlineIDs.contains(e.id)) - .map((e) => e.online = true) - .toList(); + _deserialize(data); _saveCache(); // save on success } } @@ -242,10 +225,7 @@ class AbModel { final api = "${await bind.mainGetApiServer()}/api/ab"; var authHeaders = getHttpHeaders(); authHeaders['Content-Type'] = "application/json"; - final peersJsonData = peers.map((e) => e.toAbUploadJson()).toList(); - final body = jsonEncode({ - "data": jsonEncode({"tags": tags, "peers": peersJsonData}) - }); + final body = jsonEncode(_serialize()); http.Response resp; // support compression if (licensedDevices > 0 && body.length > 1024) { @@ -261,7 +241,7 @@ class AbModel { ret = true; _saveCache(); } else { - Map json = _jsonDecode(resp.body, resp.statusCode); + Map json = _jsonDecodeResp(resp.body, resp.statusCode); if (json.containsKey('error')) { throw json['error']; } else if (resp.statusCode == 200) { @@ -318,6 +298,7 @@ class AbModel { void deleteTag(String tag) { gFFI.abModel.selectedTags.remove(tag); tags.removeWhere((element) => element == tag); + tagColors.remove(tag); for (var peer in peers) { if (peer.tags.isEmpty) { continue; @@ -353,6 +334,11 @@ class AbModel { } }).toList(); } + int? oldColor = tagColors[oldTag]; + if (oldColor != null) { + tagColors.remove(oldTag); + tagColors.addAll({newTag: oldColor}); + } } void unsetSelectedTags() { @@ -368,6 +354,20 @@ class AbModel { } } + Color getTagColor(String tag) { + int? colorValue = tagColors[tag]; + if (colorValue != null) { + return Color(colorValue); + } + return str2color2(tag, existing: tagColors.values.toList()); + } + + setTagColor(String tag, Color color) { + if (tags.contains(tag)) { + tagColors[tag] = color.value; + } + } + void merge(Peer r, Peer p) { p.hash = r.hash.isEmpty ? p.hash : r.hash; p.username = r.username.isEmpty ? p.username : r.username; @@ -467,12 +467,10 @@ class AbModel { _saveCache() { try { - final peersJsonData = peers.map((e) => e.toAbUploadJson()).toList(); - final m = { + var m = _serialize(); + m.addAll({ "access_token": bind.mainGetLocalOption(key: 'access_token'), - "peers": peersJsonData, - "tags": tags.map((e) => e.toString()).toList(), - }; + }); bind.mainSaveAb(json: jsonEncode(m)); } catch (e) { debugPrint('ab save:$e'); @@ -488,22 +486,13 @@ class AbModel { final cache = await bind.mainLoadAb(); final data = jsonDecode(cache); if (data == null || data['access_token'] != access_token) return; - tags.clear(); - peers.clear(); - if (data['tags'] is List) { - tags.value = data['tags']; - } - if (data['peers'] is List) { - for (final peer in data['peers']) { - peers.add(Peer.fromJson(peer)); - } - } + _deserialize(data); } catch (e) { debugPrint("load ab cache: $e"); } } - Map _jsonDecode(String body, int statusCode) { + Map _jsonDecodeResp(String body, int statusCode) { try { Map json = jsonDecode(body); return json; @@ -516,6 +505,50 @@ class AbModel { } } + Map _serialize() { + final peersJsonData = peers.map((e) => e.toAbUploadJson()).toList(); + final tagColorJsonData = jsonEncode(tagColors); + return { + "tags": tags, + "peers": peersJsonData, + "tag_colors": tagColorJsonData + }; + } + + _deserialize(dynamic data) { + if (data == null) return; + final oldOnlineIDs = peers.where((e) => e.online).map((e) => e.id).toList(); + tags.clear(); + tagColors.clear(); + peers.clear(); + if (data['tags'] is List) { + tags.value = data['tags']; + } + if (data['peers'] is List) { + for (final peer in data['peers']) { + peers.add(Peer.fromJson(peer)); + } + } + if (isFull(false)) { + peers.removeRange(licensedDevices, peers.length); + } + // restore online + peers + .where((e) => oldOnlineIDs.contains(e.id)) + .map((e) => e.online = true) + .toList(); + if (data['tag_colors'] is String) { + Map map = jsonDecode(data['tag_colors']); + tagColors.value = Map.from(map); + } + // add color to tag + final tagsWithoutColor = + tags.toList().where((e) => !tagColors.containsKey(e)).toList(); + for (var t in tagsWithoutColor) { + tagColors[t] = str2color2(t, existing: tagColors.values.toList()).value; + } + } + reSyncToast(Future future) { if (!shouldSyncAb()) return; Future.delayed(Duration.zero, () async { diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index fc0be7018..04af8f92f 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -97,6 +97,7 @@ dependencies: dropdown_button2: ^2.0.0 uuid: ^3.0.7 auto_size_text_field: ^2.2.1 + flex_color_picker: ^3.3.0 dev_dependencies: icons_launcher: ^2.0.4 diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 2cb0072c5..f40ff1463 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -1525,6 +1525,12 @@ pub struct Ab { pub peers: Vec, #[serde(default, deserialize_with = "deserialize_vec_string")] pub tags: Vec, + #[serde( + default, + deserialize_with = "deserialize_string", + skip_serializing_if = "String::is_empty" + )] + pub tag_colors: String, } impl Ab { diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 739d5646b..4801abcae 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 34ecdb276..3313537d1 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "未成功获取地址簿"), ("push_ab_failed_tip", "未成功上传地址簿"), ("synced_peer_readded_tip", "最近会话中存在的设备将会被重新同步到地址簿。"), + ("Change Color", "更改颜色"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index e32246da7..3d913b0d6 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Nepodařilo se obnovit adresář"), ("push_ab_failed_tip", "Nepodařilo se synchronizovat adresář se serverem"), ("synced_peer_readded_tip", "Zařízení, která byla přítomna v posledních relacích, budou synchronizována zpět do adresáře."), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 830cb0c45..afaf98386 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 53a898a6a..8eb066f30 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Aktualisierung des Adressbuchs fehlgeschlagen"), ("push_ab_failed_tip", "Synchronisierung des Adressbuchs mit dem Server fehlgeschlagen"), ("synced_peer_readded_tip", "Die Geräte, die in den letzten Sitzungen vorhanden waren, werden erneut zum Adressbuch hinzugefügt."), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 46f816677..56805e574 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 8d7f1c873..bcb467839 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index aabbbfd27..5384dfead 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "No se ha podido refrescar el directorio"), ("push_ab_failed_tip", "No se ha podido sincronizar el directorio con el servidor"), ("synced_peer_readded_tip", "Los dispositivos presentes en sesiones recientes se sincronizarán con el directorio."), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index eeb36af3b..fab82f661 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index fdf9cdf51..24cc268ee 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Impossible d'actualiser le carnet d'adresses"), ("push_ab_failed_tip", "Échec de la synchronisation du carnet d'adresses"), ("synced_peer_readded_tip", "Les appareils qui étaient présents dans les sessions récentes seront synchronisés avec le carnet d'adresses."), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 2da6bd72e..aaf888d23 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 45cb3f1c8..a7b12f2ed 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Gagal memuat ulang buku alamat"), ("push_ab_failed_tip", "Gagal menyinkronkan buku alamat ke server"), ("synced_peer_readded_tip", "Perangkat yang terdaftar dalam sesi-sesi terbaru akan di-sinkronkan kembali ke buku alamat."), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 4febb9e00..3b8bd8416 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Impossibile aggiornare la rubrica"), ("push_ab_failed_tip", "Impossibile sincronizzare la rubrica con il server"), ("synced_peer_readded_tip", "I dispositivi presenti nelle sessioni recenti saranno sincronizzati di nuovo nella rubrica."), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 4c4d6e141..1a9e8da4f 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 91e49be3a..28c34f7e2 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 807b74ba4..2fb2b8b92 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 0cd258b9e..6a8c7e9f5 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index c37e95c89..3b08427df 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 923dadc22..67b9d188a 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 3eb850227..416600eeb 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 40360be5a..98e469f7e 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 50ae39902..f4d44b3ae 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 5830525d9..37fdb2060 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Невозможно обновить адресную книгу"), ("push_ab_failed_tip", "Невозможно синхронизировать адресную книгу с сервером"), ("synced_peer_readded_tip", "Устройства, присутствовавшие в последних сеансах, будут синхронизированы с адресной книгой."), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 4b7ced046..8421bd2b0 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 6b356a238..f4c5ff385 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 5eb5c0fb4..11e3e1ccb 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index f642bc124..494999475 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 76ea47cd4..4c0f73f5a 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 06591d147..ee7fb0d46 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 6e21420fa..e6f12d85e 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 15aaac5f7..bb3ab5de6 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 6d9d8089c..8f28395d3 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "未成功獲取地址簿"), ("push_ab_failed_tip", "未成功上傳地址簿"), ("synced_peer_readded_tip", "最近會話中存在的設備將會被重新同步到地址簿。"), + ("Change Color", "更改顏色"), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index acdf8f106..69ca7c2da 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 8aeafd930..7a0cce355 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -538,5 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", ""), ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), + ("Change Color", ""), ].iter().cloned().collect(); } From 7f7d5d9f4c9cf8e3eb91116663fbf250c298acab Mon Sep 17 00:00:00 2001 From: dignow Date: Tue, 22 Aug 2023 21:52:23 +0800 Subject: [PATCH 509/612] oidc, add default gitlab icon Signed-off-by: dignow --- flutter/assets/auth-gitlab.svg | 1 + flutter/lib/common/widgets/login.dart | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 flutter/assets/auth-gitlab.svg diff --git a/flutter/assets/auth-gitlab.svg b/flutter/assets/auth-gitlab.svg new file mode 100644 index 000000000..c4ec9d2ec --- /dev/null +++ b/flutter/assets/auth-gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 7c17e9dea..b26397b94 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -14,6 +14,7 @@ import './dialog.dart'; const kOpSvgList = [ 'github', + 'gitlab', 'google', 'apple', 'okta', @@ -72,6 +73,11 @@ class ButtonOP extends StatelessWidget { @override Widget build(BuildContext context) { + final opLabel = { + 'github': 'GitHub', + 'gitlab': 'GitLab' + }[op.toLowerCase()] ?? + toCapitalized(op); return Row(children: [ Container( height: height, @@ -97,8 +103,7 @@ class ButtonOP extends StatelessWidget { child: FittedBox( fit: BoxFit.scaleDown, child: Center( - child: Text( - '${translate("Continue with")} ${op.toLowerCase() == "github" ? "GitHub" : toCapitalized(op)}')), + child: Text('${translate("Continue with")} $opLabel')), ), ), ], From 6666dece5d58e93b83c25530d9b9d8070dc135d3 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 22 Aug 2023 22:02:42 +0800 Subject: [PATCH 510/612] svgo gitlab.svg --- flutter/assets/auth-gitlab.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/assets/auth-gitlab.svg b/flutter/assets/auth-gitlab.svg index c4ec9d2ec..9402e1329 100644 --- a/flutter/assets/auth-gitlab.svg +++ b/flutter/assets/auth-gitlab.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From 9cb778618209b6f43a9cf94fea7500aa39648578 Mon Sep 17 00:00:00 2001 From: SergeyMy <131688106+SergeyMy@users.noreply.github.com> Date: Tue, 22 Aug 2023 19:26:59 +0500 Subject: [PATCH 511/612] Update ru.rs --- src/lang/ru.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 37fdb2060..74192a872 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -538,6 +538,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Невозможно обновить адресную книгу"), ("push_ab_failed_tip", "Невозможно синхронизировать адресную книгу с сервером"), ("synced_peer_readded_tip", "Устройства, присутствовавшие в последних сеансах, будут синхронизированы с адресной книгой."), - ("Change Color", ""), + ("Change Color", "Изменить цвет"), ].iter().cloned().collect(); } From 8427b03a394ff5f9f372ee224b10d697052c6737 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Wed, 23 Aug 2023 00:13:23 +0530 Subject: [PATCH 512/612] Using github latest release url to check for software update Signed-off-by: Sahil Yeole --- src/common.rs | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/src/common.rs b/src/common.rs index 011ca0524..5ad92d914 100644 --- a/src/common.rs +++ b/src/common.rs @@ -831,30 +831,19 @@ pub fn check_software_update() { #[tokio::main(flavor = "current_thread")] async fn check_software_update_() -> hbb_common::ResultType<()> { - sleep(3.).await; + let url = "https://github.com/rustdesk/rustdesk/releases/latest"; + let latest_release_response = reqwest::get(url).await?; + let latest_release_version = latest_release_response + .url() + .path() + .rsplit('/') + .next() + .unwrap(); - let rendezvous_server = format!("rs-sg.rustdesk.com:{}", config::RENDEZVOUS_PORT); - let (mut socket, rendezvous_server) = - socket_client::new_udp_for(&rendezvous_server, CONNECT_TIMEOUT).await?; + let response_url = latest_release_response.url().to_string(); - let mut msg_out = RendezvousMessage::new(); - msg_out.set_software_update(SoftwareUpdate { - url: crate::VERSION.to_owned(), - ..Default::default() - }); - socket.send(&msg_out, rendezvous_server).await?; - use hbb_common::protobuf::Message; - for _ in 0..2 { - if let Some(Ok((bytes, _))) = socket.next_timeout(READ_TIMEOUT).await { - if let Ok(msg_in) = RendezvousMessage::parse_from_bytes(&bytes) { - if let Some(rendezvous_message::Union::SoftwareUpdate(su)) = msg_in.union { - let version = hbb_common::get_version_from_url(&su.url); - if get_version_number(&version) > get_version_number(crate::VERSION) { - *SOFTWARE_UPDATE_URL.lock().unwrap() = su.url; - } - } - } - } + if get_version_number(&latest_release_version) > get_version_number(crate::VERSION) { + *SOFTWARE_UPDATE_URL.lock().unwrap() = response_url; } Ok(()) } From f41cb0d81c67844786892dd32a28c029a4b0e990 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Wed, 23 Aug 2023 00:14:32 +0530 Subject: [PATCH 513/612] updated get_new_version for ui Signed-off-by: Sahil Yeole --- src/ui_interface.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 7e1b3a9bb..6c0d38354 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -594,7 +594,8 @@ pub fn current_is_wayland() -> bool { #[inline] pub fn get_new_version() -> String { - hbb_common::get_version_from_url(&*SOFTWARE_UPDATE_URL.lock().unwrap()) + // hbb_common::get_version_from_url(&*SOFTWARE_UPDATE_URL.lock().unwrap()) + (*SOFTWARE_UPDATE_URL.lock().unwrap().rsplit('/').next().unwrap_or("")).to_string() } #[inline] From d87ea854bc380b6307a9cc2572026ec5024d755b Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 23 Aug 2023 08:15:56 +0800 Subject: [PATCH 514/612] add ColorPicker translations Signed-off-by: 21pages --- flutter/lib/common/widgets/address_book.dart | 7 +++++++ flutter/lib/common/widgets/peer_card.dart | 5 +++-- src/lang/ca.rs | 2 ++ src/lang/cn.rs | 2 ++ src/lang/cs.rs | 2 ++ src/lang/da.rs | 2 ++ src/lang/de.rs | 2 ++ src/lang/el.rs | 2 ++ src/lang/eo.rs | 2 ++ src/lang/es.rs | 2 ++ src/lang/fa.rs | 2 ++ src/lang/fr.rs | 2 ++ src/lang/hu.rs | 2 ++ src/lang/id.rs | 2 ++ src/lang/it.rs | 2 ++ src/lang/ja.rs | 2 ++ src/lang/ko.rs | 2 ++ src/lang/kz.rs | 2 ++ src/lang/lt.rs | 2 ++ src/lang/nl.rs | 2 ++ src/lang/pl.rs | 2 ++ src/lang/pt_PT.rs | 2 ++ src/lang/ptbr.rs | 2 ++ src/lang/ro.rs | 2 ++ src/lang/ru.rs | 2 ++ src/lang/sk.rs | 2 ++ src/lang/sl.rs | 2 ++ src/lang/sq.rs | 2 ++ src/lang/sr.rs | 2 ++ src/lang/sv.rs | 2 ++ src/lang/template.rs | 2 ++ src/lang/th.rs | 2 ++ src/lang/tr.rs | 2 ++ src/lang/tw.rs | 2 ++ src/lang/ua.rs | 2 ++ src/lang/vn.rs | 2 ++ 36 files changed, 78 insertions(+), 2 deletions(-) diff --git a/flutter/lib/common/widgets/address_book.dart b/flutter/lib/common/widgets/address_book.dart index 292266ae7..4af74e319 100644 --- a/flutter/lib/common/widgets/address_book.dart +++ b/flutter/lib/common/widgets/address_book.dart @@ -579,6 +579,13 @@ class AddressBookTag extends StatelessWidget { ColorPickerType.accent: false, ColorPickerType.wheel: true, }, + pickerTypeLabels: { + ColorPickerType.primary: translate("Primary Color"), + ColorPickerType.wheel: translate("HSV Color"), + }, + actionButtons: ColorPickerActionButtons( + dialogOkButtonLabel: translate("OK"), + dialogCancelButtonLabel: translate("Cancel")), showColorCode: true, ); if (oldColor != newColor) { diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 74f0dcb31..a9d18b42c 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -735,11 +735,12 @@ abstract class BasePeerCard extends StatelessWidget { proc: () async { bool result = gFFI.abModel.changePassword(id, ''); await bind.mainForgetPassword(id: id); + bool toast = false; if (result) { - bool toast = tab == PeerTabIndex.ab; + toast = tab == PeerTabIndex.ab; gFFI.abModel.pushAb(toastIfFail: toast, toastIfSucc: toast); } - showToast(translate('Successful')); + if (!toast) showToast(translate('Successful')); }, padding: menuPadding, dismissOnClicked: true, diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 4801abcae..baf6992b9 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 3313537d1..8c20966c0 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", "未成功上传地址簿"), ("synced_peer_readded_tip", "最近会话中存在的设备将会被重新同步到地址簿。"), ("Change Color", "更改颜色"), + ("Primary Color", "基本色"), + ("HSV Color", "HSV 色"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 3d913b0d6..0e4d4db65 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", "Nepodařilo se synchronizovat adresář se serverem"), ("synced_peer_readded_tip", "Zařízení, která byla přítomna v posledních relacích, budou synchronizována zpět do adresáře."), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index afaf98386..c5540e75e 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 8eb066f30..c528acceb 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", "Synchronisierung des Adressbuchs mit dem Server fehlgeschlagen"), ("synced_peer_readded_tip", "Die Geräte, die in den letzten Sitzungen vorhanden waren, werden erneut zum Adressbuch hinzugefügt."), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 56805e574..4e065c803 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index bcb467839..c77126729 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 5384dfead..7bb24ac53 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", "No se ha podido sincronizar el directorio con el servidor"), ("synced_peer_readded_tip", "Los dispositivos presentes en sesiones recientes se sincronizarán con el directorio."), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index fab82f661..35207642a 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 24cc268ee..f9263d572 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", "Échec de la synchronisation du carnet d'adresses"), ("synced_peer_readded_tip", "Les appareils qui étaient présents dans les sessions récentes seront synchronisés avec le carnet d'adresses."), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index aaf888d23..722011788 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index a7b12f2ed..c8c343c5b 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", "Gagal menyinkronkan buku alamat ke server"), ("synced_peer_readded_tip", "Perangkat yang terdaftar dalam sesi-sesi terbaru akan di-sinkronkan kembali ke buku alamat."), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 3b8bd8416..22088a061 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", "Impossibile sincronizzare la rubrica con il server"), ("synced_peer_readded_tip", "I dispositivi presenti nelle sessioni recenti saranno sincronizzati di nuovo nella rubrica."), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 1a9e8da4f..b1da5d94c 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 28c34f7e2..a69b38e26 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 2fb2b8b92..ccca49561 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 6a8c7e9f5..873f5909a 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 3b08427df..2be2d5da2 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 67b9d188a..0391dd2f3 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 416600eeb..becb4c8ee 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 98e469f7e..704b56d1e 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index f4d44b3ae..2f248262b 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 37fdb2060..1c43912c6 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", "Невозможно синхронизировать адресную книгу с сервером"), ("synced_peer_readded_tip", "Устройства, присутствовавшие в последних сеансах, будут синхронизированы с адресной книгой."), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 8421bd2b0..9711586d3 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index f4c5ff385..f5f4f95f2 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 11e3e1ccb..e5d310ebb 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 494999475..480964e6e 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 4c0f73f5a..cf94e7064 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index ee7fb0d46..c71a30342 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index e6f12d85e..1ec47d26c 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index bb3ab5de6..3c3a10da2 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 8f28395d3..8ef8ca895 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", "未成功上傳地址簿"), ("synced_peer_readded_tip", "最近會話中存在的設備將會被重新同步到地址簿。"), ("Change Color", "更改顏色"), + ("Primary Color", "基本色"), + ("HSV Color", "HSV 色"), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 69ca7c2da..6be8c93b2 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 7a0cce355..d83d9ef42 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -539,5 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", ""), ("synced_peer_readded_tip", ""), ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), ].iter().cloned().collect(); } From f4d120b11f4d9e5c831473f4657c5c8adfe4abaa Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 23 Aug 2023 12:04:19 +0800 Subject: [PATCH 515/612] remove useless line --- src/ui_interface.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 6c0d38354..ed2b4f4fc 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -594,7 +594,6 @@ pub fn current_is_wayland() -> bool { #[inline] pub fn get_new_version() -> String { - // hbb_common::get_version_from_url(&*SOFTWARE_UPDATE_URL.lock().unwrap()) (*SOFTWARE_UPDATE_URL.lock().unwrap().rsplit('/').next().unwrap_or("")).to_string() } From da9fb46b6a65d9c96d15ac4c18cac8fa5be59a5e Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 23 Aug 2023 12:20:19 +0800 Subject: [PATCH 516/612] fix pushAb Signed-off-by: 21pages --- flutter/lib/models/ab_model.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/models/ab_model.dart b/flutter/lib/models/ab_model.dart index e91e42ef9..cbb7f7471 100644 --- a/flutter/lib/models/ab_model.dart +++ b/flutter/lib/models/ab_model.dart @@ -225,7 +225,7 @@ class AbModel { final api = "${await bind.mainGetApiServer()}/api/ab"; var authHeaders = getHttpHeaders(); authHeaders['Content-Type'] = "application/json"; - final body = jsonEncode(_serialize()); + final body = jsonEncode({"data": jsonEncode(_serialize())}); http.Response resp; // support compression if (licensedDevices > 0 && body.length > 1024) { From 28c0e15058298afdbb5b3234266bca2905df7c3d Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 23 Aug 2023 12:56:33 +0800 Subject: [PATCH 517/612] bump to 1.2.3 --- .github/workflows/flutter-build.yml | 2 +- .github/workflows/flutter-tag.yml | 2 +- .github/workflows/history.yml | 2 +- Cargo.lock | 2 +- Cargo.toml | 2 +- appimage/AppImageBuilder-aarch64.yml | 4 ++-- appimage/AppImageBuilder-x86_64.yml | 4 ++-- flatpak/rustdesk.json | 4 ++-- flutter/pubspec.yaml | 2 +- res/PKGBUILD | 2 +- res/rpm-flutter-suse.spec | 2 +- res/rpm-flutter.spec | 2 +- res/rpm.spec | 2 +- 13 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 3ccf4988a..69f7df67b 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -22,7 +22,7 @@ env: # vcpkg version: 2023.04.15 # for multiarch gcc compatibility VCPKG_COMMIT_ID: "501db0f17ef6df184fcdbfbe0f87cde2313b6ab1" - VERSION: "1.2.2" + VERSION: "1.2.3" NDK_VERSION: "r25c" #signing keys env variable checks ANDROID_SIGNING_KEY: '${{ secrets.ANDROID_SIGNING_KEY }}' diff --git a/.github/workflows/flutter-tag.yml b/.github/workflows/flutter-tag.yml index 56ec2c43e..4925f26c8 100644 --- a/.github/workflows/flutter-tag.yml +++ b/.github/workflows/flutter-tag.yml @@ -15,4 +15,4 @@ jobs: secrets: inherit with: upload-artifact: true - upload-tag: "1.2.2" + upload-tag: "1.2.3" diff --git a/.github/workflows/history.yml b/.github/workflows/history.yml index 6e276162a..6921ea4cd 100644 --- a/.github/workflows/history.yml +++ b/.github/workflows/history.yml @@ -10,7 +10,7 @@ env: # vcpkg version: 2022.05.10 # for multiarch gcc compatibility VCPKG_COMMIT_ID: "501db0f17ef6df184fcdbfbe0f87cde2313b6ab1" - VERSION: "1.2.2" + VERSION: "1.2.3" jobs: build-for-history-windows: diff --git a/Cargo.lock b/Cargo.lock index 1dc94cfda..99784e400 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5124,7 +5124,7 @@ dependencies = [ [[package]] name = "rustdesk" -version = "1.2.2" +version = "1.2.3" dependencies = [ "android_logger", "arboard", diff --git a/Cargo.toml b/Cargo.toml index f1e714e82..2abc198cd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rustdesk" -version = "1.2.2" +version = "1.2.3" authors = ["rustdesk "] edition = "2021" build= "build.rs" diff --git a/appimage/AppImageBuilder-aarch64.yml b/appimage/AppImageBuilder-aarch64.yml index b372f4eb9..337e022be 100644 --- a/appimage/AppImageBuilder-aarch64.yml +++ b/appimage/AppImageBuilder-aarch64.yml @@ -2,7 +2,7 @@ version: 1 script: - rm -rf ./AppDir || true - - bsdtar -zxvf ../rustdesk-1.2.2.deb + - bsdtar -zxvf ../rustdesk-1.2.3.deb - tar -xvf ./data.tar.xz - mkdir ./AppDir - mv ./usr ./AppDir/usr @@ -18,7 +18,7 @@ AppDir: id: rustdesk name: rustdesk icon: rustdesk - version: 1.2.2 + version: 1.2.3 exec: usr/lib/rustdesk/rustdesk exec_args: $@ apt: diff --git a/appimage/AppImageBuilder-x86_64.yml b/appimage/AppImageBuilder-x86_64.yml index 9a4054b62..650d2f201 100644 --- a/appimage/AppImageBuilder-x86_64.yml +++ b/appimage/AppImageBuilder-x86_64.yml @@ -2,7 +2,7 @@ version: 1 script: - rm -rf ./AppDir || true - - bsdtar -zxvf ../rustdesk-1.2.2.deb + - bsdtar -zxvf ../rustdesk-1.2.3.deb - tar -xvf ./data.tar.xz - mkdir ./AppDir - mv ./usr ./AppDir/usr @@ -18,7 +18,7 @@ AppDir: id: rustdesk name: rustdesk icon: rustdesk - version: 1.2.2 + version: 1.2.3 exec: usr/lib/rustdesk/rustdesk exec_args: $@ apt: diff --git a/flatpak/rustdesk.json b/flatpak/rustdesk.json index 4a8334fc9..4d2e297cc 100644 --- a/flatpak/rustdesk.json +++ b/flatpak/rustdesk.json @@ -12,7 +12,7 @@ "name": "rustdesk", "buildsystem": "simple", "build-commands": [ - "bsdtar -zxvf rustdesk-1.2.2.deb", + "bsdtar -zxvf rustdesk-1.2.3.deb", "tar -xvf ./data.tar.xz", "cp -r ./usr/* /app/", "mkdir -p /app/bin && ln -s /app/lib/rustdesk/rustdesk /app/bin/rustdesk", @@ -26,7 +26,7 @@ "sources": [ { "type": "file", - "path": "../rustdesk-1.2.2.deb" + "path": "../rustdesk-1.2.3.deb" }, { "type": "file", diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index 04af8f92f..b7141455d 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # 1.1.9-1 works for android, but for ios it becomes 1.1.91, need to set it to 1.1.9-a.1 for iOS, will get 1.1.9.1, but iOS store not allow 4 numbers -version: 1.2.2 +version: 1.2.3 environment: sdk: ">=2.17.0" diff --git a/res/PKGBUILD b/res/PKGBUILD index 4d3911b3b..0e83b6891 100644 --- a/res/PKGBUILD +++ b/res/PKGBUILD @@ -1,5 +1,5 @@ pkgname=rustdesk -pkgver=1.2.2 +pkgver=1.2.3 pkgrel=0 epoch= pkgdesc="" diff --git a/res/rpm-flutter-suse.spec b/res/rpm-flutter-suse.spec index 08080424c..8c71fa7de 100644 --- a/res/rpm-flutter-suse.spec +++ b/res/rpm-flutter-suse.spec @@ -1,5 +1,5 @@ Name: rustdesk -Version: 1.2.2 +Version: 1.2.3 Release: 0 Summary: RPM package License: GPL-3.0 diff --git a/res/rpm-flutter.spec b/res/rpm-flutter.spec index 5b4899bff..ca63093eb 100644 --- a/res/rpm-flutter.spec +++ b/res/rpm-flutter.spec @@ -1,5 +1,5 @@ Name: rustdesk -Version: 1.2.2 +Version: 1.2.3 Release: 0 Summary: RPM package License: GPL-3.0 diff --git a/res/rpm.spec b/res/rpm.spec index 6ce788ae7..c92ad904a 100644 --- a/res/rpm.spec +++ b/res/rpm.spec @@ -1,5 +1,5 @@ Name: rustdesk -Version: 1.2.2 +Version: 1.2.3 Release: 0 Summary: RPM package License: GPL-3.0 From 33cbed592a5821664541c5525b7409b6197291d1 Mon Sep 17 00:00:00 2001 From: SergeyMy <131688106+SergeyMy@users.noreply.github.com> Date: Wed, 23 Aug 2023 12:25:43 +0500 Subject: [PATCH 518/612] Update ru.rs --- src/lang/ru.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 69f4f2f19..cc5e97da8 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -539,7 +539,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("push_ab_failed_tip", "Невозможно синхронизировать адресную книгу с сервером"), ("synced_peer_readded_tip", "Устройства, присутствовавшие в последних сеансах, будут синхронизированы с адресной книгой."), ("Change Color", "Изменить цвет"), - ("Primary Color", ""), - ("HSV Color", ""), + ("Primary Color", "Основной цвет"), + ("HSV Color", "HSV цвет"), ].iter().cloned().collect(); } From 8785c08861f602c9f33b5d6ded5c606e92f1fa68 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Wed, 23 Aug 2023 14:27:30 +0200 Subject: [PATCH 519/612] Update de.rs --- src/lang/de.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index c528acceb..fe1fe864f 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -538,8 +538,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Aktualisierung des Adressbuchs fehlgeschlagen"), ("push_ab_failed_tip", "Synchronisierung des Adressbuchs mit dem Server fehlgeschlagen"), ("synced_peer_readded_tip", "Die Geräte, die in den letzten Sitzungen vorhanden waren, werden erneut zum Adressbuch hinzugefügt."), - ("Change Color", ""), - ("Primary Color", ""), - ("HSV Color", ""), + ("Change Color", "Farbe ändern"), + ("Primary Color", "Primärfarbe"), + ("HSV Color", "HSV-Farbe"), ].iter().cloned().collect(); } From cb73490107c36f36625b70ae6291df7b56b4dcb7 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 23 Aug 2023 21:59:22 +0800 Subject: [PATCH 520/612] add quick fix for https://github.com/rustdesk/rustdesk/issues/5488#issuecomment-1689997785 --- flutter/lib/desktop/pages/remote_tab_page.dart | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 51bcec51d..9c6ed6cec 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -354,7 +354,15 @@ class _ConnectionTabPageState extends State { )); } - if (perms['keyboard'] != false && !ffi.ffiModel.viewOnly) {} + if (perms['keyboard'] != false && !ffi.ffiModel.viewOnly) { + menu.add(RemoteMenuEntry.insertLock(sessionId, padding, + dismissFunc: cancelFunc)); + + if (pi.platform == kPeerPlatformLinux || pi.sasEnabled) { + menu.add(RemoteMenuEntry.insertCtrlAltDel(sessionId, padding, + dismissFunc: cancelFunc)); + } + } menu.addAll([ MenuEntryDivider(), From dade589075da95c735058a7b0090b03d5859b8b0 Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 23 Aug 2023 23:29:15 +0800 Subject: [PATCH 521/612] fix, enable menu before image Signed-off-by: fufesou --- flutter/lib/desktop/pages/remote_page.dart | 84 ++++++++++++---------- src/client.rs | 3 + src/common.rs | 2 +- 3 files changed, 52 insertions(+), 37 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 0d51cabdd..8084b230d 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -228,49 +228,61 @@ class _RemotePageState extends State removeSharedStates(widget.id); } + Widget emptyOverlay() => GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: () { + bind.sessionInputOsPassword(sessionId: sessionId, value: ''); + }, + child: BlockableOverlay( + state: _blockableOverlayState, + underlying: Container( + color: Colors.transparent, + ), + ), + ); + Widget buildBody(BuildContext context) { return Scaffold( backgroundColor: Theme.of(context).colorScheme.background, /// the Overlay key will be set with _blockableOverlayState in BlockableOverlay /// see override build() in [BlockableOverlay] - body: BlockableOverlay( - state: _blockableOverlayState, - underlying: Container( - color: Colors.black, - child: RawKeyFocusScope( - focusNode: _rawKeyFocusNode, - onFocusChange: (bool imageFocused) { - debugPrint( - "onFocusChange(window active:${!_isWindowBlur}) $imageFocused"); - // See [onWindowBlur]. - if (Platform.isWindows) { - if (_isWindowBlur) { - imageFocused = false; - Future.delayed(Duration.zero, () { - _rawKeyFocusNode.unfocus(); - }); + body: Stack( + children: [ + Container( + color: Colors.black, + child: RawKeyFocusScope( + focusNode: _rawKeyFocusNode, + onFocusChange: (bool imageFocused) { + debugPrint( + "onFocusChange(window active:${!_isWindowBlur}) $imageFocused"); + // See [onWindowBlur]. + if (Platform.isWindows) { + if (_isWindowBlur) { + imageFocused = false; + Future.delayed(Duration.zero, () { + _rawKeyFocusNode.unfocus(); + }); + } + if (imageFocused) { + _ffi.inputModel.enterOrLeave(true); + } else { + _ffi.inputModel.enterOrLeave(false); + } } - if (imageFocused) { - _ffi.inputModel.enterOrLeave(true); - } else { - _ffi.inputModel.enterOrLeave(false); - } - } - }, - inputModel: _ffi.inputModel, - child: getBodyForDesktop(context))), - upperLayer: [ - OverlayEntry( - builder: (context) => RemoteToolbar( - id: widget.id, - ffi: _ffi, - state: widget.toolbarState, - onEnterOrLeaveImageSetter: (func) => - _onEnterOrLeaveImage4Toolbar = func, - onEnterOrLeaveImageCleaner: () => - _onEnterOrLeaveImage4Toolbar = null, - )) + }, + inputModel: _ffi.inputModel, + child: getBodyForDesktop(context))), + emptyOverlay(), + RemoteToolbar( + id: widget.id, + ffi: _ffi, + state: widget.toolbarState, + onEnterOrLeaveImageSetter: (func) => + _onEnterOrLeaveImage4Toolbar = func, + onEnterOrLeaveImageCleaner: () => + _onEnterOrLeaveImage4Toolbar = null, + ), ], ), ); diff --git a/src/client.rs b/src/client.rs index 9e3479da8..17a62ed54 100644 --- a/src/client.rs +++ b/src/client.rs @@ -2100,6 +2100,9 @@ fn _input_os_password(p: String, activate: bool, interface: impl Interface) { activate_os(&interface); std::thread::sleep(Duration::from_millis(1200)); } + if p.is_empty() { + return; + } let mut key_event = KeyEvent::new(); key_event.press = true; let mut msg_out = Message::new(); diff --git a/src/common.rs b/src/common.rs index 5ad92d914..36ca972b2 100644 --- a/src/common.rs +++ b/src/common.rs @@ -25,7 +25,7 @@ use hbb_common::{ protobuf::Enum, protobuf::Message as _, rendezvous_proto::*, - sleep, socket_client, + socket_client, tcp::FramedStream, tokio, ResultType, }; From f2d96b895f1d29efa0eb3d2504c17f53c952ef7e Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 23 Aug 2023 23:57:09 +0800 Subject: [PATCH 522/612] hide empty waiting layer after images are reached Signed-off-by: fufesou --- flutter/lib/desktop/pages/remote_page.dart | 11 +++++++---- flutter/lib/models/model.dart | 19 ++++++++++--------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 8084b230d..339ecb3f2 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -234,6 +234,8 @@ class _RemotePageState extends State bind.sessionInputOsPassword(sessionId: sessionId, value: ''); }, child: BlockableOverlay( + /// the Overlay key will be set with _blockableOverlayState in BlockableOverlay + /// see override build() in [BlockableOverlay] state: _blockableOverlayState, underlying: Container( color: Colors.transparent, @@ -244,9 +246,6 @@ class _RemotePageState extends State Widget buildBody(BuildContext context) { return Scaffold( backgroundColor: Theme.of(context).colorScheme.background, - - /// the Overlay key will be set with _blockableOverlayState in BlockableOverlay - /// see override build() in [BlockableOverlay] body: Stack( children: [ Container( @@ -273,7 +272,11 @@ class _RemotePageState extends State }, inputModel: _ffi.inputModel, child: getBodyForDesktop(context))), - emptyOverlay(), + Obx( + () => _ffi.ffiModel.waitForFirstImage.isTrue + ? emptyOverlay() + : Offstage(), + ), RemoteToolbar( id: widget.id, ffi: _ffi, diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 202216b59..25ba22c70 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -38,8 +38,6 @@ import 'platform_model.dart'; typedef HandleMsgBox = Function(Map evt, String id); typedef ReconnectHandle = Function(OverlayDialogManager, SessionID, bool); -final _waitForImageDialogShow = {}; -final _waitForFirstImage = {}; final _constSessionId = Uuid().v4obj(); class CachedPeerData { @@ -100,6 +98,9 @@ class FfiModel with ChangeNotifier { WeakReference parent; late final SessionID sessionId; + RxBool waitForImageDialogShow = true.obs; + RxBool waitForFirstImage = true.obs; + Map get permissions => _permissions; Display get display => _display; @@ -498,7 +499,7 @@ class FfiModel with ChangeNotifier { closeConnection(); } - if (_waitForFirstImage[sessionId] == false) return; + if (waitForFirstImage.isFalse) return; dialogManager.show( (setState, close, context) => CustomAlertDialog( title: null, @@ -509,7 +510,7 @@ class FfiModel with ChangeNotifier { onCancel: onClose), tag: '$sessionId-waiting-for-image', ); - _waitForImageDialogShow[sessionId] = true; + waitForImageDialogShow.value = true; bind.sessionOnWaitingForImageDialogShow(sessionId: sessionId); } @@ -578,7 +579,7 @@ class FfiModel with ChangeNotifier { } if (displays.isNotEmpty) { _reconnects = 1; - _waitForFirstImage[sessionId] = true; + waitForFirstImage.value = true; } Map features = json.decode(evt['features']); _pi.features.privacyMode = features['privacy_mode'] == 1; @@ -1814,12 +1815,12 @@ class FFI { } void onEvent2UIRgba() async { - if (_waitForImageDialogShow[sessionId] == true) { - _waitForImageDialogShow[sessionId] = false; + if (ffiModel.waitForImageDialogShow.isTrue) { + ffiModel.waitForImageDialogShow.value = false; clearWaitingForImage(dialogManager, sessionId); } - if (_waitForFirstImage[sessionId] == true) { - _waitForFirstImage[sessionId] = false; + if (ffiModel.waitForFirstImage.value == true) { + ffiModel.waitForFirstImage.value = false; dialogManager.dismissAll(); await canvasModel.updateViewStyle(); await canvasModel.updateScrollStyle(); From e17002c6da0b69fb93a80f4ae9153cc409f82a32 Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 24 Aug 2023 00:00:18 +0800 Subject: [PATCH 523/612] set right menu duration from 4s to 300s Signed-off-by: fufesou --- flutter/lib/desktop/widgets/tabbar_widget.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 0eb59f51b..148135a81 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -77,7 +77,7 @@ CancelFunc showRightMenu(ToastBuilder builder, targetContext: context, verticalOffset: 0, horizontalOffset: 0, - duration: Duration(seconds: 4), + duration: Duration(seconds: 300), animationDuration: Duration(milliseconds: 0), animationReverseDuration: Duration(milliseconds: 0), preferDirection: PreferDirection.rightTop, From 256f33b720d8685424ce574f018f821be342c14c Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Tue, 22 Aug 2023 07:26:06 +0800 Subject: [PATCH 524/612] Update and improve tw translation --- src/lang/tw.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 8ef8ca895..d5a6c6b83 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -528,16 +528,16 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Move tab to new window", "移動標籤到新視窗"), ("Can not be empty", "不能為空"), ("Already exists", "已經存在"), - ("Change Password", ""), - ("Refresh Password", ""), - ("ID", ""), - ("Grid View", ""), - ("List View", ""), - ("Select", ""), - ("Toggle Tags", ""), - ("pull_ab_failed_tip", "未成功獲取地址簿"), - ("push_ab_failed_tip", "未成功上傳地址簿"), - ("synced_peer_readded_tip", "最近會話中存在的設備將會被重新同步到地址簿。"), + ("Change Password", "更改密碼"), + ("Refresh Password", "重新整理密碼"), + ("ID", "ID"), + ("Grid View", "網格檢視"), + ("List View", "清單檢視"), + ("Select", "選擇"), + ("Toggle Tags", "切換標籤"), + ("pull_ab_failed_tip", "通訊錄更新失敗"), + ("push_ab_failed_tip", "成功同步通訊錄至伺服器"), + ("synced_peer_readded_tip", "最近會話中存在的設備將會被重新同步到通訊錄。"), ("Change Color", "更改顏色"), ("Primary Color", "基本色"), ("HSV Color", "HSV 色"), From a7ef3ce58ae66c02ae75613404c723dcfc7f1ef3 Mon Sep 17 00:00:00 2001 From: Ibnul Mutaki Date: Thu, 24 Aug 2023 08:01:41 +0700 Subject: [PATCH 525/612] fix some translate read me for indonesian translate, add create contributing-id.md --- docs/CONTRIBUTING-ID.md | 31 +++++++++++++++++++++++++++++++ docs/README-ID.md | 10 +++++----- 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 docs/CONTRIBUTING-ID.md diff --git a/docs/CONTRIBUTING-ID.md b/docs/CONTRIBUTING-ID.md new file mode 100644 index 000000000..cdff6c01f --- /dev/null +++ b/docs/CONTRIBUTING-ID.md @@ -0,0 +1,31 @@ +# Berkontribusi dalam pengembangan RustDesk + +RustDesk mengajak semua orang untuk ikut berkontribusi. Berikut ini adalah panduan jika kamu sedang mempertimbangkan untuk memberikan bantuan kepada kami: + +## Kontirbusi + +Untuk melakukan kontribusi pada RustDesk atau dependensinya, sebaiknya dilakukan dalam bentuk pull request di GitHub. Setiap permintaan pull request akan ditinjau oleh kontributor utama atau seseorang yang memiliki wewenang untuk menggabungkan perubahan kode, baik yang sudah dimasukkan ke dalam struktur utama ataupun memberikan umpan balik untuk perubahan yang akan diperlukan. Setiap kontribusi harus sesuai dengan format ini, juga termasuk yang berasal dari kontributor utama. + +Apabila kamu ingin mengatasi sebuah masalah yang sudah ada di daftar issue, harap klaim terlebih dahulu dengan memberikan komentar pada GitHub issue yang ingin kamu kerjakan. Hal ini dilakukan untuk mencegah terjadinya duplikasi dari kontributor pada daftar issue yang sama. + +## Pemeriksaan Pull Request + +- Branch yang menjadi acuan adalah branch master dari repositori utama dan, jika diperlukan, lakukan rebase ke branch master yang terbaru sebelum kamu mengirim pull request. Apabila terdapat masalah kita melakukan proses merge ke branch master kemungkinan kamu akan diminta untuk melakukan rebase pada perubahan yang sudah dibuat. + +- Sebaiknya buatlah commit seminimal mungkin, sambil memastikan bahwa setiap commit yang dibuat sudah benar (contohnya, setiap commit harus bisa di kompilasi dan berhasil melewati tahap test). + +- Setiap commit harus disertai dengan tanda tangan Sertifikat Asal Pengembang (Developer Certificate of Origin) (), yang mengindikasikan bahwa kamu (and your employer if applicable) bersedia untuk patuh terhadap persyaratan dari [lisensi projek](../LICENCE). Di git bash, ini adalah opsi parameter `-s` pada `git commit` + +- Jika perubahan yang kamu buat tidak mendapat tinjauan atau kamu membutuhkan orang tertentu untuk meninjaunya, kamu bisa @-reply seorang reviewer meminta peninjauan dalam permintaan pull request atau komentar, atau kamu bisa meminta tinjauan melalui [email](mailto:info@rustdesk.com). + +- Sertakan test yang relevan terhadap bug atau fitur baru yang sudah dikerjakan. + +Untuk instruksi Git yang lebih lanjut, cek disini [GitHub workflow 101](https://github.com/servo/servo/wiki/GitHub-workflow). + +## Tindakan + + + +## Komunikasi + +Kontributor RustDesk sering berkunjung ke [Discord](https://discord.gg/nDceKgxnkV). diff --git a/docs/README-ID.md b/docs/README-ID.md index e4cb5560c..78aac233a 100644 --- a/docs/README-ID.md +++ b/docs/README-ID.md @@ -13,15 +13,15 @@ Mari mengobrol bersama kami: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) -Merupakan perangkat lunak Remote Desktop yang baru, dibangun dengan Rust. kamu bisa langsung menggunakannya tanpa perlu konfigurasi tambahan. Serta ,emiliki kontrol penuh terhadap semua data, tanpa perlu merasa was-was tentang isu keamanan, dan yang lebih menarik adalah memiliki opsi untuk menggunakan server rendezvous/relay milik kami, [konfigurasi server sendiri](https://rustdesk.com/server), atau [tulis rendezvous/relay server anda sendiri](https://github.com/rustdesk/rustdesk-server-demo). +Merupakan perangkat lunak Remote Desktop yang baru, dan dibangun dengan Rust. Bahkan kamu bisa langsung menggunakannya tanpa perlu melakukan konfigurasi tambahan. Serta memiliki kontrol penuh terhadap semua data, tanpa perlu merasa was-was tentang isu keamanan, dan yang lebih menarik adalah memiliki opsi untuk menggunakan server rendezvous/relay milik kami, [konfigurasi server sendiri](https://rustdesk.com/server), atau [tulis rendezvous/relay server anda sendiri](https://github.com/rustdesk/rustdesk-server-demo). -RustDesk mengajak semua orang untuk ikut berkontribusi. Lihat [`docs/CONTRIBUTING.md`](CONTRIBUTING.md) untuk melihat panduan. +RustDesk mengajak semua orang untuk ikut berkontribusi. Lihat [`docs/CONTRIBUTING-ID.md`](CONTRIBUTING-ID.md) untuk melihat panduan. [**UNDUH BINARY**](https://github.com/rustdesk/rustdesk/releases) ## Server Publik Gratis -Di bawah ini merupakan server gratis yang bisa kamu gunakan, seiring waktu kemungkinan akan terjadi perubahan spesifikasi pada setiap server. Jika lokasi kamu berada jauh dengan salah satu server yang tersedia, kemungkinan koneksi akan terasa lambat ketika melakukan proses remote. +Di bawah ini merupakan server gratis yang bisa kamu gunakan, seiring dengan waktu mungkin akan terjadi perubahan spesifikasi pada setiap server yang ada. Jika lokasi kamu berada jauh dengan salah satu server yang tersedia, kemungkinan koneksi akan terasa lambat ketika melakukan proses remote. | Lokasi | Penyedia | Spesifikasi | | --------- | ------------- | ------------------ | | Jerman | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4GB RAM | @@ -31,11 +31,11 @@ Di bawah ini merupakan server gratis yang bisa kamu gunakan, seiring waktu kemun [![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Container&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/rustdesk/rustdesk) -Apabila kamu sudah menginstall VS Code dan Docker, kamu bisa mengklik badge yang ada diatas untuk memulainya. Dengan mengklik badge tersebut secara otomatis akan menginstal ekstensi pada VS Code, lakukan kloning (clone) source code kedalam container volume, dan aktifkan dev container untuk menggunakannya. +Apabila PC kamu sudah terinstal VS Code dan Docker, kamu bisa mengklik badge yang ada diatas untuk memulainya. Dengan mengklik badge tersebut secara otomatis akan menginstal ekstensi pada VS Code, lakukan kloning (clone) source code kedalam container volume, dan aktifkan dev container untuk menggunakannya. ## Dependensi -Pada versi desktop, antarmuka pengguna (GUI) menggunakan [Sciter](https://sciter.com/) atau flutter, tutorial ini hanya berlaku untuk Sciter +Pada versi desktop, antarmuka pengguna (GUI) menggunakan [Sciter](https://sciter.com/) atau flutter Kamu bisa mengunduh Sciter dynamic library disini. From 88d0460e3c775a4c07b0c2f60e5b8e52ca1af988 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 24 Aug 2023 10:04:34 +0800 Subject: [PATCH 526/612] alarm audit more info Signed-off-by: 21pages --- src/server/connection.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/server/connection.rs b/src/server/connection.rs index e982e6a93..4ab62cce3 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1455,17 +1455,21 @@ impl Connection { self.send_login_error("Too many wrong password attempts") .await; Self::post_alarm_audit( - AlarmAuditType::ManyWrongPassword, + AlarmAuditType::ExceedThirtyAttempts, json!({ "ip":self.ip, + "id":lr.my_id.clone(), + "name": lr.my_name.clone(), }), ); } else if time == failure.0 && failure.1 > 6 { self.send_login_error("Please try 1 minute later").await; Self::post_alarm_audit( - AlarmAuditType::FrequentAttempt, + AlarmAuditType::SixAttemptsWithinOneMinute, json!({ "ip":self.ip, + "id":lr.my_id.clone(), + "name": lr.my_name.clone(), }), ); } else if !self.validate_password() { @@ -2504,8 +2508,8 @@ mod privacy_mode { pub enum AlarmAuditType { IpWhitelist = 0, - ManyWrongPassword = 1, - FrequentAttempt = 2, + ExceedThirtyAttempts = 1, + SixAttemptsWithinOneMinute = 2, } pub enum FileAuditType { From 0e838d59d5cba5ba533b7fd4a9d7acebc0957f69 Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 24 Aug 2023 12:03:29 +0800 Subject: [PATCH 527/612] Check if peer info is set Signed-off-by: fufesou --- flutter/lib/desktop/pages/remote_page.dart | 24 ++++++++--------- .../lib/desktop/pages/remote_tab_page.dart | 7 ++++- flutter/lib/models/model.dart | 13 +++++++++- src/client.rs | 26 ++++++++++++++----- 4 files changed, 48 insertions(+), 22 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 339ecb3f2..f8151e059 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -228,18 +228,12 @@ class _RemotePageState extends State removeSharedStates(widget.id); } - Widget emptyOverlay() => GestureDetector( - behavior: HitTestBehavior.translucent, - onTap: () { - bind.sessionInputOsPassword(sessionId: sessionId, value: ''); - }, - child: BlockableOverlay( - /// the Overlay key will be set with _blockableOverlayState in BlockableOverlay - /// see override build() in [BlockableOverlay] - state: _blockableOverlayState, - underlying: Container( - color: Colors.transparent, - ), + Widget emptyOverlay() => BlockableOverlay( + /// the Overlay key will be set with _blockableOverlayState in BlockableOverlay + /// see override build() in [BlockableOverlay] + state: _blockableOverlayState, + underlying: Container( + color: Colors.transparent, ), ); @@ -273,7 +267,8 @@ class _RemotePageState extends State inputModel: _ffi.inputModel, child: getBodyForDesktop(context))), Obx( - () => _ffi.ffiModel.waitForFirstImage.isTrue + () => _ffi.ffiModel.pi.isSet.isTrue && + _ffi.ffiModel.waitForFirstImage.isTrue ? emptyOverlay() : Offstage(), ), @@ -286,6 +281,9 @@ class _RemotePageState extends State onEnterOrLeaveImageCleaner: () => _onEnterOrLeaveImage4Toolbar = null, ), + Obx( + () => _ffi.ffiModel.pi.isSet.isFalse ? emptyOverlay() : Offstage(), + ), ], ), ); diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 51bcec51d..1dd291e3b 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -20,6 +20,7 @@ import 'package:get/get.dart'; import 'package:bot_toast/bot_toast.dart'; import '../../common/widgets/dialog.dart'; +import '../../models/model.dart'; import '../../models/platform_model.dart'; class _MenuTheme { @@ -266,7 +267,11 @@ class _ConnectionTabPageState extends State { if (e.kind != ui.PointerDeviceKind.mouse) { return; } - if (e.buttons == 2) { + final remotePage = tabController.state.value.tabs + .firstWhere((tab) => tab.key == key) + .page as RemotePage; + if (remotePage.ffi.ffiModel.pi.isSet.isTrue && + e.buttons == 2) { showRightMenu( (CancelFunc cancelFunc) { return _tabMenuBuilder(key, cancelFunc); diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 25ba22c70..00b344e13 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -99,6 +99,7 @@ class FfiModel with ChangeNotifier { late final SessionID sessionId; RxBool waitForImageDialogShow = true.obs; + Timer? waitForImageTimer; RxBool waitForFirstImage = true.obs; Map get permissions => _permissions; @@ -159,6 +160,7 @@ class FfiModel with ChangeNotifier { _timer?.cancel(); _timer = null; clearPermissions(); + waitForImageTimer?.cancel(); } setConnectionType(String peerId, bool secure, bool direct) { @@ -511,6 +513,11 @@ class FfiModel with ChangeNotifier { tag: '$sessionId-waiting-for-image', ); waitForImageDialogShow.value = true; + waitForImageTimer = Timer(Duration(milliseconds: 1500), () { + if (waitForFirstImage.isTrue) { + bind.sessionInputOsPassword(sessionId: sessionId, value: ''); + } + }); bind.sessionOnWaitingForImageDialogShow(sessionId: sessionId); } @@ -603,6 +610,7 @@ class FfiModel with ChangeNotifier { } } + _pi.isSet.value = true; stateGlobal.resetLastResolutionGroupValues(peerId); notifyListeners(); @@ -1817,6 +1825,7 @@ class FFI { void onEvent2UIRgba() async { if (ffiModel.waitForImageDialogShow.isTrue) { ffiModel.waitForImageDialogShow.value = false; + ffiModel.waitForImageTimer?.cancel(); clearWaitingForImage(dialogManager, sessionId); } if (ffiModel.waitForFirstImage.value == true) { @@ -1935,7 +1944,7 @@ class Features { bool privacyMode = false; } -class PeerInfo { +class PeerInfo with ChangeNotifier { String version = ''; String username = ''; String hostname = ''; @@ -1947,6 +1956,8 @@ class PeerInfo { List resolutions = []; Map platform_additions = {}; + RxBool isSet = false.obs; + bool get is_wayland => platform_additions['is_wayland'] == true; bool get is_headless => platform_additions['headless'] == true; } diff --git a/src/client.rs b/src/client.rs index 17a62ed54..253c293ee 100644 --- a/src/client.rs +++ b/src/client.rs @@ -57,7 +57,10 @@ use scrap::{ ImageFormat, ImageRgb, }; -use crate::is_keyboard_mode_supported; +use crate::{ + common::input::{MOUSE_BUTTON_LEFT, MOUSE_TYPE_DOWN, MOUSE_TYPE_UP}, + is_keyboard_mode_supported, +}; #[cfg(not(feature = "flutter"))] #[cfg(not(any(target_os = "android", target_os = "ios")))] @@ -2057,13 +2060,20 @@ pub fn send_pointer_device_event( /// # Arguments /// /// * `interface` - The interface for sending data. -fn activate_os(interface: &impl Interface) { +/// * `send_click` - Whether to send a click event. +fn activate_os(interface: &impl Interface, send_click: bool) { + let left_down = MOUSE_BUTTON_LEFT << 3 | MOUSE_TYPE_DOWN; + let left_up = MOUSE_BUTTON_LEFT << 3 | MOUSE_TYPE_UP; + send_mouse(left_up, 0, 0, false, false, false, false, interface); + std::thread::sleep(Duration::from_millis(50)); send_mouse(0, 0, 0, false, false, false, false, interface); std::thread::sleep(Duration::from_millis(50)); send_mouse(0, 3, 3, false, false, false, false, interface); - std::thread::sleep(Duration::from_millis(50)); - send_mouse(1 | 1 << 3, 0, 0, false, false, false, false, interface); - send_mouse(2 | 1 << 3, 0, 0, false, false, false, false, interface); + if send_click { + std::thread::sleep(Duration::from_millis(50)); + send_mouse(left_down, 0, 0, false, false, false, false, interface); + send_mouse(left_up, 0, 0, false, false, false, false, interface); + } /* let mut key_event = KeyEvent::new(); // do not use Esc, which has problem with Linux @@ -2096,11 +2106,13 @@ pub fn input_os_password(p: String, activate: bool, interface: impl Interface) { /// * `activate` - Whether to activate OS. /// * `interface` - The interface for sending data. fn _input_os_password(p: String, activate: bool, interface: impl Interface) { + let input_password = !p.is_empty(); if activate { - activate_os(&interface); + // Click event is used to bring up the password input box. + activate_os(&interface, input_password); std::thread::sleep(Duration::from_millis(1200)); } - if p.is_empty() { + if !input_password { return; } let mut key_event = KeyEvent::new(); From 23354d371f189b2a1b013875ab84a178e2f7295c Mon Sep 17 00:00:00 2001 From: Ibnul Mutaki Date: Thu, 24 Aug 2023 11:07:47 +0700 Subject: [PATCH 528/612] change inconsitent word and add new translation --- src/lang/id.rs | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/lang/id.rs b/src/lang/id.rs index c8c343c5b..594d696a0 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -47,7 +47,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Slogan_tip", "Dibuat dengan penuh kasih sayang dalam dunia yang penuh kekacauan ini"), ("Privacy Statement", "Pernyataan Privasi"), ("Mute", "Bisukan"), - ("Build Date", ""), + ("Build Date", "Tanggal Build"), ("Version", "Versi"), ("Home", ""), ("Audio Input", "Input Audio"), @@ -172,7 +172,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Local Port", "Port Lokal"), ("Local Address", "Alamat lokal"), ("Change Local Port", "Ubah Port Lokal"), - ("setup_server_tip", "Untuk koneksi yang lebih cepat, silakan atur server Anda sendiri"), + ("setup_server_tip", "Sudah siap, Untuk koneksi yang lebih stabil, anda bisa menjalankan di servermu sendiri"), ("Too short, at least 6 characters.", "Terlalu pendek, setidaknya 6 karekter."), ("The confirmation is not identical.", "Konfirmasi tidak identik."), ("Permissions", "Izin"), @@ -186,13 +186,13 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Connected", "Terhubung"), ("Direct and encrypted connection", "Koneksi langsung dan terenkripsi"), ("Relayed and encrypted connection", "Koneksi relay dan terenkripsi"), - ("Direct and unencrypted connection", "Koneksi langsung dan tidak terenkripsi"), - ("Relayed and unencrypted connection", "Koneksi relay dan tidak terenkripsi"), + ("Direct and unencrypted connection", "Koneksi langsung dan tanpa enkripsi"), + ("Relayed and unencrypted connection", "Koneksi relay dan tanpa enkripsi"), ("Enter Remote ID", "Masukkan ID Remote"), ("Enter your password", "Masukkan kata sandi anda"), ("Logging in...", "Masuk..."), ("Enable RDP session sharing", "Aktifkan berbagi sesi RDP"), - ("Auto Login", "Auto Login (Hanya berlaku jika Anda mengatur \"Kunci setelah sesi berakhir\")"), + ("Auto Login", "Login Otomatis (Hanya berlaku jika Anda mengatur \"Kunci setelah sesi berakhir\")"), ("Enable Direct IP Access", "Aktifkan Akses IP Langsung"), ("Rename", "Ubah nama"), ("Space", "Spasi"), @@ -210,7 +210,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Settings", "Pengaturan"), ("Username", "Nama pengguna"), ("Invalid port", "Kesalahan port"), - ("Closed manually by the peer", "Ditutup secara manual oleh peer"), + ("Closed manually by the peer", "Ditutup secara manual oleh rekan"), ("Enable remote configuration modification", "Aktifkan modifikasi konfigurasi remotE"), ("Run without install", "Jalankan tanpa menginstal"), ("Connect via relay", "Sambungkan via relay"), @@ -301,7 +301,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Succeeded", "Berhasil"), ("Someone turns on privacy mode, exit", "Seseorang mengaktifkan mode privasi, keluar"), ("Unsupported", "Tidak didukung"), - ("Peer denied", "Rekan ditolak"), + ("Peer denied", "Rekan menolak"), ("Please install plugins", "Silakan instal plugin"), ("Peer exit", "Rekan keluar"), ("Failed to turn off", "Gagal mematikan"), @@ -311,7 +311,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Language", "Bahasa"), ("Keep RustDesk background service", "Pertahankan RustDesk berjalan pada service background"), ("Ignore Battery Optimizations", "Abaikan Pengoptimalan Baterai"), - ("android_open_battery_optimizations_tip", "Jika kamu ingin menonaktifkan fitur ini, buka halam pengaturan, cari dan pilih [Baterai], Uncheck [Tidak dibatasi]"), + ("android_open_battery_optimizations_tip", "Jika anda ingin menonaktifkan fitur ini, buka halam pengaturan, cari dan pilih [Baterai], Uncheck [Tidak dibatasi]"), ("Start on Boot", "Mulai saat dihidupkan"), ("Start the screen sharing service on boot, requires special permissions", "Mulai layanan berbagi layar saat sistem dinyalakan, memerlukan izin khusus."), ("Connection not allowed", "Koneksi tidak dizinkan"), @@ -321,9 +321,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Use permanent password", "Gunakan kata sandi permanaen"), ("Use both passwords", "Gunakan kedua kata sandi"), ("Set permanent password", "Setel kata sandi permanen"), - ("Enable Remote Restart", "Aktifkan Restart Remote"), - ("Allow remote restart", "Ijinkan Restart Remote"), - ("Restart Remote Device", "Restart Perangkat Remote"), + ("Enable Remote Restart", "Aktifkan Restart Secara Remote"), + ("Allow remote restart", "Ijinkan Restart Secara Remote"), + ("Restart Remote Device", "Restart Perangkat Secara Remote"), ("Are you sure you want to restart", "Apakah Anda yakin ingin merestart"), ("Restarting Remote Device", "Merestart Perangkat Remote"), ("remote_restarting_tip", "Perangkat remote sedang merestart, harap tutup pesan ini dan sambungkan kembali dengan kata sandi permanen setelah beberapa saat."), @@ -382,7 +382,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Write a message", "Menulis pesan"), ("Prompt", ""), ("Please wait for confirmation of UAC...", "Harap tunggu konfirmasi UAC"), - ("elevated_foreground_window_tip", "Jendela remote desktop ini memerlukan hak akses khusus, jadi anda tidak bisa menggunakan mouse dan keyboard untuk sementara. Kamu bisa meminta pengguna remote untuk menyembunyikan jendela ini atau klik tombol elevasi di jendela pengaturan koneksi. Untuk menghindari masalah ini, direkomendasikan untuk menginstall aplikasi secara permanen"), + ("elevated_foreground_window_tip", "Jendela remote desktop ini memerlukan hak akses khusus, jadi anda tidak bisa menggunakan mouse dan keyboard untuk sementara. Anda bisa meminta pihak pengguna yang diremote untuk menyembunyikan jendela ini atau klik tombol elevasi di jendela pengaturan koneksi. Untuk menghindari masalah ini, direkomendasikan untuk menginstall aplikasi secara permanen"), ("Disconnected", "Terputus"), ("Other", "Lainnya"), ("Confirm before closing multiple tabs", "Konfirmasi sebelum menutup banyak tab"), @@ -392,7 +392,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland membutuhkan Ubuntu 21.04 atau versi yang lebih tinggi."), ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland membutuhkan versi distro linux yang lebih tinggi. Silakan coba desktop X11 atau ubah OS Anda."), ("JumpLink", "Tautan Cepat"), - ("Please Select the screen to be shared(Operate on the peer side).", "Silakan Pilih layar yang akan dibagikan kepada rekan."), + ("Please Select the screen to be shared(Operate on the peer side).", "Silakan Pilih layar yang akan dibagikan kepada rekan anda."), ("Show RustDesk", "Tampilkan RustDesk"), ("This PC", "PC ini"), ("or", "atau"), @@ -418,7 +418,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Closed manually by web console", "Ditutup secara manual dari konsol web."), ("Local keyboard type", "Tipe papan ketik"), ("Select local keyboard type", "Pilih tipe papan ketik"), - ("software_render_tip", "Jika kamu menggunakan kartu grafis Nvidia pada sistem linux dan jendela windows ditutup secara instan setelah terhung, silahkan ubah ke driver open-source Nouveau, dibutukan untuk merestart aplikasi"), + ("software_render_tip", "Jika anda menggunakan kartu grafis Nvidia pada sistem linux dan jendela windows ditutup secara instan setelah terhung, silahkan ubah ke driver open-source Nouveau, dibutukan untuk merestart aplikasi"), ("Always use software rendering", "Selalu gunakan software rendering"), ("config_input", "Untuk menggunakan input keyboard remote, anda perlu memberikan izin \"Pemantauan Input\" pada RustDesk"), ("config_microphone", "Untuk berbicara secara remote, anda perlu memberikan izin \"Rekam Audio\" pada RustDesk"), @@ -440,7 +440,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Weak", "Lemah"), ("Medium", "Sedang"), ("Strong", "Kuat"), - ("Switch Sides", "Tukar Posisi"), + ("Switch Sides", "Ganti Posisi"), ("Please confirm if you want to share your desktop?", "Harap konfirmasi apakah Anda ingin berbagi layar?"), ("Display", "Tampilan"), ("Default View Style", "Gaya Tampilan Default"), @@ -470,14 +470,14 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Maximize", "Memaksimalkan"), ("Your Device", "Perangkat anda"), ("empty_recent_tip", "Tidak ada sesi terbaru!"), - ("empty_favorite_tip", "Belum ada rekan (peer) favorit?\nTemukan seseorang untuk terhubung dan tambahkan ke favorit!"), - ("empty_lan_tip", "Sepertinya kami belum menemukan rekan (peer)"), + ("empty_favorite_tip", "Belum ada rekan favorit?\nTemukan seseorang untuk terhubung dan tambahkan ke favorit!"), + ("empty_lan_tip", "Sepertinya kami belum menemukan rekan"), ("empty_address_book_tip", "Tampaknya saat ini tidak ada rekan yang terdaftar dalam buku alamat Anda"), ("eg: admin", ""), ("Empty Username", "Nama pengguna kosong"), ("Empty Password", "Kata sandi kosong"), ("Me", "Saya"), - ("identical_file_tip", "Data ini identik dengan milik rekan (peer)"), + ("identical_file_tip", "Data ini identik dengan milik rekan"), ("show_monitors_tip", "Tampilkan monitor di toolbar"), ("View Mode", "Mode Tampilan"), ("login_linux_tip", "Anda harus masuk ke akun remote linux untuk mengaktifkan sesi X desktop"), @@ -525,7 +525,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Sync with recent sessions", "Sinkronkan dengan sesi terbaru"), ("Sort tags", "Urutkan tag"), ("Open connection in new tab", "Buka koneksi di tab baru"), - ("Move tab to new window", "Pindahkan tabn ke jendela baru"), + ("Move tab to new window", "Pindahkan tab ke jendela baru"), ("Can not be empty", "Tidak boleh kosong"), ("Already exists", "Sudah ada"), ("Change Password", "Ganti kata sandi"), @@ -538,8 +538,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Gagal memuat ulang buku alamat"), ("push_ab_failed_tip", "Gagal menyinkronkan buku alamat ke server"), ("synced_peer_readded_tip", "Perangkat yang terdaftar dalam sesi-sesi terbaru akan di-sinkronkan kembali ke buku alamat."), - ("Change Color", ""), - ("Primary Color", ""), - ("HSV Color", ""), + ("Change Color", "Ganti warna"), + ("Primary Color", "Warna utama"), + ("HSV Color", "Warna HSV"), ].iter().cloned().collect(); } From a0887e9285c582bead6aed6d8210040ffdaa0ecc Mon Sep 17 00:00:00 2001 From: Ibnul Mutaki Date: Thu, 24 Aug 2023 11:12:02 +0700 Subject: [PATCH 529/612] changed tips for better understanding --- src/lang/id.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/id.rs b/src/lang/id.rs index 594d696a0..7a1eaba20 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -172,7 +172,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Local Port", "Port Lokal"), ("Local Address", "Alamat lokal"), ("Change Local Port", "Ubah Port Lokal"), - ("setup_server_tip", "Sudah siap, Untuk koneksi yang lebih stabil, anda bisa menjalankan di servermu sendiri"), + ("setup_server_tip", "Sudah siap, Untuk mendapatkan koneksi yang lebih baik, disarankan untuk menginstal di server anda sendiri"), ("Too short, at least 6 characters.", "Terlalu pendek, setidaknya 6 karekter."), ("The confirmation is not identical.", "Konfirmasi tidak identik."), ("Permissions", "Izin"), From 257227920d7da51d0c4c5d38cfdd56051572bb56 Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 24 Aug 2023 12:24:08 +0800 Subject: [PATCH 530/612] Fix missing menu action Signed-off-by: fufesou --- flutter/lib/desktop/pages/remote_tab_page.dart | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 1dd291e3b..4467adad4 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -20,7 +20,6 @@ import 'package:get/get.dart'; import 'package:bot_toast/bot_toast.dart'; import '../../common/widgets/dialog.dart'; -import '../../models/model.dart'; import '../../models/platform_model.dart'; class _MenuTheme { @@ -359,7 +358,15 @@ class _ConnectionTabPageState extends State { )); } - if (perms['keyboard'] != false && !ffi.ffiModel.viewOnly) {} + if (perms['keyboard'] != false && !ffi.ffiModel.viewOnly) { + menu.add(RemoteMenuEntry.insertLock(sessionId, padding, + dismissFunc: cancelFunc)); + + if (pi.platform == kPeerPlatformLinux || pi.sasEnabled) { + menu.add(RemoteMenuEntry.insertCtrlAltDel(sessionId, padding, + dismissFunc: cancelFunc)); + } + } menu.addAll([ MenuEntryDivider(), From c1a577797aef7b23fa4d80d34b6d7fca0dffc33d Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 24 Aug 2023 12:50:39 +0800 Subject: [PATCH 531/612] Revert Ctrl+Alt+Del in toolbar right menu Signed-off-by: fufesou --- flutter/lib/desktop/pages/remote_tab_page.dart | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 4467adad4..bc4c6b243 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -358,15 +358,7 @@ class _ConnectionTabPageState extends State { )); } - if (perms['keyboard'] != false && !ffi.ffiModel.viewOnly) { - menu.add(RemoteMenuEntry.insertLock(sessionId, padding, - dismissFunc: cancelFunc)); - - if (pi.platform == kPeerPlatformLinux || pi.sasEnabled) { - menu.add(RemoteMenuEntry.insertCtrlAltDel(sessionId, padding, - dismissFunc: cancelFunc)); - } - } + if (perms['keyboard'] != false && !ffi.ffiModel.viewOnly) {} menu.addAll([ MenuEntryDivider(), From 56ff88934f238416d6c4ddd996191ddf55f30981 Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 24 Aug 2023 13:07:36 +0800 Subject: [PATCH 532/612] Add RemoteToolbar to Obx(()) to rebuild after pi is recved Signed-off-by: fufesou --- flutter/lib/desktop/pages/remote_page.dart | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index f8151e059..091b0afaf 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -266,24 +266,24 @@ class _RemotePageState extends State }, inputModel: _ffi.inputModel, child: getBodyForDesktop(context))), - Obx( - () => _ffi.ffiModel.pi.isSet.isTrue && - _ffi.ffiModel.waitForFirstImage.isTrue - ? emptyOverlay() - : Offstage(), - ), - RemoteToolbar( - id: widget.id, - ffi: _ffi, - state: widget.toolbarState, - onEnterOrLeaveImageSetter: (func) => - _onEnterOrLeaveImage4Toolbar = func, - onEnterOrLeaveImageCleaner: () => - _onEnterOrLeaveImage4Toolbar = null, - ), - Obx( - () => _ffi.ffiModel.pi.isSet.isFalse ? emptyOverlay() : Offstage(), - ), + Obx(() => Stack( + children: [ + _ffi.ffiModel.pi.isSet.isTrue && + _ffi.ffiModel.waitForFirstImage.isTrue + ? emptyOverlay() + : Offstage(), + RemoteToolbar( + id: widget.id, + ffi: _ffi, + state: widget.toolbarState, + onEnterOrLeaveImageSetter: (func) => + _onEnterOrLeaveImage4Toolbar = func, + onEnterOrLeaveImageCleaner: () => + _onEnterOrLeaveImage4Toolbar = null, + ), + _ffi.ffiModel.pi.isSet.isFalse ? emptyOverlay() : Offstage(), + ], + )), ], ), ); From 9937650062e4185ba18b13625738b98550eb4e8d Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 24 Aug 2023 14:40:02 +0800 Subject: [PATCH 533/612] Use Overlay to wrap RemoteToolbar to enable rebuild everytime on click Signed-off-by: fufesou --- flutter/lib/desktop/pages/remote_page.dart | 23 +++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 091b0afaf..7e6e8ff86 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -238,6 +238,14 @@ class _RemotePageState extends State ); Widget buildBody(BuildContext context) { + remoteToolbar(BuildContext context) => RemoteToolbar( + id: widget.id, + ffi: _ffi, + state: widget.toolbarState, + onEnterOrLeaveImageSetter: (func) => + _onEnterOrLeaveImage4Toolbar = func, + onEnterOrLeaveImageCleaner: () => _onEnterOrLeaveImage4Toolbar = null, + ); return Scaffold( backgroundColor: Theme.of(context).colorScheme.background, body: Stack( @@ -272,15 +280,12 @@ class _RemotePageState extends State _ffi.ffiModel.waitForFirstImage.isTrue ? emptyOverlay() : Offstage(), - RemoteToolbar( - id: widget.id, - ffi: _ffi, - state: widget.toolbarState, - onEnterOrLeaveImageSetter: (func) => - _onEnterOrLeaveImage4Toolbar = func, - onEnterOrLeaveImageCleaner: () => - _onEnterOrLeaveImage4Toolbar = null, - ), + // Use Overlay to enable rebuild every time on menu button click. + _ffi.ffiModel.pi.isSet.isTrue + ? Overlay(initialEntries: [ + OverlayEntry(builder: remoteToolbar) + ]) + : remoteToolbar(context), _ffi.ffiModel.pi.isSet.isFalse ? emptyOverlay() : Offstage(), ], )), From 63a19bc0a1df9c5f7da9557327fde73617b7b3d5 Mon Sep 17 00:00:00 2001 From: Jimmy GALLAND Date: Thu, 24 Aug 2023 22:33:27 +0200 Subject: [PATCH 534/612] update fr.rs --- src/lang/fr.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lang/fr.rs b/src/lang/fr.rs index f9263d572..211927293 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -227,14 +227,14 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Search ID", "Rechercher un ID"), ("whitelist_sep", "Vous pouvez utiliser une virgule, un point-virgule, un espace ou une nouvelle ligne comme séparateur"), ("Add ID", "Ajouter un ID"), - ("Add Tag", "Ajouter une balise"), + ("Add Tag", "Ajout étiquette(s)"), ("Unselect all tags", "Désélectionner toutes les étiquettes"), ("Network error", "Erreur réseau"), ("Username missed", "Nom d'utilisateur manquant"), ("Password missed", "Mot de passe manquant"), ("Wrong credentials", "Identifiant ou mot de passe erroné"), ("The verification code is incorrect or has expired", "Le code de vérification est incorrect ou a expiré"), - ("Edit Tag", "Modifier la balise"), + ("Edit Tag", "Gestion étiquettes"), ("Unremember Password", "Oublier le Mot de passe"), ("Favorites", "Favoris"), ("Add to Favorites", "Ajouter aux Favoris"), @@ -245,7 +245,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Hostname", "Nom d'hôte"), ("Discovered", "Découvert"), ("install_daemon_tip", "Pour une exécution au démarrage du système, vous devez installer le service système."), - ("Remote ID", "ID de l'appareil à distance"), + ("Remote ID", "ID de l'appareil distant"), ("Paste", "Coller"), ("Paste here?", "Coller ici?"), ("Are you sure to close the connection?", "Êtes-vous sûr de fermer la connexion?"), @@ -382,7 +382,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Write a message", "Ecrire un message"), ("Prompt", ""), ("Please wait for confirmation of UAC...", "Veuillez attendre la confirmation de l'UAC..."), - ("elevated_foreground_window_tip", "La fenêtre actuelle que l'appareil distant nécessite des privilèges plus élevés pour fonctionner, elle ne peut donc pas être atteinte par la souris et le clavier. Vous pouvez demander à l'utilisateur distant de réduire la fenêtre actuelle ou de cliquer sur le bouton d'élévation dans la fenêtre de gestion des connexions. Pour éviter ce problème, il est recommandé d'installer le logiciel sur l'appareil distant."), + ("elevated_foreground_window_tip", "La fenêtre actuelle de l'appareil distant nécessite des privilèges plus élevés pour fonctionner, elle ne peut donc pas être atteinte par la souris et le clavier. Vous pouvez demander à l'utilisateur distant de réduire la fenêtre actuelle ou de cliquer sur le bouton d'élévation dans la fenêtre de gestion des connexions. Pour éviter ce problème, il est recommandé d'installer le logiciel sur l'appareil distant."), ("Disconnected", "Déconnecté"), ("Other", "Divers"), ("Confirm before closing multiple tabs", "Confirmer avant de fermer plusieurs onglets"), @@ -452,7 +452,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Auto", "Auto"), ("Other Default Options", "Autres options par défaut"), ("Voice call", "Appel voix"), - ("Text chat", "Conversation textuelfle"), + ("Text chat", "Conversation textuelle"), ("Stop voice call", "Stopper l'appel voix"), ("relay_hint_tip", "Il se peut qu'il ne doit pas possible de se connecter directement, vous pouvez essayer de vous connecter via un relais. \nEn outre, si vous souhaitez utiliser directement le relais, vous pouvez ajouter le suffixe \"/r\" à l'ID ou sélectionner l'option \"Toujours se connecter via le relais\" dans la fiche appareils distants."), ("Reconnect", "Se reconnecter"), @@ -470,8 +470,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Maximize", "Maximiser"), ("Your Device", "Votre appareil"), ("empty_recent_tip", "Oups, pas de sessions récentes!\nIl est temps d'en prévoir une nouvelle."), - ("empty_favorite_tip", "Vous n'avez pas encore d'appareils distants favorits?\nTrouvons quelqu'un avec qui vous connecter et ajoutez-la à vos favoris!"), - ("empty_lan_tip", "Oh non, il semble que nous n'ayons pas encore d'appareil réseaux local découverts."), + ("empty_favorite_tip", "Vous n'avez pas encore d'appareils distants favorits?\nTrouvons quelqu'un avec qui vous connecter et ajoutez-les à vos favoris!"), + ("empty_lan_tip", "Oh non, il semble que nous n'ayons pas encore d'appareils réseau local découverts."), ("empty_address_book_tip", "Ouh là là! il semble qu'il n'y ait actuellement aucun appareil distant répertorié dans votre carnet d'adresses."), ("eg: admin", "ex: admin"), ("Empty Username", "Nom d'utilisation non spécifié"), @@ -538,8 +538,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Impossible d'actualiser le carnet d'adresses"), ("push_ab_failed_tip", "Échec de la synchronisation du carnet d'adresses"), ("synced_peer_readded_tip", "Les appareils qui étaient présents dans les sessions récentes seront synchronisés avec le carnet d'adresses."), - ("Change Color", ""), - ("Primary Color", ""), - ("HSV Color", ""), + ("Change Color", "Modifier la couleur"), + ("Primary Color", "Couleur primaire"), + ("HSV Color", "Couleur TSL"), ].iter().cloned().collect(); -} +} \ No newline at end of file From a957acd893e83417ce8adb99134250083c1ef97a Mon Sep 17 00:00:00 2001 From: rustdesk Date: Fri, 25 Aug 2023 15:19:00 +0800 Subject: [PATCH 535/612] remove LSUIElement=1 in info.plist so that system menu can be shown --- build.py | 7 ------- flutter/macos/Runner/Info.plist | 2 -- 2 files changed, 9 deletions(-) diff --git a/build.py b/build.py index 73ea8186d..42dc8d6de 100755 --- a/build.py +++ b/build.py @@ -545,13 +545,6 @@ def main(): 'cp libsciter.dylib target/release/bundle/osx/RustDesk.app/Contents/MacOS/') # https://github.com/sindresorhus/create-dmg system2('/bin/rm -rf *.dmg') - plist = "target/release/bundle/osx/RustDesk.app/Contents/Info.plist" - txt = open(plist).read() - with open(plist, "wt") as fh: - fh.write(txt.replace("", """ - LSUIElement - 1 - """)) pa = os.environ.get('P') if pa: system2(''' diff --git a/flutter/macos/Runner/Info.plist b/flutter/macos/Runner/Info.plist index 96616e8c4..ff9322417 100644 --- a/flutter/macos/Runner/Info.plist +++ b/flutter/macos/Runner/Info.plist @@ -37,8 +37,6 @@ $(FLUTTER_BUILD_NUMBER) LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) - LSUIElement - 1 NSHumanReadableCopyright $(PRODUCT_COPYRIGHT) NSMainNibFile From 0e9950638c9e66f7cb64d1250a5ad8a6aec2426b Mon Sep 17 00:00:00 2001 From: Mert Sonmez <109958428+SnmzTony@users.noreply.github.com> Date: Fri, 25 Aug 2023 12:21:33 +0300 Subject: [PATCH 536/612] Create README-TR.md --- docs/README-TR.md | 223 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 docs/README-TR.md diff --git a/docs/README-TR.md b/docs/README-TR.md new file mode 100644 index 000000000..efc8aa1d8 --- /dev/null +++ b/docs/README-TR.md @@ -0,0 +1,223 @@ + +

    + RustDesk - Uzak masaüstü uygulamanız
    + Sunucular • + Derleme • + Docker ile Derleme • + Dosya Yapısı • + Ekran Görüntüleri
    + [Українська] | [česky] | [中文] | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي] | [Tiếng Việt] | [Dansk] | [Ελληνικά]
    + README, RustDesk UI ve RustDesk Belge'sini ana dilinize çevirmemiz için yardımınıza ihtiyacımız var +

    + +Bizimle sohbet edin: [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) + +Başka bir uzak masaüstü yazılımı daha, Rust dilinde yazılmış. Hemen kullanıma hazır, hiçbir yapılandırma gerektirmez. Verilerinizin tam kontrolünü elinizde tutarsınız ve güvenlikle ilgili endişeleriniz olmaz. Kendi buluş/iletme sunucumuzu kullanabilirsiniz, [kendi sunucunuzu kurabilirsiniz](https://rustdesk.com/server) veya [kendi buluş/iletme sunucunuzu yazabilirsiniz](https://github.com/rustdesk/rustdesk-server-demo). + +![image](https://user-images.githubusercontent.com/71636191/171661982-430285f0-2e12-4b1d-9957-4a58e375304d.png) + +RustDesk, herkesten katkıyı kabul eder. Başlamak için [CONTRIBUTING.md](docs/CONTRIBUTING.md) belgesine göz atın. + +[**SSS**](https://github.com/rustdesk/rustdesk/wiki/FAQ) + +[**BİNARİ İNDİR**](https://github.com/rustdesk/rustdesk/releases) + +[**NİGHTLY DERLEME**](https://github.com/rustdesk/rustdesk/releases/tag/nightly) + +[F-Droid'de Alın](https://f-droid.org/en/packages/com.carriez.flutter_hbb) + +## Ücretsiz Genel Sunucular + +Aşağıda ücretsiz olarak kullandığınız sunucular listelenmiştir, zaman içinde değişebilirler. Eğer bunlardan birine yakın değilseniz, ağınız yavaş olabilir. +| Konum | Sağlayıcı | Özellikler | +| --------- | ------------- | ------------------ | +| Almanya | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4 GB RAM | +| Almanya | [Codext](https://codext.de) | 4 vCPU / 8 GB RAM | +| Ukrayna (Kiev) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | + +## Geliştirici Konteyneri + +[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Container&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/rustdesk/rustdesk) + +Eğer zaten VS Code ve Docker kurulu ise yukarıdaki rozete tıklayarak başlayabilirsiniz. Tıklamak, VS Code'un gerektiğinde Dev Konteyner eklentisini otomatik olarak yüklemesine, kaynak kodunu bir konteyner hacmine klonlamasına ve kullanım için bir geliştirici konteyneri başlatmasına neden olur. + +Daha fazla bilgi için [DEVCONTAINER.md](docs/DEVCONTAINER.md) belgesine bakabilirsiniz. + +## Bağımlılıklar + +Masaüstü sürümleri GUI için + + [Sciter](https://sciter.com/) veya Flutter kullanır, bu kılavuz sadece Sciter içindir. + +Lütfen Sciter dinamik kütüphanesini kendiniz indirin. + +[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) + +## Temel Derleme Adımları + +- Rust geliştirme ortamınızı ve C++ derleme ortamınızı hazırlayın. + +- [vcpkg](https://github.com/microsoft/vcpkg) yükleyin ve `VCPKG_ROOT` çevresel değişkenini doğru bir şekilde ayarlayın. + + - Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static + - Linux/macOS: vcpkg install libvpx libyuv opus aom + +- `cargo run` komutunu çalıştırın. + +## [Derleme](https://rustdesk.com/docs/en/dev/build/) + +## Linux Üzerinde Derleme Nasıl Yapılır + +### Ubuntu 18 (Debian 10) + +```sh +sudo apt install -y zip 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 make \ + libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev +``` + +### openSUSE Tumbleweed + +```sh +sudo zypper install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libXfixes-devel cmake alsa-lib-devel gstreamer-devel gstreamer-plugins-base-devel xdotool-devel +``` + +### Fedora 28 (CentOS 8) + +```sh +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 pipewire +``` + +### vcpkg'yi Yükleyin + +```sh +git clone https://github.com/microsoft/vcpkg +cd vcpkg +git checkout 2023.04.15 +cd .. +vcpkg/bootstrap-vcpkg.sh +export VCPKG_ROOT=$HOME/vcpkg +vcpkg/vcpkg install libvpx libyuv opus aom +``` + +### libvpx'i Düzeltin (Fedora için) + +```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 +``` + +### Derleme + +```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 +``` + +### Wayland'ı X11 (Xorg) Olarak Değiştirme + +RustDesk, Wayland'ı desteklemez. Xorg'u GNOME oturumu olarak varsayılan olarak ayarlamak için [burayı](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) kontrol edin. + +## Wayland Desteği + +Wayland'ın diğer pencerelere tuş vuruşu göndermek için herhangi bir API sağlamadığı görünmektedir. Bu nedenle, RustDesk daha düşük bir seviyeden, yani Linux çekirdek seviyesindeki `/dev/uinput` cihazının API'sini kullanır. + +Wayland tarafı kontrol edildiğinde, aşağıdaki şekilde başlatmanız gerekir: +```bash +# uinput servisini başlatın +$ sudo rustdesk --service +$ rustdesk +``` +**Uyarı**: Wayland ekran kaydı farklı arayüzler kullanır. RustDesk şu anda yalnızca org.freedesktop.portal.ScreenCast'ı destekler. +```bash +$ dbus-send --session --print-reply \ + --dest=org.freedesktop.portal.Desktop \ + /org/freedesktop/portal/desktop \ + org.freedesktop.DBus.Properties.Get \ + string:org.freedesktop.portal.ScreenCast string:version +# Desteklenmez +Error org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.ScreenCast” +# Desteklenir +method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=257 reply_serial=2 + variant uint32 4 +``` + +## Docker ile Derleme Nasıl Yapılır + +Öncelikle deposunu klonlayın ve Docker konteynerini oluşturun: + +```sh +git clone https://github.com/rustdesk/rustdesk +cd rustdesk +docker build -t "rustdesk-builder" . +``` + +Ardından, uygulamayı derlemek için her seferinde aşağıdaki komutu çalıştırın: + +```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 +``` + +İlk derleme, bağımlılıklar önbelleğe alınmadan önce daha uzun sürebilir, sonraki derlemeler daha hızlı olacaktır. Ayrıca, derleme komutuna isteğe bağlı argümanlar belirtmeniz gerekiyorsa, bunu + + komutun sonunda `<İSTEĞE BAĞLI-ARGÜMANLAR>` pozisyonunda yapabilirsiniz. Örneğin, optimize edilmiş bir sürümü derlemek isterseniz, yukarıdaki komutu çalıştırdıktan sonra `--release` ekleyebilirsiniz. Oluşan yürütülebilir dosya sisteminizdeki hedef klasöründe bulunacak ve şu komutla çalıştırılabilir: + +```sh +target/debug/rustdesk +``` + +Veya, yayın yürütülebilir dosyası çalıştırılıyorsa: + +```sh +target/release/rustdesk +``` + +Lütfen bu komutları RustDesk deposunun kökünden çalıştırdığınızdan emin olun, aksi takdirde uygulama gereken kaynakları bulamayabilir. Ayrıca, `install` veya `run` gibi diğer cargo altkomutları şu anda bu yöntem aracılığıyla desteklenmemektedir, çünkü bunlar programı konteyner içinde kurar veya çalıştırır ve ana makinede değil. + +## Dosya Yapısı + +- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: video kodlayıcı, yapılandırma, tcp/udp sarmalayıcı, protobuf, dosya transferi için fs işlevleri ve diğer bazı yardımcı işlevler +- **[libs/scrap](https://github.com/rustdesk/rustdesk/tree/master/libs/scrap)**: ekran yakalama +- **[libs/enigo](https://github.com/rustdesk/rustdesk/tree/master/libs/enigo)**: platforma özgü klavye/fare kontrolü +- **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: GUI +- **[src/server](https://github.com/rustdesk/rustdesk/tree/master/src/server)**: ses/pasta/klavye/video hizmetleri ve ağ bağlantıları +- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: bir eş bağlantısı başlatır +- **[src/rendezvous_mediator.rs](https://github.com/rustdesk/rustdesk/tree/master/src/rendezvous_mediator.rs)**: [rustdesk-server](https://github.com/rustdesk/rustdesk-server) ile iletişim kurar, uzak doğrudan (TCP delik vurma) veya iletme bağlantısını bekler +- **[src/platform](https://github.com/rustdesk/rustdesk/tree/master/src/platform)**: platforma özgü kod +- **[flutter](https://github.com/rustdesk/rustdesk/tree/master/flutter)**: mobil için Flutter kodu +- **[flutter/web/js](https://github.com/rustdesk/rustdesk/tree/master/flutter/web/js)**: Flutter web istemcisi için JavaScript + +## Ekran Görüntüleri + +![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) +``` From 80082b0880c09bf6c1e77957db6d01584062ece7 Mon Sep 17 00:00:00 2001 From: Mert Sonmez <109958428+SnmzTony@users.noreply.github.com> Date: Fri, 25 Aug 2023 14:32:27 +0300 Subject: [PATCH 537/612] Create CODE_OF_CONDUCT-TR.md --- docs/CODE_OF_CONDUCT-TR.md | 89 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 docs/CODE_OF_CONDUCT-TR.md diff --git a/docs/CODE_OF_CONDUCT-TR.md b/docs/CODE_OF_CONDUCT-TR.md new file mode 100644 index 000000000..76088bd95 --- /dev/null +++ b/docs/CODE_OF_CONDUCT-TR.md @@ -0,0 +1,89 @@ +# Katkıda Bulunanların Davranış Kuralları + +## Taahhüdümüz + +Biz üyeler, katkıda bulunanlar ve liderler olarak, yaş, beden büyüklüğü, görünür veya görünmez engellilik, etnik köken, cinsiyet özellikleri, cinsiyet kimliği ve ifadesi, deneyim seviyesi, eğitim, sosyo-ekonomik durum, milliyet, kişisel görünüm, ırk, din veya cinsel kimlik ve yönelim ayrımı gözetmeksizin herkes için topluluğumuzdaki katılımı taciz içermeyen bir deneyim haline getirmeyi taahhüt ederiz. + +Açık, hoşgörülü, çeşitli, kapsayıcı ve sağlıklı bir topluluğa katkıda bulunacak şekillerde hareket etmeyi ve etkileşimde bulunmayı taahhüt ederiz. + +## Standartlarımız + +Topluluğumuz için olumlu bir ortam yaratmaya katkıda bulunan davranış örnekleri şunlardır: + +* Diğer insanlara empati ve nezaket göstermek +* Farklı görüşlere, bakış açılarına ve deneyimlere saygılı olmak +* Yapıcı eleştiriyi vermek ve zarifçe kabul etmek +* Hatalarımızdan etkilenenlere sorumluluk kabul etmek, özür dilemek ve deneyimden öğrenmek +* Sadece bireyler olarak değil, aynı zamanda genel topluluk için en iyisi üzerine odaklanmak + +Kabul edilemez davranış örnekleri şunları içerir: + +* Cinselleştirilmiş dil veya imgelerin kullanımı ve cinsel ilgi veya herhangi bir türdeki yaklaşımlar +* Trollük, aşağılayıcı veya hakaret içeren yorumlar ve kişisel veya siyasi saldırılar +* Kamuoyu veya özel taciz +* Başkalarının fiziksel veya e-posta adresi gibi özel bilgilerini, açık izinleri olmadan yayınlamak +* Profesyonel bir ortamda makul bir şekilde uygunsuz kabul edilebilecek diğer davranışlar + +## Uygulama Sorumlulukları + +Topluluk liderleri, kabul edilebilir davranış standartlarımızı açıklığa kavuşturmak ve uygulamakla sorumludur ve uygunsuz, tehditkar, saldırgan veya zarar verici herhangi bir davranışa yanıt olarak uygun ve adil düzeltici önlemler alacaklardır. + +Topluluk liderleri, bu Davranış Kurallarına uyumlu olmayan yorumları, taahhütlerini veya kodu, wiki düzenlemelerini, sorunları ve diğer katkıları kaldırma, düzenleme veya reddetme hakkına sahiptir. Denetim kararlarının nedenlerini uygun olduğunda ileteceklerdir. + +## Kapsam + +Bu Davranış Kuralları, tüm topluluk alanlarında geçerlidir ve aynı zamanda birey resmi olarak topluluğu halka açık alanlarda temsil ettiğinde de geçerlidir. Topluluğumuzu temsil etme örnekleri, resmi bir e-posta adresi kullanmak, resmi bir sosyal medya hesabı üzerinden gönderi yapmak veya çevrimiçi veya çevrimdışı bir etkinlikte atanmış bir temsilci olarak hareket etmeyi içerir. + +## Uygulama + +Taciz edici, rahatsız edici veya başka türlü kabul edilemez davranış örnekleri, [info@rustdesk.com](mailto:info@rustdesk.com) adresindeki uygulama sorumlularına bildirilebilir. Tüm şikayetler hızlı ve adil bir şekilde incelenecek ve araştırılacaktır. + +Tüm topluluk liderleri, olayın raporlayıcısının gizliliğine ve güvenliğine saygı gösterme yükümlülüğündedir. + +## Uygulama Kılavuzları + +Topluluk liderleri, bu Davranış Kurallarını ihlal olarak değerlendirdikleri herhangi bir eylem için bu Topluluk Etkisi Kılavuzlarını izleyeceklerdir: + +### 1. Düzeltme + +**Topluluk Etkisi**: Topluluk içinde profesyonel veya hoşgörülü olmayan uygun olmayan dil veya diğer davranışların kullanımı. + +**Sonuç**: Topluluk liderlerinden özel ve yazılı bir uyarı almak, ihlalin niteliği ve davranışın nedeninin açıklığa kavuşturulması. Bir kamu özrü istenebilir. + +### 2. Uyarı + +**Topluluk Etkisi**: Tek bir olay veya dizi aracılığıyla bir ihlal. + +**Sonuç**: Devam eden davranış için sonuçları olan bir uyarı. Topluluk liderleri de dahil olmak üzere ihlalle ilgili kişilerle etkileşim, belirli bir süre boyunca önerilmez. Bu, topluluk alanlarında ve sosyal medya gibi harici kanallarda etkileşimleri içerir. Bu koşulları ihlal etmek geçici veya kalıcı bir yasağa yol açabilir. + +### 3. Geçici Yasak + +**Topluluk Etkisi**: Sürekli uygunsuz davranış da dahil olmak üzere topluluk standartlarının ciddi bir ihlali. + +**Sonuç**: Belirli bir süre için toplulukla herhangi bir türdeki etkileşim veya halka açık iletişimden geçici bir yasak. Bu dönem boyunca, toplul + +ukla veya uygulama kurallarını uygulayanlarla her türlü kamuoyu veya özel etkileşim izin verilmez. Bu koşulları ihlal etmek geçici veya kalıcı bir yasağa yol açabilir. + +### 4. Kalıcı Yasak + +**Topluluk Etkisi**: Topluluk standartlarının ihlalinde sürekli bir desen sergilemek, bireye sürekli olarak uygun olmayan davranışlarda bulunmak, bir bireye tacizde bulunmak veya birey sınıflarına karşı saldırganlık veya aşağılama yapmak. + +**Sonuç**: Topluluk içinde her türlü halka açık etkileşimden kalıcı bir yasak. + +## Atıf + +Bu Davranış Kuralları, [Contributor Covenant][anasayfa], 2.0 sürümünden uyarlanmıştır ve +[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0] adresinde bulunmaktadır. + +Topluluk Etkisi Kılavuzları, +[Mozilla'nın davranış kuralları uygulama merdiveni][Mozilla DK] tarafından ilham alınarak oluşturulmuştur. + +Bu davranış kuralları hakkında yaygın soruların cevapları için, SSS'ye göz atın: +[https://www.contributor-covenant.org/faq][SSS]. Çeviriler, +[https://www.contributor-covenant.org/translations][çeviriler] adresinde bulunabilir. + +[anasayfa]: https://www.contributor-covenant.org +[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html +[Mozilla DK]: https://github.com/mozilla/diversity +[SSS]: https://www.contributor-covenant.org/faq +[çeviriler]: https://www.contributor-covenant.org/translations From dd5c9939a04263b204555aea2235b3a61e76546a Mon Sep 17 00:00:00 2001 From: Mert Sonmez <109958428+SnmzTony@users.noreply.github.com> Date: Fri, 25 Aug 2023 14:35:45 +0300 Subject: [PATCH 538/612] Create CONTRIBUTING-TR.md --- docs/CONTRIBUTING-TR.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/CONTRIBUTING-TR.md diff --git a/docs/CONTRIBUTING-TR.md b/docs/CONTRIBUTING-TR.md new file mode 100644 index 000000000..6e9e3f3ed --- /dev/null +++ b/docs/CONTRIBUTING-TR.md @@ -0,0 +1,31 @@ +# RustDesk'a Katkı Sağlamak + +RustDesk, herkesten katkıyı memnuniyetle karşılar. Eğer bize yardımcı olmayı düşünüyorsanız, işte rehberlik eden kurallar: + +## Katkılar + +RustDesk veya bağımlılıklarına yapılan katkılar, GitHub pull istekleri şeklinde yapılmalıdır. Her bir pull isteği, çekirdek katkıcı tarafından gözden geçirilecek (yamaları kabul etme izni olan biri) ve ana ağaca kabul edilecek veya gerekli değişiklikler için geri bildirim verilecektir. Tüm katkılar bu formata uymalıdır, çekirdek katkıcılardan gelenler bile. + +Eğer bir konu üzerinde çalışmak isterseniz, önce üzerinde çalışmak istediğinizi belirten bir yorum yaparak konuyu talep ediniz. Bu, katkı sağlayanların aynı konuda çift çalışmasını engellemek içindir. + +## Pull İstek Kontrol Listesi + +- Master dalından dallandırın ve gerekiyorsa pull isteğinizi göndermeden önce mevcut master dalına rebase yapın. Eğer master ile temiz bir şekilde birleşmezse, değişikliklerinizi rebase yapmanız istenebilir. + +- Her bir commit mümkün olduğunca küçük olmalıdır, ancak her commit'in bağımsız olarak doğru olduğundan emin olun (örneğin, her commit derlenebilir ve testleri geçmelidir). + +- Commit'ler, bir Geliştirici Sertifikası ile desteklenmelidir (http://developercertificate.org). Bu, [proje lisansının](../LICENCE) koşullarına uymayı kabul ettiğinizi gösteren bir onaydır. Git'te bunu `git commit` seçeneği olarak `-s` seçeneği ile yapabilirsiniz. + +- Yamalarınız gözden geçirilmiyorsa veya belirli bir kişinin gözden geçirmesine ihtiyacınız varsa, çekme isteği veya yorum içinde bir gözden geçirmeyi istemek için bir inceleyiciyi @etiketleyebilir veya inceleme için [e-posta](mailto:info@rustdesk.com) ile talep edebilirsiniz. + +- Düzelttiğiniz hatanın veya eklediğiniz yeni özelliğin ilgili testlerini ekleyin. + +Daha spesifik git talimatları için, [GitHub iş akışı 101](https://github.com/servo/servo/wiki/GitHub-workflow)'e bakınız. + +## Davranış + +https://github.com/rustdesk/rustdesk/blob/master/docs/CODE_OF_CONDUCT-TR.md + +## İletişim + +RustDesk katkı sağlayıcıları, [Discord](https://discord.gg/nDceKgxnkV) kanalını sık sık ziyaret ederler. From c618bdfe910c48bafe7bd3ca838b16d9ac46c41d Mon Sep 17 00:00:00 2001 From: Mert Sonmez <109958428+SnmzTony@users.noreply.github.com> Date: Fri, 25 Aug 2023 14:36:28 +0300 Subject: [PATCH 539/612] Update README-TR.md --- docs/README-TR.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README-TR.md b/docs/README-TR.md index efc8aa1d8..18f2ed2c5 100644 --- a/docs/README-TR.md +++ b/docs/README-TR.md @@ -18,7 +18,7 @@ Başka bir uzak masaüstü yazılımı daha, Rust dilinde yazılmış. Hemen kul ![image](https://user-images.githubusercontent.com/71636191/171661982-430285f0-2e12-4b1d-9957-4a58e375304d.png) -RustDesk, herkesten katkıyı kabul eder. Başlamak için [CONTRIBUTING.md](docs/CONTRIBUTING.md) belgesine göz atın. +RustDesk, herkesten katkıyı kabul eder. Başlamak için [CONTRIBUTING.md](docs/CONTRIBUTING-TR.md) belgesine göz atın. [**SSS**](https://github.com/rustdesk/rustdesk/wiki/FAQ) From 3162fcf154727f354a3c75eb9bd6304374674e3e Mon Sep 17 00:00:00 2001 From: Mert Sonmez <109958428+SnmzTony@users.noreply.github.com> Date: Fri, 25 Aug 2023 14:38:38 +0300 Subject: [PATCH 540/612] Create SECURITY-TR.md --- docs/SECURITY-TR.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 docs/SECURITY-TR.md diff --git a/docs/SECURITY-TR.md b/docs/SECURITY-TR.md new file mode 100644 index 000000000..88037acb2 --- /dev/null +++ b/docs/SECURITY-TR.md @@ -0,0 +1,9 @@ +# Güvenlik Politikası + +## Bir Güvenlik Açığı Bildirme + +Projemiz için güvenliği çok önemsiyoruz. Kullanıcıların keşfettikleri herhangi bir güvenlik açığını bize bildirmelerini teşvik ediyoruz. +Eğer RustDesk projesinde bir güvenlik açığı bulursanız, lütfen info@rustdesk.com adresine sorumlu bir şekilde bildirin. + +Şu an için bir hata ödül programımız bulunmamaktadır. Büyük bir sorunu çözmeye çalışan küçük bir ekibiz. Herhangi bir güvenlik açığını sorumlu bir şekilde bildirmenizi rica ederiz, +böylece tüm topluluk için güvenli bir uygulama oluşturmaya devam edebiliriz. From 77fa3bd7fc6583162e8cc405fa7ba0e7064bd5f8 Mon Sep 17 00:00:00 2001 From: Mert Sonmez <109958428+SnmzTony@users.noreply.github.com> Date: Fri, 25 Aug 2023 14:40:02 +0300 Subject: [PATCH 541/612] Create DEVCONTAINER-TR.md --- docs/DEVCONTAINER-TR.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 docs/DEVCONTAINER-TR.md diff --git a/docs/DEVCONTAINER-TR.md b/docs/DEVCONTAINER-TR.md new file mode 100644 index 000000000..7fc14ce5e --- /dev/null +++ b/docs/DEVCONTAINER-TR.md @@ -0,0 +1,12 @@ +Docker konteynerinde devcontainer'ın başlatılmasından sonra, hata ayıklama modunda bir Linux ikili dosyası oluşturulur. + +Şu anda devcontainer, hata ayıklama ve sürüm modunda hem Linux hem de Android derlemeleri sunmaktadır. + +Aşağıda, belirli derlemeler oluşturmak için projenin kökünden çalıştırılması gereken komutlar yer almaktadır. + +Komut | Derleme Türü | Mod +-|-|- +`.devcontainer/build.sh --debug linux` | Linux | hata ayıklama +`.devcontainer/build.sh --release linux` | Linux | sürüm +`.devcontainer/build.sh --debug android` | Android-arm64 | hata ayıklama +`.devcontainer/build.sh --release android` | Android-arm64 | sürüm From d1bc8a72028e6a4dd5d7d9823db23abd7b369fbf Mon Sep 17 00:00:00 2001 From: Mert Sonmez <109958428+SnmzTony@users.noreply.github.com> Date: Fri, 25 Aug 2023 14:41:37 +0300 Subject: [PATCH 542/612] Update README-TR.md --- docs/README-TR.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README-TR.md b/docs/README-TR.md index 18f2ed2c5..fa1f79c37 100644 --- a/docs/README-TR.md +++ b/docs/README-TR.md @@ -45,7 +45,7 @@ Aşağıda ücretsiz olarak kullandığınız sunucular listelenmiştir, zaman i Eğer zaten VS Code ve Docker kurulu ise yukarıdaki rozete tıklayarak başlayabilirsiniz. Tıklamak, VS Code'un gerektiğinde Dev Konteyner eklentisini otomatik olarak yüklemesine, kaynak kodunu bir konteyner hacmine klonlamasına ve kullanım için bir geliştirici konteyneri başlatmasına neden olur. -Daha fazla bilgi için [DEVCONTAINER.md](docs/DEVCONTAINER.md) belgesine bakabilirsiniz. +Daha fazla bilgi için [DEVCONTAINER.md](docs/DEVCONTAINER-TR.md) belgesine bakabilirsiniz. ## Bağımlılıklar From 301abcaa493d76cf8ad705e19159fa4b004b9d23 Mon Sep 17 00:00:00 2001 From: Mert Sonmez <109958428+SnmzTony@users.noreply.github.com> Date: Fri, 25 Aug 2023 16:10:09 +0300 Subject: [PATCH 543/612] Update tr.rs --- src/lang/tr.rs | 266 ++++++++++++++++++++++++------------------------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 3c3a10da2..f8295e2c4 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -408,138 +408,138 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-time password length", "Tek seferlik şifre uzunluğu"), ("Request access to your device", "Cihazınıza erişim talep edin"), ("Hide connection management window", "Bağlantı yönetimi penceresini gizle"), - ("hide_cm_tip", ""), - ("wayland_experiment_tip", ""), - ("Right click to select tabs", ""), - ("Skipped", ""), - ("Add to Address Book", ""), - ("Group", ""), - ("Search", ""), - ("Closed manually by web console", ""), - ("Local keyboard type", ""), - ("Select local keyboard type", ""), - ("software_render_tip", ""), - ("Always use software rendering", ""), - ("config_input", ""), - ("config_microphone", ""), - ("request_elevation_tip", ""), - ("Wait", ""), - ("Elevation Error", ""), - ("Ask the remote user for authentication", ""), - ("Choose this if the remote account is administrator", ""), - ("Transmit the username and password of administrator", ""), - ("still_click_uac_tip", ""), - ("Request Elevation", ""), - ("wait_accept_uac_tip", ""), - ("Elevate successfully", ""), - ("uppercase", ""), - ("lowercase", ""), - ("digit", ""), - ("special character", ""), - ("length>=8", ""), - ("Weak", ""), - ("Medium", ""), - ("Strong", ""), - ("Switch Sides", ""), - ("Please confirm if you want to share your desktop?", ""), - ("Display", ""), - ("Default View Style", ""), - ("Default Scroll Style", ""), - ("Default Image Quality", ""), - ("Default Codec", ""), - ("Bitrate", ""), - ("FPS", ""), - ("Auto", ""), - ("Other Default Options", ""), - ("Voice call", ""), - ("Text chat", ""), - ("Stop voice call", ""), - ("relay_hint_tip", ""), - ("Reconnect", ""), - ("Codec", ""), - ("Resolution", ""), - ("No transfers in progress", ""), - ("Set one-time password length", ""), - ("install_cert_tip", ""), - ("confirm_install_cert_tip", ""), - ("RDP Settings", ""), - ("Sort by", ""), - ("New Connection", ""), - ("Restore", ""), - ("Minimize", ""), - ("Maximize", ""), - ("Your Device", ""), - ("empty_recent_tip", ""), - ("empty_favorite_tip", ""), - ("empty_lan_tip", ""), - ("empty_address_book_tip", ""), - ("eg: admin", ""), - ("Empty Username", ""), - ("Empty Password", ""), - ("Me", ""), - ("identical_file_tip", ""), - ("show_monitors_tip", ""), - ("View Mode", ""), - ("login_linux_tip", ""), - ("verify_rustdesk_password_tip", ""), - ("remember_account_tip", ""), - ("os_account_desk_tip", ""), - ("OS Account", ""), - ("another_user_login_title_tip", ""), - ("another_user_login_text_tip", ""), - ("xorg_not_found_title_tip", ""), - ("xorg_not_found_text_tip", ""), - ("no_desktop_title_tip", ""), - ("no_desktop_text_tip", ""), - ("No need to elevate", ""), - ("System Sound", ""), - ("Default", ""), - ("New RDP", ""), - ("Fingerprint", ""), - ("Copy Fingerprint", ""), - ("no fingerprints", ""), - ("Select a peer", ""), - ("Select peers", ""), - ("Plugins", ""), - ("Uninstall", ""), - ("Update", ""), - ("Enable", ""), - ("Disable", ""), - ("Options", ""), - ("resolution_original_tip", ""), - ("resolution_fit_local_tip", ""), - ("resolution_custom_tip", ""), - ("Collapse toolbar", ""), - ("Accept and Elevate", ""), - ("accept_and_elevate_btn_tooltip", ""), - ("clipboard_wait_response_timeout_tip", ""), - ("Incoming connection", ""), - ("Outgoing connection", ""), - ("Exit", ""), - ("Open", ""), - ("logout_tip", ""), - ("Service", ""), - ("Start", ""), - ("Stop", ""), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), - ("Open connection in new tab", ""), - ("Move tab to new window", ""), - ("Can not be empty", ""), - ("Already exists", ""), - ("Change Password", ""), - ("Refresh Password", ""), - ("ID", ""), - ("Grid View", ""), - ("List View", ""), - ("Select", ""), - ("Toggle Tags", ""), - ("pull_ab_failed_tip", ""), - ("push_ab_failed_tip", ""), - ("synced_peer_readded_tip", ""), - ("Change Color", ""), - ("Primary Color", ""), - ("HSV Color", ""), + ("hide_cm_tip", "Oturumları yalnızca parola ile kabul edebilir ve kalıcı parola kullanıyorsanız gizlemeye izin verin"), + ("wayland_experiment_tip", "Wayland desteği deneysel aşamada olduğundan, gerektiğinde X11'i kullanmanız önerilir"), + ("Right click to select tabs", "Sekmeleri seçmek için sağ tıklayın"), + ("Skipped", "Atlandı"), + ("Add to Address Book", "Adres Defterine Ekle"), + ("Group", "Grup"), + ("Search", "Ara"), + ("Closed manually by web console", "Web konsoluyla manuel olarak kapatıldı"), + ("Local keyboard type", "Yerel klavye türü"), + ("Select local keyboard type", "Yerel klavye türünü seçin"), + ("software_render_tip", "Linux altında Nvidia grafik kartı kullanıyorsanız ve uzak pencere bağlandıktan hemen sonra kapanıyorsa, açık kaynaklı Nouveau sürücüsüne geçmeyi ve yazılım renderleme seçeneğini seçmeyi deneyin. Yazılımı yeniden başlatmanız gerekebilir."), + ("Always use software rendering", "Her zaman yazılım renderleme kullan"), + ("config_input", "Uzaktaki masaüstünü klavye ile kontrol etmek için RustDesk'e \"Giriş İzleme\" izinleri vermelisiniz."), + ("config_microphone", "Uzaktan konuşmak için RustDesk'e \"Ses Kaydı\" izinleri vermelisiniz."), + ("request_elevation_tip", "Ayrıca, uzak tarafta biri varsa yükseltme isteğinde bulunabilirsiniz."), + ("Wait", "Bekle"), + ("Elevation Error", "Yükseltme Hatası"), + ("Ask the remote user for authentication", "Uzaktaki kullanıcıdan kimlik doğrulamasını isteyin"), + ("Choose this if the remote account is administrator", "Uzak hesap yönetici ise bunu seçin"), + ("Transmit the username and password of administrator", "Yönetici kullanıcı adı ve parolasını iletim yapın"), + ("still_click_uac_tip", "Uzaktaki kullanıcının çalışan RustDesk'in UAC penceresinde hala Tamam'ı tıklaması gerekmektedir."), + ("Request Elevation", "Yükseltme İsteği"), + ("wait_accept_uac_tip", "Lütfen uzaktaki kullanıcının UAC iletişim kutusunu kabul etmesini bekleyin."), + ("Elevate successfully", "Başarıyla yükseltildi"), + ("uppercase", "büyük harf"), + ("lowercase", "küçük harf"), + ("digit", "rakam"), + ("special character", "özel karakter"), + ("length>=8", "uzunluk>=8"), + ("Weak", "Zayıf"), + ("Medium", "Orta"), + ("Strong", "Güçlü"), + ("Switch Sides", "Tarafları Değiştir"), + ("Please confirm if you want to share your desktop?", "Masaüstünüzü paylaşmak isteyip istemediğinizi onaylayın?"), + ("Display", "Görüntüle"), + ("Default View Style", "Varsayılan Görünüm Stili"), + ("Default Scroll Style", "Varsayılan Kaydırma Stili"), + ("Default Image Quality", "Varsayılan Görüntü Kalitesi"), + ("Default Codec", "Varsayılan Kodlayıcı"), + ("Bitrate", "Bit Hızı"), + ("FPS", "FPS"), + ("Auto", "Otomatik"), + ("Other Default Options", "Diğer Varsayılan Seçenekler"), + ("Voice call", "Sesli görüşme"), + ("Text chat", "Metin sohbeti"), + ("Stop voice call", "Sesli görüşmeyi durdur"), + ("relay_hint_tip", "Doğrudan bağlanmak mümkün olmayabilir; röle aracılığıyla bağlanmayı deneyebilirsiniz. Ayrıca, ilk denemenizde bir röle kullanmak istiyorsanız, ID'nin sonuna \"/r\" ekleyebilir veya son oturum kartındaki \"Her Zaman Röle Üzerinden Bağlan\" seçeneğini seçebilirsiniz."), + ("Reconnect", "Yeniden Bağlan"), + ("Codec", "Kodlayıcı"), + ("Resolution", "Çözünürlük"), + ("No transfers in progress", "Devam eden aktarımlar yok"), + ("Set one-time password length", "Bir seferlik parola uzunluğunu ayarla"), + ("install_cert_tip", "RustDesk sertifikasını yükleyin"), + ("confirm_install_cert_tip", "Bu, güvenilir olabilecek bir RustDesk test sertifikasıdır. Sertifika, gerekli olduğunda RustDesk sürücülerini güvenilir ve yüklemek üzere kullanacaktır."), + ("RDP Settings", "RDP Ayarları"), + ("Sort by", "Sırala"), + ("New Connection", "Yeni Bağlantı"), + ("Restore", "Geri Yükle"), + ("Minimize", "Simge Durumuna Küçült"), + ("Maximize", "Büyüt"), + ("Your Device", "Cihazınız"), + ("empty_recent_tip", "Üzgünüz, henüz son oturum yok!\nYeni bir plan yapma zamanı."), + ("empty_favorite_tip", "Henüz favori cihazınız yok mu?\nBağlanacak ve favorilere eklemek için birini bulalım!"), + ("empty_lan_tip", "Hayır, henüz hiçbir cihaz bulamadık gibi görünüyor."), + ("empty_address_book_tip", "Üzgünüm, şu anda adres defterinizde kayıtlı cihaz yok gibi görünüyor."), + ("eg: admin", "örn: admin"), + ("Empty Username", "Boş Kullanıcı Adı"), + ("Empty Password", "Boş Parola"), + ("Me", "Ben"), + ("identical_file_tip", "Bu dosya, cihazın dosyası ile aynıdır."), + ("show_monitors_tip", "Monitörleri araç çubuğunda göster"), + ("View Mode", "Görünüm Modu"), + ("login_linux_tip", "X masaüstü oturumu başlatmak için uzaktaki Linux hesabına giriş yapmanız gerekiyor"), + ("verify_rustdesk_password_tip", "RustDesk parolasını doğrulayın"), + ("remember_account_tip", "Bu hesabı hatırla"), + ("os_account_desk_tip", "Bu hesap, uzaktaki işletim sistemine giriş yapmak ve başsız masaüstü oturumunu etkinleştirmek için kullanılır."), + ("OS Account", "İşletim Sistemi Hesabı"), + ("another_user_login_title_tip", "Başka bir kullanıcı zaten oturum açtı"), + ("another_user_login_text_tip", "Bağlantıyı Kapat"), + ("xorg_not_found_title_tip", "Xorg bulunamadı"), + ("xorg_not_found_text_tip", "Lütfen Xorg'u yükleyin"), + ("no_desktop_title_tip", "Masaüstü mevcut değil"), + ("no_desktop_text_tip", "Lütfen GNOME masaüstünü yükleyin"), + ("No need to elevate", "Yükseltmeye gerek yok"), + ("System Sound", "Sistem Ses"), + ("Default", "Varsayılan"), + ("New RDP", "Yeni RDP"), + ("Fingerprint", "Parmak İzi"), + ("Copy Fingerprint", "Parmak İzini Kopyala"), + ("no fingerprints", "parmak izi yok"), + ("Select a peer", "Bir cihaz seçin"), + ("Select peers", "Cihazları seçin"), + ("Plugins", "Eklentiler"), + ("Uninstall", "Kaldır"), + ("Update", "Güncelle"), + ("Enable", "Etkinleştir"), + ("Disable", "Devre Dışı Bırak"), + ("Options", "Seçenekler"), + ("resolution_original_tip", "Orijinal çözünürlük"), + ("resolution_fit_local_tip", "Yerel çözünürlüğe sığdır"), + ("resolution_custom_tip", "Özel çözünürlük"), + ("Collapse toolbar", "Araç çubuğunu daralt"), + ("Accept and Elevate", "Kabul et ve yükselt"), + ("accept_and_elevate_btn_tooltip", "Bağlantıyı kabul et ve UAC izinlerini yükselt."), + ("clipboard_wait_response_timeout_tip", "Kopyalama yanıtı için zaman aşımına uğradı."), + ("Incoming connection", "Gelen bağlantı"), + ("Outgoing connection", "Giden bağlantı"), + ("Exit", "Çıkış"), + ("Open", "Aç"), + ("logout_tip", "Çıkış yapmak istediğinizden emin misiniz?"), + ("Service", "Hizmet"), + ("Start", "Başlat"), + ("Stop", "Durdur"), + ("exceed_max_devices", "Yönetilen cihazların maksimum sayısına ulaştınız."), + ("Sync with recent sessions", "Son oturumlarla senkronize et"), + ("Sort tags", "Etiketleri sırala"), + ("Open connection in new tab", "Bağlantıyı yeni sekmede aç"), + ("Move tab to new window", "Sekmeyi yeni pencereye taşı"), + ("Can not be empty", "Boş olamaz"), + ("Already exists", "Zaten var"), + ("Change Password", "Parolayı Değiştir"), + ("Refresh Password", "Parolayı Yenile"), + ("ID", "Kimlik"), + ("Grid View", "Izgara Görünümü"), + ("List View", "Liste Görünümü"), + ("Select", "Seç"), + ("Toggle Tags", "Etiketleri Değiştir"), + ("pull_ab_failed_tip", "Adres defterini yenileyemedi"), + ("push_ab_failed_tip", "Adres defterini sunucuya senkronize edemedi"), + ("synced_peer_readded_tip", "Son oturumlar listesinde bulunan cihazlar adres defterine geri senkronize edilecektir."), + ("Change Color", "Rengi Değiştir"), + ("Primary Color", "Birincil Renk"), + ("HSV Color", "HSV Rengi"), ].iter().cloned().collect(); } From 3f12a172469c31beac499b795ec427ce61744cd9 Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Fri, 25 Aug 2023 21:43:32 +0800 Subject: [PATCH 544/612] TR --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 26efb3559..5cf17bf4d 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ DockerStructureSnapshot
    - [Українська] | [česky] | [中文] | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي] | [Tiếng Việt] | [Dansk] | [Ελληνικά]
    + [Українська] | [česky] | [中文] | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي] | [Tiếng Việt] | [Dansk] | [Ελληνικά] | [Türkçe]
    We need your help to translate this README, RustDesk UI and RustDesk Doc to your native language

    From 8fea5585e520d75d0a50cac17629279964d65b52 Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Fri, 25 Aug 2023 21:45:00 +0800 Subject: [PATCH 545/612] Update README-TR.md --- docs/README-TR.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README-TR.md b/docs/README-TR.md index fa1f79c37..590ead0df 100644 --- a/docs/README-TR.md +++ b/docs/README-TR.md @@ -1,6 +1,6 @@

    - RustDesk - Uzak masaüstü uygulamanız
    + RustDesk - Uzak masaüstü uygulamanız
    SunucularDerlemeDocker ile Derleme • From 3d382d03549bde6a118d5a708a1bb88eb0f11d42 Mon Sep 17 00:00:00 2001 From: Abdullah Ibrahim Date: Fri, 25 Aug 2023 19:04:44 +0300 Subject: [PATCH 546/612] Initial Arabic translation --- src/lang.rs | 1 + src/lang/ar.rs | 545 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 546 insertions(+) create mode 100644 src/lang/ar.rs diff --git a/src/lang.rs b/src/lang.rs index 6de810f23..9d0a9e7ea 100644 --- a/src/lang.rs +++ b/src/lang.rs @@ -68,6 +68,7 @@ pub const LANGS: &[(&str, &str)] = &[ ("sl", "Slovenščina"), ("ro", "Română"), ("lt", "Lietuvių"), + ("ar": "العربية"), ]; #[cfg(not(any(target_os = "android", target_os = "ios")))] diff --git a/src/lang/ar.rs b/src/lang/ar.rs new file mode 100644 index 000000000..3f6482670 --- /dev/null +++ b/src/lang/ar.rs @@ -0,0 +1,545 @@ +lazy_static::lazy_static! { + pub static ref T: std::collections::HashMap<&'static str, &'static str> = + [ + ("Status", "الحالة"), + ("Your Desktop", "سطح مكتبك"), + ("desk_tip", "يمكن الوصول لسطح مكتبك بهذا المعرف والرقم السري."), + ("Password", "كلمة المرور"), + ("Ready", "جاهز"), + ("Established", "تم الانشاء"), + ("connecting_status", "جاري الاتصال بشبكة RustDesk..."), + ("Enable Service", "تفعيل الخدمة"), + ("Start Service", "بدء الخدمة"), + ("Service is running", "الخدمة تعمل"), + ("Service is not running", "الخدمة لا تعمل"), + ("not_ready_status", "غير جاهز. الرجاء التأكد من الاتصال"), + ("Control Remote Desktop", "التحكم بسطح المكتب البعيد"), + ("Transfer File", "نقل ملف"), + ("Connect", "اتصال"), + ("Recent Sessions", "الجلسات الحديثة"), + ("Address Book", "كتاب العناوين"), + ("Confirmation", "التأكيد"), + ("TCP Tunneling", "نفق TCP"), + ("Remove", "ازالة"), + ("Refresh random password", "تحديث كلمة مرور عشوائية"), + ("Set your own password", "تعيين كلمة مرور خاصة بك"), + ("Enable Keyboard/Mouse", "تفعيل لوحة المفاتيح/الفأرة"), + ("Enable Clipboard", "تفعيل الحافظة"), + ("Enable File Transfer", "تفعيل نقل الملفات"), + ("Enable TCP Tunneling", "تفعيل نفق TCP"), + ("IP Whitelisting", "القائمة البيضاء للـ IP"), + ("ID/Relay Server", ""), + ("Import Server Config", "استيراد إعدادات الخادم"), + ("Export Server Config", "تصدير إعدادات الخادم"), + ("Import server configuration successfully", "تم استيراد إعدادات الخادم بنجاح"), + ("Export server configuration successfully", "تم تصدير إعدادات الخادم بنجاح"), + ("Invalid server configuration", "إعدادات الخادم غير صحيحة"), + ("Clipboard is empty", "الحافظة فارغة"), + ("Stop service", "إيقاف الخدمة"), + ("Change ID", "تغيير المعرف"), + ("Your new ID", "معرفك الجديد"), + ("length %min% to %max%", "الطول من %min% الى %max%"), + ("starts with a letter", "يبدأ بحرف"), + ("allowed characters", "الحروف المسموح بها"), + ("id_change_tip", ""), + ("Website", "الموقع"), + ("About", "عن"), + ("Slogan_tip", "صنع بحب في هذا العالم الفوضوي!"), + ("Privacy Statement", "بيان الخصوصية"), + ("Mute", "كتم"), + ("Build Date", "تاريخ البناء"), + ("Version", "النسخة"), + ("Home", "المنزل"), + ("Audio Input", "مصدر الصوت"), + ("Enhancements", "التحسينات"), + ("Hardware Codec", "ترميز العتاد"), + ("Adaptive bitrate", "معدل بت متكيف"), + ("ID Server", "معرف الخادم"), + ("Relay Server", "خادم الترحيل"), + ("API Server", "خادم API"), + ("invalid_http", "يجب ان يبدأ بـ http:// او https://"), + ("Invalid IP", "عنوان IP غير صحيح"), + ("Invalid format", "صيغة غير صحيحة"), + ("server_not_support", "الخادم غير مدعوم"), + ("Not available", "غير متوفر"), + ("Too frequent", "متكرر جدا"), + ("Cancel", "إلغاء الأمر"), + ("Skip", "تجاوز"), + ("Close", "إغلاق"), + ("Retry", "إعادة المحاولة"), + ("OK", "موافق"), + ("Password Required", "كلمة المرور اجبارية"), + ("Please enter your password", "الرجاء كتابة كلمة المرور"), + ("Remember password", "تذكر كلمة المرور"), + ("Wrong Password", "كلمة مرور خاطئة"), + ("Do you want to enter again?", "هل تريد الادخال مرة اخرى؟"), + ("Connection Error", "خطأ غي الاتصال"), + ("Error", "خطأ"), + ("Reset by the peer", ""), + ("Connecting...", "جاري الاتصال..."), + ("Connection in progress. Please wait.", "جاري الاتصال, الرجاء الانتظار..."), + ("Please try 1 minute later", "الرجاء المحاولة بعد دقيقة واحدة"), + ("Login Error", "خطأ في تسجيل الدخول"), + ("Successful", "نجاح"), + ("Connected, waiting for image...", "متصل, جاري انتظار الصورة..."), + ("Name", "الاسم"), + ("Type", "النوع"), + ("Modified", "آخر تعديل"), + ("Size", "الحجم"), + ("Show Hidden Files", "عرض الملفات المخفية"), + ("Receive", "استقبال"), + ("Send", "ارسال"), + ("Refresh File", "تحديث الملف"), + ("Local", "المحلي"), + ("Remote", "البعيد"), + ("Remote Computer", "الحاسب البعيد"), + ("Local Computer", "الحاسب المحلي"), + ("Confirm Delete", "تأكيد الحذف"), + ("Delete", "حذف"), + ("Properties", "الخصائص"), + ("Multi Select", "اختيار متعدد"), + ("Select All", "تحديد الكل"), + ("Unselect All", "الغاء تحديد الكل"), + ("Empty Directory", "مجلد فارغ"), + ("Not an empty directory", "مجلد غير فارغ"), + ("Are you sure you want to delete this file?", "هل انت متأكد من أنك تريد حذف هذا الملف؟"), + ("Are you sure you want to delete this empty directory?", "هل انت متأكد من أنك تريد حذف هذا المجلد؟"), + ("Are you sure you want to delete the file of this directory?", "هل انت متأكد من أنك تريد حذف ملفات هذا المجلد؟"), + ("Do this for all conflicts", "فعل هذا لكل التعارضات"), + ("This is irreversible!", "لا يمكن التراجع عن هذا!"), + ("Deleting", "جاري الحذف"), + ("files", "ملفات"), + ("Waiting", "انتظار"), + ("Finished", "انتهى"), + ("Speed", "السرعة"), + ("Custom Image Quality", "جودة صورة مخصصة"), + ("Privacy mode", "وضع الخصوصية"), + ("Block user input", "حجم ادخال المستخدم"), + ("Unblock user input", "الغاء حجب ادخال المستخدم"), + ("Adjust Window", "ضبط النافذة"), + ("Original", "الاصلي"), + ("Shrink", "تقليص"), + ("Stretch", "تمديد"), + ("Scrollbar", "شريط التمرير"), + ("ScrollAuto", "التمرير التلقائي"), + ("Good image quality", "دقة صورة جيدة"), + ("Balanced", "متوازن"), + ("Optimize reaction time", "تحسين وقت رد الفعل"), + ("Custom", "مخصص"), + ("Show remote cursor", "عرض مؤشر الجهاز البعيد"), + ("Show quality monitor", "عرض مراقب الجودة"), + ("Disable clipboard", "تعطيل الحافظة"), + ("Lock after session end", "القفل بعد نهاية هذه الجلسة"), + ("Insert", "ادخال"), + ("Insert Lock", "قفل الادخال"), + ("Refresh", "تحديث"), + ("ID does not exist", "المعرف غير موجود"), + ("Failed to connect to rendezvous server", ""), + ("Please try later", "الرجاء المحالولة لاحقا"), + ("Remote desktop is offline", "سطح المكتب البعيد غير متصل"), + ("Key mismatch", "المفتاح غير متطابق"), + ("Timeout", "نفذ الوقت"), + ("Failed to connect to relay server", ""), + ("Failed to connect via rendezvous server", ""), + ("Failed to connect via relay server", ""), + ("Failed to make direct connection to remote desktop", ""), + ("Set Password", "ضبط كلمة المرور"), + ("OS Password", "كلمة مرور نظام التشغيل"), + ("install_tip", ""), + ("Click to upgrade", "اضغط للترقية"), + ("Click to download", "اضغط للتنزيل"), + ("Click to update", "ضغط للتحديث"), + ("Configure", "تهيئة"), + ("config_acc", ""), + ("config_screen", ""), + ("Installing ...", "جاري التثبيت..."), + ("Install", "تثبيت"), + ("Installation", "التثبيت"), + ("Installation Path", "مسار التثبيت"), + ("Create start menu shortcuts", "انشاء اختصارات قائمة ابداء"), + ("Create desktop icon", "انشاء اختصار سطح المكتب"), + ("agreement_tip", ""), + ("Accept and Install", "الموافقة والتثبيت"), + ("End-user license agreement", "اتفاقية ترخيص المستخدم النهائي"), + ("Generating ...", "جاري الانشاء..."), + ("Your installation is lower version.", ""), + ("not_close_tcp_tip", ""), + ("Listening ...", "جاري الاستماع..."), + ("Remote Host", "المستضيف البعيد"), + ("Remote Port", "منفذ المستضيف البعيد"), + ("Action", "فعل"), + ("Add", "اضافة"), + ("Local Port", "المنفذ المحلي"), + ("Local Address", "العنوان المحلي"), + ("Change Local Port", "تغيير المنفذ المحلي"), + ("setup_server_tip", "لاتصال اسرع, الرجاء اعداد خادم خاص بك"), + ("Too short, at least 6 characters.", "قصير جدا. يجب ان يكون على الاقل 6 خانات"), + ("The confirmation is not identical.", "التأكيد غير متطابق"), + ("Permissions", "الأذونات"), + ("Accept", "قبول"), + ("Dismiss", "صرف"), + ("Disconnect", "قطع الاتصال"), + ("Allow using keyboard and mouse", "السماح باستخدام لوحة المفاتيح والفأرة"), + ("Allow using clipboard", "السماح باستخدام الحافظة"), + ("Allow hearing sound", "السماح بسماع الصوت"), + ("Allow file copy and paste", "السماح بالنسخ واللصق"), + ("Connected", "متصل"), + ("Direct and encrypted connection", "اتصال مباشر مشفر"), + ("Relayed and encrypted connection", "اتصال غير مباشر مشفر"), + ("Direct and unencrypted connection", "اتصال مباشر غير مشفر"), + ("Relayed and unencrypted connection", "اتصال غير مباشر غير مشفر"), + ("Enter Remote ID", "ادخل المعرف البعيد"), + ("Enter your password", "ادخل كلمة المرور"), + ("Logging in...", "جاري تسجيل الدخول..."), + ("Enable RDP session sharing", "تفعيل مشاركة الجلسة باستخدام RDP"), + ("Auto Login", "تسجيل دخول تلقائي"), + ("Enable Direct IP Access", "تفعيل الوصول المباشر لعنوان IP"), + ("Rename", "اعادة تسمية"), + ("Space", ""), + ("Create Desktop Shortcut", "انشاء اختصار سطح مكتب"), + ("Change Path", "تغيير المسار"), + ("Create Folder", "انشاء مجلد"), + ("Please enter the folder name", "الرجاء ادخال اسم المجلد"), + ("Fix it", ""), + ("Warning", "تحذير"), + ("Login screen using Wayland is not supported", ""), + ("Reboot required", "يجب اعادة التشغيل"), + ("Unsupported display server", "خادم العرض غير مدعوم"), + ("x11 expected", "x11 متوقع"), + ("Port", "المنفذ"), + ("Settings", "الاعدادات"), + ("Username", "اسم المستخدم"), + ("Invalid port", "منفذ خاطئ"), + ("Closed manually by the peer", "اغلاق يدويا بواسطة النظير"), + ("Enable remote configuration modification", "تفعيل تعديل اعدادات البعيد"), + ("Run without install", "تشغيل بدون تثبيت"), + ("Connect via relay", ""), + ("Always connect via relay", ""), + ("whitelist_tip", ""), + ("Login", "تسجيل الدخول"), + ("Verify", "تأكيد"), + ("Remember me", "تذكرني"), + ("Trust this device", "الوثوق بهذا الجهاز"), + ("Verification code", ""), + ("verification_tip", ""), + ("Logout", "تسجيل الخروج"), + ("Tags", "العلامات"), + ("Search ID", ""), + ("whitelist_sep", ""), + ("Add ID", "اضافة معرف"), + ("Add Tag", "اضافة علامة"), + ("Unselect all tags", ""), + ("Network error", "خطأ شبكة"), + ("Username missed", ""), + ("Password missed", ""), + ("Wrong credentials", "اسم مستخدم او كلمة مرور خاطئة"), + ("The verification code is incorrect or has expired", ""), + ("Edit Tag", "تحرير علامة"), + ("Unremember Password", "عدم تذكر كلمة المرور"), + ("Favorites", "المفضلة"), + ("Add to Favorites", "اضافة للمفضلة"), + ("Remove from Favorites", "ازالة من المفضلة"), + ("Empty", "فارغ"), + ("Invalid folder name", "اسم المجلد غير صحيح"), + ("Socks5 Proxy", "وكيل Socks5"), + ("Hostname", "اسم المستضيف"), + ("Discovered", "المكتشفة"), + ("install_daemon_tip", ""), + ("Remote ID", "المعرف البعيد"), + ("Paste", "لصق"), + ("Paste here?", "لصق هنا؟"), + ("Are you sure to close the connection?", "هل انت متاكد من انك تريد اغلاق هذا الاتصال؟"), + ("Download new version", "تنويل نسخة جديدة"), + ("Touch mode", "وضع اللمس"), + ("Mouse mode", "وضع الفأرة"), + ("One-Finger Tap", "لم اصبع واحد"), + ("Left Mouse", ""), + ("One-Long Tap", "لمسة واحدة طويلة"), + ("Two-Finger Tap", "لمس اصبعين"), + ("Right Mouse", ""), + ("One-Finger Move", ""), + ("Double Tap & Move", ""), + ("Mouse Drag", ""), + ("Three-Finger vertically", "ثلاث اصابع افقيا"), + ("Mouse Wheel", "عجلة الفارة"), + ("Two-Finger Move", ""), + ("Canvas Move", ""), + ("Pinch to Zoom", ""), + ("Canvas Zoom", ""), + ("Reset canvas", ""), + ("No permission of file transfer", "لا يوجد اذن نقل الملف"), + ("Note", "ملاحظة"), + ("Connection", "الاتصال"), + ("Share Screen", "مشاركة الشاشة"), + ("Chat", "محادثة"), + ("Total", "الاجمالي"), + ("items", "عناصر"), + ("Selected", "محدد"), + ("Screen Capture", "لقط الشاشة"), + ("Input Control", "تحكم الادخال"), + ("Audio Capture", "لقط الصوت"), + ("File Connection", "اتصال الملف"), + ("Screen Connection", "اتصال الشاشة"), + ("Do you accept?", "هل تقبل؟"), + ("Open System Setting", "فتح اعدادات النظام"), + ("How to get Android input permission?", "كيف تحصل على اذن الادخال في اندرويد؟"), + ("android_input_permission_tip1", ""), + ("android_input_permission_tip2", ""), + ("android_new_connection_tip", ""), + ("android_service_will_start_tip", ""), + ("android_stop_service_tip", ""), + ("android_version_audio_tip", ""), + ("android_start_service_tip", ""), + ("android_permission_may_not_change_tip", ""), + ("Account", "الحساب"), + ("Overwrite", "كتابة فوق"), + ("This file exists, skip or overwrite this file?", ""), + ("Quit", "خروج"), + ("doc_mac_permission", ""), + ("Help", "مساعدة"), + ("Failed", "فشل"), + ("Succeeded", "نجاح"), + ("Someone turns on privacy mode, exit", "شخص ما فعل وضع الخصوصية, خروج"), + ("Unsupported", "غير مدعوم"), + ("Peer denied", "النظير رفض"), + ("Please install plugins", "الرجاء تثبيت الاضافات"), + ("Peer exit", "اخروج النظير"), + ("Failed to turn off", "فشل ايقاف التشغيل"), + ("Turned off", "مطفئ"), + ("In privacy mode", "في وضع الخصوصية"), + ("Out privacy mode", "الخروج من وضع الخصوصية"), + ("Language", "اللغة"), + ("Keep RustDesk background service", ""), + ("Ignore Battery Optimizations", ""), + ("android_open_battery_optimizations_tip", ""), + ("Start on Boot", "البدء عند تشغيل النظام"), + ("Start the screen sharing service on boot, requires special permissions", ""), + ("Connection not allowed", ""), + ("Legacy mode", "الوضع التقليدي"), + ("Map mode", "وضع الخريطة"), + ("Translate mode", "وضع الترجمة"), + ("Use permanent password", "استخدام كلمة مرور دائمة"), + ("Use both passwords", "استخدام طريقتي كلمة المرور"), + ("Set permanent password", "تعيين كلمة مرور دائمة"), + ("Enable Remote Restart", "تفعيل اعداة تشغيل البعيد"), + ("Allow remote restart", "السماح باعادة تشغيل البعيد"), + ("Restart Remote Device", "اعادة تشغيل الجهاز البعيد"), + ("Are you sure you want to restart", "هل انت متاكد من انك تريد اعادة التشغيل؟"), + ("Restarting Remote Device", "جاري اعادة تشغيل البعيد"), + ("remote_restarting_tip", ""), + ("Copied", "منسوخ"), + ("Exit Fullscreen", "الخروج من ملئ الشاشة"), + ("Fullscreen", "ملئ الشاشة"), + ("Mobile Actions", "اجراءات الهاتف"), + ("Select Monitor", "اختر شاشة"), + ("Control Actions", "اجراءات التحكم"), + ("Display Settings", "اعدادات العرض"), + ("Ratio", "النسبة"), + ("Image Quality", "جودة الصورة"), + ("Scroll Style", "شكل التمرير"), + ("Show Toolbar", "عرض شريط الادوات"), + ("Hide Toolbar", "اخفاء شريط الادوات"), + ("Direct Connection", "اتصال مباشر"), + ("Relay Connection", ""), + ("Secure Connection", "اتصال آمن"), + ("Insecure Connection", "اتصال غير آمن"), + ("Scale original", "المقياس الأصلي"), + ("Scale adaptive", "مقياس التكيف"), + ("General", "عام"), + ("Security", "الأمان"), + ("Theme", "السمة"), + ("Dark Theme", "سمة غامقة"), + ("Light Theme", "سمة فاتحة"), + ("Dark", "غامق"), + ("Light", "فاتح"), + ("Follow System", "نفس نظام التشغيل"), + ("Enable hardware codec", "تفعيل ترميز العتاد"), + ("Unlock Security Settings", "فتح اعدادات الامان"), + ("Enable Audio", "تفعيل الصوت"), + ("Unlock Network Settings", "فتح اعدادات الشبكة"), + ("Server", "الخادم"), + ("Direct IP Access", "وصول مباشر للـ IP"), + ("Proxy", "الوكيل"), + ("Apply", "تطبيق"), + ("Disconnect all devices?", "قطع اتصال كل الاجهزة؟"), + ("Clear", "مسح"), + ("Audio Input Device", "جهاز ادخال الصوت"), + ("Use IP Whitelisting", ""), + ("Network", "الشبكة"), + ("Enable RDP", "تفعيل RDP"), + ("Pin Toolbar", "تثبيت شريط الادوات"), + ("Unpin Toolbar", "الغاء تثبيت شريط الادوات"), + ("Recording", "التسجيل"), + ("Directory", "المسار"), + ("Automatically record incoming sessions", "تسجيل الجلسات القادمة تلقائيا"), + ("Change", "تغيير"), + ("Start session recording", "بدء تسجيل الجلسة"), + ("Stop session recording", "ايقاف تسجيل الجلسة"), + ("Enable Recording Session", "تفعيل تسجيل الجلسة"), + ("Allow recording session", "السماح بتسجيل الجلسة"), + ("Enable LAN Discovery", "تفعيل اكتشاف الشبكة المحلية"), + ("Deny LAN Discovery", "رفض اكتشاف الشبكة المحلية"), + ("Write a message", "اكتب رسالة"), + ("Prompt", ""), + ("Please wait for confirmation of UAC...", ""), + ("elevated_foreground_window_tip", ""), + ("Disconnected", "مفصول"), + ("Other", "اخرى"), + ("Confirm before closing multiple tabs", ""), + ("Keyboard Settings", ""), + ("Full Access", "وصول كامل"), + ("Screen Share", "مشاركة الشاشة"), + ("Wayland requires Ubuntu 21.04 or higher version.", ""), + ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", ""), + ("JumpLink", "عرض"), + ("Please Select the screen to be shared(Operate on the peer side).", ""), + ("Show RustDesk", "عرض RustDesk"), + ("This PC", "هذا الحاسب"), + ("or", "او"), + ("Continue with", "متابعة مع"), + ("Elevate", ""), + ("Zoom cursor", ""), + ("Accept sessions via password", ""), + ("Accept sessions via click", ""), + ("Accept sessions via both", ""), + ("Please wait for the remote side to accept your session request...", ""), + ("One-time Password", "كلمة مرور لمرة واحدة"), + ("Use one-time password", "استخدام كلمة مرور لمرة واحدة"), + ("One-time password length", "طول كلمة مرور لمرة واحدة"), + ("Request access to your device", ""), + ("Hide connection management window", ""), + ("hide_cm_tip", ""), + ("wayland_experiment_tip", "دعم Wayland لازال في المرحلة التجريبية. الرجاء استخدام X11 اذا اردت وصول كامل."), + ("Right click to select tabs", ""), + ("Skipped", "متجاوز"), + ("Add to Address Book", "اضافة الى كتاب العناوين"), + ("Group", "مجموعة"), + ("Search", "بحث"), + ("Closed manually by web console", ""), + ("Local keyboard type", ""), + ("Select local keyboard type", ""), + ("software_render_tip", ""), + ("Always use software rendering", ""), + ("config_input", ""), + ("config_microphone", ""), + ("request_elevation_tip", ""), + ("Wait", "انتظر"), + ("Elevation Error", ""), + ("Ask the remote user for authentication", ""), + ("Choose this if the remote account is administrator", ""), + ("Transmit the username and password of administrator", ""), + ("still_click_uac_tip", ""), + ("Request Elevation", ""), + ("wait_accept_uac_tip", ""), + ("Elevate successfully", ""), + ("uppercase", "حرف كبير"), + ("lowercase", "حرف صغير"), + ("digit", "رقم"), + ("special character", "رمز"), + ("length>=8", "الطول 8 على الاقل"), + ("Weak", "ضعيف"), + ("Medium", "متوسط"), + ("Strong", "قوي"), + ("Switch Sides", ""), + ("Please confirm if you want to share your desktop?", "الرجاء التاكيد على انك تريد مشاركة سطح مكتبك؟"), + ("Display", "العرض"), + ("Default View Style", "شكل العرض الافتراضي"), + ("Default Scroll Style", "شكل التمرير الافتراضي"), + ("Default Image Quality", "دقة الصورة الافتراضية"), + ("Default Codec", "الترميز الاقتراضي"), + ("Bitrate", "معدل البت"), + ("FPS", "مشهد في الثانية"), + ("Auto", "تلقائي"), + ("Other Default Options", "الخيارات الافتراضية الاخرى"), + ("Voice call", "مكالمة صوتية"), + ("Text chat", "دردشة نصية"), + ("Stop voice call", "ايقاف المكالمة الصوتية"), + ("relay_hint_tip", ""), + ("Reconnect", "اعادة الاتصال"), + ("Codec", "الترميز"), + ("Resolution", "الدقة"), + ("No transfers in progress", ""), + ("Set one-time password length", ""), + ("install_cert_tip", "تثبيت شهادة RustDesk"), + ("confirm_install_cert_tip", ""), + ("RDP Settings", ""), + ("Sort by", "ترتيب حسب"), + ("New Connection", "اتصال جديد"), + ("Restore", "استعادة"), + ("Minimize", "تصغير"), + ("Maximize", "تكبير"), + ("Your Device", "جهازك"), + ("empty_recent_tip", ""), + ("empty_favorite_tip", ""), + ("empty_lan_tip", ""), + ("empty_address_book_tip", ""), + ("eg: admin", "مثلا: admin"), + ("Empty Username", "اسم مستخدم فارغ"), + ("Empty Password", "كلمة مرور فارغة"), + ("Me", "انا"), + ("identical_file_tip", ""), + ("show_monitors_tip", ""), + ("View Mode", ""), + ("login_linux_tip", ""), + ("verify_rustdesk_password_tip", ""), + ("enter_rustdesk_passwd_tip", "ادخل كلمة مرور RustDesk"), + ("remember_rustdesk_passwd_tip", "تذكر كلمة مرور RustDesk"), + ("remember_account_tip", "تذكر هذا الحساب"), + ("os_account_desk_tip", ""), + ("OS Account", ""), + ("another_user_login_title_tip", ""), + ("another_user_login_text_tip", "قطع الاتصال"), + ("xorg_not_found_title_tip", "Xorg غير موجود"), + ("xorg_not_found_text_tip", "الرجاء تثبيت Xorg"), + ("no_desktop_title_tip", "لا يتوفر سطح مكتب"), + ("no_desktop_text_tip", "الرجاء تثبيت سطح مكتب GNOME"), + ("No need to elevate", ""), + ("System Sound", "صوت النظام"), + ("Default", "الافتراضي"), + ("New RDP", ""), + ("Fingerprint", "البصمة"), + ("Copy Fingerprint", "نسخ البصمة"), + ("no fingerprints", ""), + ("Select a peer", ""), + ("Select peers", ""), + ("Plugins", "الاضافات"), + ("Uninstall", "الغاء التثبيت"), + ("Update", "تحديث"), + ("Enable", "تفعيل"), + ("Disable", "تعطيل"), + ("Options", "الخيارات"), + ("resolution_original_tip", "الدقة الأصلية"), + ("resolution_fit_local_tip", ""), + ("resolution_custom_tip", "دقة مخصصة"), + ("Collapse toolbar", ""), + ("Accept and Elevate", ""), + ("accept_and_elevate_btn_tooltip", ""), + ("clipboard_wait_response_timeout_tip", ""), + ("Incoming connection", ""), + ("Outgoing connection", ""), + ("Exit", "خروج"), + ("Open", "فتح"), + ("logout_tip", ""), + ("Service", "الخدمة"), + ("Start", "تشغيل"), + ("Stop", "ايقاف"), + ("exceed_max_devices", ""), + ("Sync with recent sessions", ""), + ("Sort tags", ""), + ("Open connection in new tab", ""), + ("Move tab to new window", ""), + ("Can not be empty", ""), + ("Already exists", ""), + ("Change Password", "تغيير كلمة المرور"), + ("Refresh Password", "تحديث كلمة المرور"), + ("ID", "المعرف"), + ("Grid View", "عرض شبكي"), + ("List View", "رعض قائمة"), + ("Select", "اختيار"), + ("Toggle Tags", ""), + ("pull_ab_failed_tip", ""), + ("push_ab_failed_tip", ""), + ("synced_peer_readded_tip", ""), + ].iter().cloned().collect(); + } + \ No newline at end of file From 720de651f31c084fb0e5fd20369912bdfca6370d Mon Sep 17 00:00:00 2001 From: Abdullah Ibrahim Date: Fri, 25 Aug 2023 21:58:27 +0300 Subject: [PATCH 547/612] add additional translations --- src/lang/ar.rs | 254 ++++++++++++++++++++++++------------------------- 1 file changed, 127 insertions(+), 127 deletions(-) diff --git a/src/lang/ar.rs b/src/lang/ar.rs index 3f6482670..201db6dc1 100644 --- a/src/lang/ar.rs +++ b/src/lang/ar.rs @@ -28,7 +28,7 @@ lazy_static::lazy_static! { ("Enable File Transfer", "تفعيل نقل الملفات"), ("Enable TCP Tunneling", "تفعيل نفق TCP"), ("IP Whitelisting", "القائمة البيضاء للـ IP"), - ("ID/Relay Server", ""), + ("ID/Relay Server", "معرف خادم الوسيط"), ("Import Server Config", "استيراد إعدادات الخادم"), ("Export Server Config", "تصدير إعدادات الخادم"), ("Import server configuration successfully", "تم استيراد إعدادات الخادم بنجاح"), @@ -41,7 +41,7 @@ lazy_static::lazy_static! { ("length %min% to %max%", "الطول من %min% الى %max%"), ("starts with a letter", "يبدأ بحرف"), ("allowed characters", "الحروف المسموح بها"), - ("id_change_tip", ""), + ("id_change_tip", "فقط a-z, A-Z, 0-9 و _ مسموح بها. اول حرف يجب ان يكون a-z او A-Z. الطول بين 6 و 16."), ("Website", "الموقع"), ("About", "عن"), ("Slogan_tip", "صنع بحب في هذا العالم الفوضوي!"), @@ -55,7 +55,7 @@ lazy_static::lazy_static! { ("Hardware Codec", "ترميز العتاد"), ("Adaptive bitrate", "معدل بت متكيف"), ("ID Server", "معرف الخادم"), - ("Relay Server", "خادم الترحيل"), + ("Relay Server", "خادم الوسيط"), ("API Server", "خادم API"), ("invalid_http", "يجب ان يبدأ بـ http:// او https://"), ("Invalid IP", "عنوان IP غير صحيح"), @@ -75,7 +75,7 @@ lazy_static::lazy_static! { ("Do you want to enter again?", "هل تريد الادخال مرة اخرى؟"), ("Connection Error", "خطأ غي الاتصال"), ("Error", "خطأ"), - ("Reset by the peer", ""), + ("Reset by the peer", "تمت اعادة التعيين بواسطة القرين"), ("Connecting...", "جاري الاتصال..."), ("Connection in progress. Please wait.", "جاري الاتصال, الرجاء الانتظار..."), ("Please try 1 minute later", "الرجاء المحاولة بعد دقيقة واحدة"), @@ -134,36 +134,36 @@ lazy_static::lazy_static! { ("Insert Lock", "قفل الادخال"), ("Refresh", "تحديث"), ("ID does not exist", "المعرف غير موجود"), - ("Failed to connect to rendezvous server", ""), - ("Please try later", "الرجاء المحالولة لاحقا"), + ("Failed to connect to rendezvous server", "فشل الاتصال بخادم rendezvous"), + ("Please try later", "الرجاء المحاولة لاحقا"), ("Remote desktop is offline", "سطح المكتب البعيد غير متصل"), ("Key mismatch", "المفتاح غير متطابق"), ("Timeout", "نفذ الوقت"), - ("Failed to connect to relay server", ""), - ("Failed to connect via rendezvous server", ""), - ("Failed to connect via relay server", ""), - ("Failed to make direct connection to remote desktop", ""), + ("Failed to connect to relay server", "فشل الاتصال بالخادم الوسيط"), + ("Failed to connect via rendezvous server", "فشل الاتصال عير خادم rendezvous"), + ("Failed to connect via relay server", "فشل الاتصال عبر الخادم الوسيط"), + ("Failed to make direct connection to remote desktop", "فشل في اجراء اتصال مباشر لسطح المكتب البعيد"), ("Set Password", "ضبط كلمة المرور"), ("OS Password", "كلمة مرور نظام التشغيل"), - ("install_tip", ""), - ("Click to upgrade", "اضغط للترقية"), + ("install_tip", "بسبب صلاحيات تحكم حساب المستخدم. RustDesk قد لا يعمل بشكل صحيح في جهة البعيد في بعض الحالات. لتفادي ذلك. الرجاء الضغط على الزر ادناه لتثبيت RustDesk في جهازك."), + ("Click to upgrade", "اضغط للارتقاء"), ("Click to download", "اضغط للتنزيل"), ("Click to update", "ضغط للتحديث"), ("Configure", "تهيئة"), - ("config_acc", ""), - ("config_screen", ""), + ("config_acc", "لتتمكن من التحكم بسطح مكتبك البعيد, تحتاج الى منح RustDesk اذونات \"امكانية الوصول\"."), + ("config_screen", "لتتمكن من الوصول الى سطح مكتبك البعيد, تحتاج الى منح RustDesk اذونات \"تسجيل الشاشة\"."), ("Installing ...", "جاري التثبيت..."), ("Install", "تثبيت"), ("Installation", "التثبيت"), ("Installation Path", "مسار التثبيت"), ("Create start menu shortcuts", "انشاء اختصارات قائمة ابداء"), ("Create desktop icon", "انشاء اختصار سطح المكتب"), - ("agreement_tip", ""), + ("agreement_tip", "بمجرد البدء بالتثبيت, فانت قد قبلت اتفاقية الترخيص."), ("Accept and Install", "الموافقة والتثبيت"), ("End-user license agreement", "اتفاقية ترخيص المستخدم النهائي"), ("Generating ...", "جاري الانشاء..."), - ("Your installation is lower version.", ""), - ("not_close_tcp_tip", ""), + ("Your installation is lower version.", "انت تحاول تثبيت نسخة قديمة."), + ("not_close_tcp_tip", "لا تغلق هذه النافذة اثناء استخدامك للنفق"), ("Listening ...", "جاري الاستماع..."), ("Remote Host", "المستضيف البعيد"), ("Remote Port", "منفذ المستضيف البعيد"), @@ -175,7 +175,7 @@ lazy_static::lazy_static! { ("setup_server_tip", "لاتصال اسرع, الرجاء اعداد خادم خاص بك"), ("Too short, at least 6 characters.", "قصير جدا. يجب ان يكون على الاقل 6 خانات"), ("The confirmation is not identical.", "التأكيد غير متطابق"), - ("Permissions", "الأذونات"), + ("Permissions", "الاذونات"), ("Accept", "قبول"), ("Dismiss", "صرف"), ("Disconnect", "قطع الاتصال"), @@ -195,14 +195,14 @@ lazy_static::lazy_static! { ("Auto Login", "تسجيل دخول تلقائي"), ("Enable Direct IP Access", "تفعيل الوصول المباشر لعنوان IP"), ("Rename", "اعادة تسمية"), - ("Space", ""), + ("Space", "مساحة"), ("Create Desktop Shortcut", "انشاء اختصار سطح مكتب"), ("Change Path", "تغيير المسار"), ("Create Folder", "انشاء مجلد"), ("Please enter the folder name", "الرجاء ادخال اسم المجلد"), - ("Fix it", ""), + ("Fix it", "اصلحه"), ("Warning", "تحذير"), - ("Login screen using Wayland is not supported", ""), + ("Login screen using Wayland is not supported", "تسجيل الدخول باستخدام Wayland غير مدعوم"), ("Reboot required", "يجب اعادة التشغيل"), ("Unsupported display server", "خادم العرض غير مدعوم"), ("x11 expected", "x11 متوقع"), @@ -210,30 +210,30 @@ lazy_static::lazy_static! { ("Settings", "الاعدادات"), ("Username", "اسم المستخدم"), ("Invalid port", "منفذ خاطئ"), - ("Closed manually by the peer", "اغلاق يدويا بواسطة النظير"), + ("Closed manually by the peer", "اغلاق يدويا بواسطة القرين"), ("Enable remote configuration modification", "تفعيل تعديل اعدادات البعيد"), ("Run without install", "تشغيل بدون تثبيت"), - ("Connect via relay", ""), - ("Always connect via relay", ""), - ("whitelist_tip", ""), + ("Connect via relay", "الاتصال عبر وسيط"), + ("Always connect via relay", "الاتصال باستخدام وسيط دائما"), + ("whitelist_tip", "فقط قائمة الـ IP البيضاء تستطيع الوصول لي"), ("Login", "تسجيل الدخول"), ("Verify", "تأكيد"), ("Remember me", "تذكرني"), ("Trust this device", "الوثوق بهذا الجهاز"), - ("Verification code", ""), - ("verification_tip", ""), + ("Verification code", "رمز التحقق"), + ("verification_tip", "رمز التحقق ارسل الى بريدك الالكتروني المسجل. ادخل رمز التحقق للاستمرار بتسجيل الدخول."), ("Logout", "تسجيل الخروج"), ("Tags", "العلامات"), - ("Search ID", ""), - ("whitelist_sep", ""), + ("Search ID", "البحث المعرف"), + ("whitelist_sep", "مفصولة بفاصلة او فاصلة منقوطة او سطر جديد"), ("Add ID", "اضافة معرف"), ("Add Tag", "اضافة علامة"), - ("Unselect all tags", ""), + ("Unselect all tags", "عدم تحديد كل العلامات"), ("Network error", "خطأ شبكة"), - ("Username missed", ""), - ("Password missed", ""), + ("Username missed", "اسم المستخدم مفقود"), + ("Password missed", "كلمة المرور مفقودة"), ("Wrong credentials", "اسم مستخدم او كلمة مرور خاطئة"), - ("The verification code is incorrect or has expired", ""), + ("The verification code is incorrect or has expired", "رمز التحقق غير صحيح او منتهي"), ("Edit Tag", "تحرير علامة"), ("Unremember Password", "عدم تذكر كلمة المرور"), ("Favorites", "المفضلة"), @@ -244,7 +244,7 @@ lazy_static::lazy_static! { ("Socks5 Proxy", "وكيل Socks5"), ("Hostname", "اسم المستضيف"), ("Discovered", "المكتشفة"), - ("install_daemon_tip", ""), + ("install_daemon_tip", "للبدء مع بدء تشغيل النظام. تحتاج الى تثبيت خدمة النظام."), ("Remote ID", "المعرف البعيد"), ("Paste", "لصق"), ("Paste here?", "لصق هنا؟"), @@ -253,18 +253,18 @@ lazy_static::lazy_static! { ("Touch mode", "وضع اللمس"), ("Mouse mode", "وضع الفأرة"), ("One-Finger Tap", "لم اصبع واحد"), - ("Left Mouse", ""), + ("Left Mouse", "الفأرة اليسرى"), ("One-Long Tap", "لمسة واحدة طويلة"), ("Two-Finger Tap", "لمس اصبعين"), - ("Right Mouse", ""), - ("One-Finger Move", ""), - ("Double Tap & Move", ""), - ("Mouse Drag", ""), + ("Right Mouse", "الفأرة اليمنى"), + ("One-Finger Move", "نقل الاصبع الواحد"), + ("Double Tap & Move", "لمستان ونقل"), + ("Mouse Drag", "سحب الفأرة"), ("Three-Finger vertically", "ثلاث اصابع افقيا"), ("Mouse Wheel", "عجلة الفارة"), - ("Two-Finger Move", ""), + ("Two-Finger Move", "نقل الاصبعين"), ("Canvas Move", ""), - ("Pinch to Zoom", ""), + ("Pinch to Zoom", "قرصة للتكبير"), ("Canvas Zoom", ""), ("Reset canvas", ""), ("No permission of file transfer", "لا يوجد اذن نقل الملف"), @@ -292,8 +292,8 @@ lazy_static::lazy_static! { ("android_start_service_tip", ""), ("android_permission_may_not_change_tip", ""), ("Account", "الحساب"), - ("Overwrite", "كتابة فوق"), - ("This file exists, skip or overwrite this file?", ""), + ("Overwrite", "استبدال"), + ("This file exists, skip or overwrite this file?", "الملف موجود, هل تريد التجاوز او الاستبدال؟"), ("Quit", "خروج"), ("doc_mac_permission", ""), ("Help", "مساعدة"), @@ -301,20 +301,20 @@ lazy_static::lazy_static! { ("Succeeded", "نجاح"), ("Someone turns on privacy mode, exit", "شخص ما فعل وضع الخصوصية, خروج"), ("Unsupported", "غير مدعوم"), - ("Peer denied", "النظير رفض"), + ("Peer denied", "القرين رفض"), ("Please install plugins", "الرجاء تثبيت الاضافات"), - ("Peer exit", "اخروج النظير"), + ("Peer exit", "خروج القرين"), ("Failed to turn off", "فشل ايقاف التشغيل"), ("Turned off", "مطفئ"), ("In privacy mode", "في وضع الخصوصية"), ("Out privacy mode", "الخروج من وضع الخصوصية"), ("Language", "اللغة"), - ("Keep RustDesk background service", ""), - ("Ignore Battery Optimizations", ""), + ("Keep RustDesk background service", "ابق خدمة RustDesk تعمل في الخلفية"), + ("Ignore Battery Optimizations", "تجاهل تحسينات البطارية"), ("android_open_battery_optimizations_tip", ""), ("Start on Boot", "البدء عند تشغيل النظام"), - ("Start the screen sharing service on boot, requires special permissions", ""), - ("Connection not allowed", ""), + ("Start the screen sharing service on boot, requires special permissions", "تشغيل خدمة مشاركة الشاشة عند بدء تشغيل النظام, يحتاج الى اذونات خاصة"), + ("Connection not allowed", "الاتصال غير مسموح"), ("Legacy mode", "الوضع التقليدي"), ("Map mode", "وضع الخريطة"), ("Translate mode", "وضع الترجمة"), @@ -326,7 +326,7 @@ lazy_static::lazy_static! { ("Restart Remote Device", "اعادة تشغيل الجهاز البعيد"), ("Are you sure you want to restart", "هل انت متاكد من انك تريد اعادة التشغيل؟"), ("Restarting Remote Device", "جاري اعادة تشغيل البعيد"), - ("remote_restarting_tip", ""), + ("remote_restarting_tip", "الجهاز البعيد يعيد التشغيل. الرجاء اغلاق هذه الرسالة واعادة الاتصال باستخدام كلمة المرور الدائمة بعد فترة بسيطة."), ("Copied", "منسوخ"), ("Exit Fullscreen", "الخروج من ملئ الشاشة"), ("Fullscreen", "ملئ الشاشة"), @@ -340,7 +340,7 @@ lazy_static::lazy_static! { ("Show Toolbar", "عرض شريط الادوات"), ("Hide Toolbar", "اخفاء شريط الادوات"), ("Direct Connection", "اتصال مباشر"), - ("Relay Connection", ""), + ("Relay Connection", "اتصال الوسيط"), ("Secure Connection", "اتصال آمن"), ("Insecure Connection", "اتصال غير آمن"), ("Scale original", "المقياس الأصلي"), @@ -364,7 +364,7 @@ lazy_static::lazy_static! { ("Disconnect all devices?", "قطع اتصال كل الاجهزة؟"), ("Clear", "مسح"), ("Audio Input Device", "جهاز ادخال الصوت"), - ("Use IP Whitelisting", ""), + ("Use IP Whitelisting", "استخدام قائمة الـ IP البيضاء"), ("Network", "الشبكة"), ("Enable RDP", "تفعيل RDP"), ("Pin Toolbar", "تثبيت شريط الادوات"), @@ -381,57 +381,57 @@ lazy_static::lazy_static! { ("Deny LAN Discovery", "رفض اكتشاف الشبكة المحلية"), ("Write a message", "اكتب رسالة"), ("Prompt", ""), - ("Please wait for confirmation of UAC...", ""), + ("Please wait for confirmation of UAC...", "الرجاء انتظار تاكيد تحكم حساب المستخدم..."), ("elevated_foreground_window_tip", ""), ("Disconnected", "مفصول"), ("Other", "اخرى"), - ("Confirm before closing multiple tabs", ""), - ("Keyboard Settings", ""), + ("Confirm before closing multiple tabs", "التاكيد قبل اغلاق السنة عديدة"), + ("Keyboard Settings", "اعدادات لوحة المفاتيح"), ("Full Access", "وصول كامل"), ("Screen Share", "مشاركة الشاشة"), - ("Wayland requires Ubuntu 21.04 or higher version.", ""), - ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", ""), - ("JumpLink", "عرض"), - ("Please Select the screen to be shared(Operate on the peer side).", ""), + ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland يتطلب نسخة ابونتو 21.04 او اعلى."), + ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland يتطلب نسخة اعلى من توزيعة لينكس. الرجاء تجربة سطح مكتب X11 او غير نظام تشغيلك."), + ("JumpLink", "رابط القفز"), + ("Please Select the screen to be shared(Operate on the peer side).", "الرجاء اختيار شاشة لمشاركتها (تعمل على جانب القرين)."), ("Show RustDesk", "عرض RustDesk"), ("This PC", "هذا الحاسب"), ("or", "او"), ("Continue with", "متابعة مع"), - ("Elevate", ""), - ("Zoom cursor", ""), - ("Accept sessions via password", ""), - ("Accept sessions via click", ""), - ("Accept sessions via both", ""), - ("Please wait for the remote side to accept your session request...", ""), + ("Elevate", "ارتقاء"), + ("Zoom cursor", "تكبير المؤشر"), + ("Accept sessions via password", "قبول الجلسات عبر كلمة المرور"), + ("Accept sessions via click", "قبول الجلسات عبر الضغط"), + ("Accept sessions via both", "قبول الجلسات عبر الاثنين"), + ("Please wait for the remote side to accept your session request...", "الرجاء الانتظار حتى يقبل الطرف البعيد طلب الجلسة..."), ("One-time Password", "كلمة مرور لمرة واحدة"), ("Use one-time password", "استخدام كلمة مرور لمرة واحدة"), ("One-time password length", "طول كلمة مرور لمرة واحدة"), - ("Request access to your device", ""), - ("Hide connection management window", ""), - ("hide_cm_tip", ""), + ("Request access to your device", "طلب الوصول إلى جهازك"), + ("Hide connection management window", "اخفاء نافذة ادارة الاتصال"), + ("hide_cm_tip", "السماح بالاخفاء فقط في حالة قبول الجلسات عبر كلمة المرور واستخدام كلمة المرور الدائمة"), ("wayland_experiment_tip", "دعم Wayland لازال في المرحلة التجريبية. الرجاء استخدام X11 اذا اردت وصول كامل."), - ("Right click to select tabs", ""), + ("Right click to select tabs", "الضغط بالزر الايمن لتحديد الالسنة"), ("Skipped", "متجاوز"), ("Add to Address Book", "اضافة الى كتاب العناوين"), ("Group", "مجموعة"), ("Search", "بحث"), - ("Closed manually by web console", ""), - ("Local keyboard type", ""), - ("Select local keyboard type", ""), - ("software_render_tip", ""), - ("Always use software rendering", ""), - ("config_input", ""), - ("config_microphone", ""), - ("request_elevation_tip", ""), + ("Closed manually by web console", "اغلق يدويا عبر طرفية الويب"), + ("Local keyboard type", "توع لوحة المفاتيح المحلية"), + ("Select local keyboard type", "اختر نوع لوحة المفاتيح الملحية"), + ("software_render_tip", "اذا كنت تستخدم بطاقة رسوميات Nvidia تحت لينكس والشاشة البعيد تغلق مباشرة بعد الاتصال, قم بالتبديل الى تعريفات Nouveau مفتوحة المصدر واختيار الترميز البرمجي قد يساعد. اعادة تشغيل البرناج مطلوبة."), + ("Always use software rendering", "استخدام الترميز البرمجي دائما"), + ("config_input", "لتتمكن من التحكم بسطح المكتب البعيد. يجب من RustDesk اذونات \"مراقبة المدخلات\"."), + ("config_microphone", "لتتمكن من التحدث. يجب منح RustDesk اذونات \"تسجيل الصوت\"."), + ("request_elevation_tip", "اطلب الارتقاء في حالة وجود شخص في الطرف الاخر."), ("Wait", "انتظر"), - ("Elevation Error", ""), - ("Ask the remote user for authentication", ""), - ("Choose this if the remote account is administrator", ""), - ("Transmit the username and password of administrator", ""), - ("still_click_uac_tip", ""), - ("Request Elevation", ""), - ("wait_accept_uac_tip", ""), - ("Elevate successfully", ""), + ("Elevation Error", "خطأ الارتقاء"), + ("Ask the remote user for authentication", "اسأل المستخدم البعيد التوثيق"), + ("Choose this if the remote account is administrator", "اختر اذا كان الحساب البعيد مدير للنظام"), + ("Transmit the username and password of administrator", "انقل اسم المستخدم وكلمة مرور مدير النظام"), + ("still_click_uac_tip", "لازال يحتاج المستخدم البعيد للضغط على موافق في نافذة تحكم حساب المستخدم في RustDesk الذي يعمل."), + ("Request Elevation", "طلب ارتقاء"), + ("wait_accept_uac_tip", "الرجاء انتظار المستخدم البعيد حتى يوافق على طلب تحكم حساب المستخدم."), + ("Elevate successfully", "الارتقاء بنجاح"), ("uppercase", "حرف كبير"), ("lowercase", "حرف صغير"), ("digit", "رقم"), @@ -440,7 +440,7 @@ lazy_static::lazy_static! { ("Weak", "ضعيف"), ("Medium", "متوسط"), ("Strong", "قوي"), - ("Switch Sides", ""), + ("Switch Sides", "تبديل الاماكن"), ("Please confirm if you want to share your desktop?", "الرجاء التاكيد على انك تريد مشاركة سطح مكتبك؟"), ("Display", "العرض"), ("Default View Style", "شكل العرض الافتراضي"), @@ -454,54 +454,54 @@ lazy_static::lazy_static! { ("Voice call", "مكالمة صوتية"), ("Text chat", "دردشة نصية"), ("Stop voice call", "ايقاف المكالمة الصوتية"), - ("relay_hint_tip", ""), + ("relay_hint_tip", "قد لا يكون ممكن الاتصال مباشرة. يمكنك محاولة الاتصال عبر وسيط. ايضا اذا اردت استخدام وسيط لمحاولتك الاولى اضف لاحقة \"/r\" الى المعرف او اختر \"الاتصال باستخدام وسيط دائما\" في بطاقة الجلسات الحديثة ان وجدت."), ("Reconnect", "اعادة الاتصال"), ("Codec", "الترميز"), ("Resolution", "الدقة"), - ("No transfers in progress", ""), - ("Set one-time password length", ""), + ("No transfers in progress", "لا توجد عمليات نقل حاليا"), + ("Set one-time password length", "تعيين طول كلمة مرور المرة الواحدة"), ("install_cert_tip", "تثبيت شهادة RustDesk"), - ("confirm_install_cert_tip", ""), - ("RDP Settings", ""), + ("confirm_install_cert_tip", "هذه شهادة RustDesk الاختبارية, يمكنك الوثوق بها. هذه الشهادة ستستخدم للوثوق وتثبيت تعاريف RustDesk عند الحاجة."), + ("RDP Settings", "اعدادات RDP"), ("Sort by", "ترتيب حسب"), ("New Connection", "اتصال جديد"), ("Restore", "استعادة"), ("Minimize", "تصغير"), ("Maximize", "تكبير"), ("Your Device", "جهازك"), - ("empty_recent_tip", ""), - ("empty_favorite_tip", ""), - ("empty_lan_tip", ""), - ("empty_address_book_tip", ""), + ("empty_recent_tip", "للاسف. لا توجد جلسات حديثة\nحان الوقت للتخطيط لواحدة جديدة."), + ("empty_favorite_tip", "لا يوجد اقران مفضلين حتى الان؟\nحسنا لنبحث عن شخص للاتصال معه ومن ثم اضافته للمفضلة."), + ("empty_lan_tip", "اه لا, يبدو انك لم تكتشف اي قرين بعد."), + ("empty_address_book_tip", "يا عزيزي, يبدو انه لايوجد حاليا اي اقران في كتاب العناوين."), ("eg: admin", "مثلا: admin"), ("Empty Username", "اسم مستخدم فارغ"), ("Empty Password", "كلمة مرور فارغة"), ("Me", "انا"), - ("identical_file_tip", ""), - ("show_monitors_tip", ""), - ("View Mode", ""), - ("login_linux_tip", ""), - ("verify_rustdesk_password_tip", ""), + ("identical_file_tip", "هذا الملف مطابق لملف موجود عن القرين."), + ("show_monitors_tip", "عرض الشاشات في شريط الادوات"), + ("View Mode", "وضع العرض"), + ("login_linux_tip", "تحتاج الى تسجيل الدخول حساب لينكس البعيد وتفعيل جلسة سطح مكتب X"), + ("verify_rustdesk_password_tip", "تحقق من كلمة مرور RustDesk"), ("enter_rustdesk_passwd_tip", "ادخل كلمة مرور RustDesk"), ("remember_rustdesk_passwd_tip", "تذكر كلمة مرور RustDesk"), ("remember_account_tip", "تذكر هذا الحساب"), - ("os_account_desk_tip", ""), - ("OS Account", ""), - ("another_user_login_title_tip", ""), + ("os_account_desk_tip", "هذا الحساب مستخدم لتسجيل الدخول الى سطح المكتب البعيد وتفعيل الجلسة"), + ("OS Account", "حساب نظام التشغيل"), + ("another_user_login_title_tip", "مستخدم اخر مسجل دخول حاليا"), ("another_user_login_text_tip", "قطع الاتصال"), ("xorg_not_found_title_tip", "Xorg غير موجود"), ("xorg_not_found_text_tip", "الرجاء تثبيت Xorg"), ("no_desktop_title_tip", "لا يتوفر سطح مكتب"), ("no_desktop_text_tip", "الرجاء تثبيت سطح مكتب GNOME"), - ("No need to elevate", ""), + ("No need to elevate", "لا حاجة للارتقاء"), ("System Sound", "صوت النظام"), ("Default", "الافتراضي"), - ("New RDP", ""), + ("New RDP", "RDP جديد"), ("Fingerprint", "البصمة"), ("Copy Fingerprint", "نسخ البصمة"), - ("no fingerprints", ""), - ("Select a peer", ""), - ("Select peers", ""), + ("no fingerprints", "لا توجد بصمات اصابع"), + ("Select a peer", "اختر قرين"), + ("Select peers", "اختر الاقران"), ("Plugins", "الاضافات"), ("Uninstall", "الغاء التثبيت"), ("Update", "تحديث"), @@ -509,37 +509,37 @@ lazy_static::lazy_static! { ("Disable", "تعطيل"), ("Options", "الخيارات"), ("resolution_original_tip", "الدقة الأصلية"), - ("resolution_fit_local_tip", ""), + ("resolution_fit_local_tip", "تناسب الدقة المحلية"), ("resolution_custom_tip", "دقة مخصصة"), - ("Collapse toolbar", ""), - ("Accept and Elevate", ""), - ("accept_and_elevate_btn_tooltip", ""), - ("clipboard_wait_response_timeout_tip", ""), - ("Incoming connection", ""), - ("Outgoing connection", ""), + ("Collapse toolbar", "طي شريط الادوات"), + ("Accept and Elevate", "قبول وارتقاء"), + ("accept_and_elevate_btn_tooltip", "قبول الاتصال وارتقاء صلاحيات التحكم بصلاحيات المستخدم."), + ("clipboard_wait_response_timeout_tip", "انتهى وقت الانتظار لنسخ الرد."), + ("Incoming connection", "اتصال قادم"), + ("Outgoing connection", "اتصال مغادر"), ("Exit", "خروج"), ("Open", "فتح"), - ("logout_tip", ""), + ("logout_tip", "هل انت متاكد من انك تريد تسجيل الخروج"), ("Service", "الخدمة"), ("Start", "تشغيل"), ("Stop", "ايقاف"), - ("exceed_max_devices", ""), - ("Sync with recent sessions", ""), - ("Sort tags", ""), - ("Open connection in new tab", ""), - ("Move tab to new window", ""), - ("Can not be empty", ""), - ("Already exists", ""), + ("exceed_max_devices", "لقد وصلت الحد الأقصى لعدد الاجهزة التي يمكن دارتها."), + ("Sync with recent sessions", "المزامنة مع الجلسات الحديثة"), + ("Sort tags", "ترتيب العلامات"), + ("Open connection in new tab", "فتح اتصال في لسان جديد"), + ("Move tab to new window", "نقل اللسان الى نافذة جديدة"), + ("Can not be empty", "لا يمكن ان يكون فارغ"), + ("Already exists", "موجود مسبقا"), ("Change Password", "تغيير كلمة المرور"), ("Refresh Password", "تحديث كلمة المرور"), ("ID", "المعرف"), ("Grid View", "عرض شبكي"), ("List View", "رعض قائمة"), ("Select", "اختيار"), - ("Toggle Tags", ""), - ("pull_ab_failed_tip", ""), - ("push_ab_failed_tip", ""), - ("synced_peer_readded_tip", ""), + ("Toggle Tags", "تفعيل/تعطيل العلامات"), + ("pull_ab_failed_tip", "فشل تحديث كتاب العناوين"), + ("push_ab_failed_tip", "فشل مزامنة كتاب العناوين مع الخادم"), + ("synced_peer_readded_tip", "الاجهزة الموجودة في الجلسات الحديثة سيتم مزامنتها مع كتاب العناوين"), ].iter().cloned().collect(); } \ No newline at end of file From 3e6faf83643c74272534f9bb04c0a2f4e2cbe9f0 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 26 Aug 2023 10:05:25 +0800 Subject: [PATCH 548/612] rust start cm ipc only after login request permission check or switch sides Signed-off-by: 21pages --- src/server/connection.rs | 48 +++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/src/server/connection.rs b/src/server/connection.rs index 7d1768f4c..22459096f 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -135,6 +135,14 @@ struct Session { random_password: String, } +#[cfg(not(any(target_os = "android", target_os = "ios")))] +struct StartCmIpcPara { + rx_to_cm: mpsc::UnboundedReceiver, + tx_from_cm: mpsc::UnboundedSender, + rx_desktop_ready: mpsc::Receiver<()>, + tx_cm_stream_ready: mpsc::Sender<()>, +} + pub struct Connection { inner: ConnInner, stream: super::Stream, @@ -193,6 +201,8 @@ pub struct Connection { linux_headless_handle: LinuxHeadlessHandle, closed: bool, delay_response_instant: Instant, + #[cfg(not(any(target_os = "android", target_os = "ios")))] + start_cm_ipc_para: Option, } impl ConnInner { @@ -324,6 +334,13 @@ impl Connection { linux_headless_handle, closed: false, delay_response_instant: Instant::now(), + #[cfg(not(any(target_os = "android", target_os = "ios")))] + start_cm_ipc_para: Some(StartCmIpcPara { + rx_to_cm, + tx_from_cm, + rx_desktop_ready, + tx_cm_stream_ready, + }), }; let addr = hbb_common::try_into_v4(addr); if !conn.on_open(addr).await { @@ -332,14 +349,6 @@ impl Connection { sleep(1.).await; return; } - #[cfg(not(any(target_os = "android", target_os = "ios")))] - tokio::spawn(async move { - if let Err(err) = - start_ipc(rx_to_cm, tx_from_cm, rx_desktop_ready, tx_cm_stream_ready).await - { - log::error!("ipc to connection manager exit: {}", err); - } - }); #[cfg(target_os = "android")] start_channel(rx_to_cm, tx_from_cm); if !conn.keyboard { @@ -1316,6 +1325,24 @@ impl Connection { self.video_ack_required = lr.video_ack_required; } + #[cfg(not(any(target_os = "android", target_os = "ios")))] + fn try_start_cm_ipc(&mut self) { + if let Some(p) = self.start_cm_ipc_para.take() { + tokio::spawn(async move { + if let Err(err) = start_ipc( + p.rx_to_cm, + p.tx_from_cm, + p.rx_desktop_ready, + p.tx_cm_stream_ready, + ) + .await + { + log::error!("ipc to connection manager exit: {}", err); + } + }); + } + } + async fn on_message(&mut self, msg: Message) -> bool { if let Some(message::Union::LoginRequest(lr)) = msg.union { self.handle_login_request_without_validation(&lr).await; @@ -1379,6 +1406,9 @@ impl Connection { } } + #[cfg(not(any(target_os = "android", target_os = "ios")))] + self.try_start_cm_ipc(); + #[cfg(any( feature = "flatpak", feature = "appimage", @@ -1543,6 +1573,8 @@ impl Connection { self.from_switch = true; self.try_start_cm(lr.my_id.clone(), lr.my_name.clone(), true); self.send_logon_response().await; + #[cfg(not(any(target_os = "android", target_os = "ios")))] + self.try_start_cm_ipc(); } } } From 50b8744f244867a57008bb5805ac8f51851dcef6 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 26 Aug 2023 18:49:23 +0800 Subject: [PATCH 549/612] flutter hide cm if client is empty, close cm if that last for 6 seconds Signed-off-by: 21pages --- flutter/lib/main.dart | 10 ++++--- flutter/lib/models/server_model.dart | 40 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index dbf563de2..8edd3a356 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -268,10 +268,12 @@ hideCmWindow({bool isStartup = false}) async { await windowManager.hide(); }); } else { - await windowManager.setOpacity(0); - bind.mainHideDocker(); - await windowManager.minimize(); - await windowManager.hide(); + if (await windowManager.getOpacity() != 0) { + await windowManager.setOpacity(0); + bind.mainHideDocker(); + await windowManager.minimize(); + await windowManager.hide(); + } } } diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 8f56ffbe2..716c535ad 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -36,6 +36,7 @@ class ServerModel with ChangeNotifier { String _verificationMethod = ""; String _temporaryPasswordLength = ""; String _approveMode = ""; + int _zeroClientLengthCounter = 0; late String _emptyIdShow; late final IDTextEditingController _serverId; @@ -120,6 +121,17 @@ class ServerModel with ChangeNotifier { _emptyIdShow = translate("Generating ..."); _serverId = IDTextEditingController(text: _emptyIdShow); + // initital _hideCm at startup + final verificationMethod = + bind.mainGetOptionSync(key: "verification-method"); + final approveMode = bind.mainGetOptionSync(key: 'approve-mode'); + _hideCm = option2bool( + 'allow-hide-cm', bind.mainGetOptionSync(key: 'allow-hide-cm')); + if (!(approveMode == 'password' && + verificationMethod == kUsePermanentPassword)) { + _hideCm = false; + } + timerCallback() async { final connectionStatus = jsonDecode(await bind.mainGetConnectStatus()) as Map; @@ -134,6 +146,17 @@ class ServerModel with ChangeNotifier { if (res != null) { debugPrint("clients not match!"); updateClientState(res); + } else { + if (_clients.isEmpty) { + hideCmWindow(); + if (_zeroClientLengthCounter++ == 12) { + // 6 second + windowManager.close(); + } + } else { + _zeroClientLengthCounter = 0; + if (!_hideCm) showCmWindow(); + } } } @@ -422,6 +445,7 @@ class ServerModel with ChangeNotifier { return; } + final oldClientLenght = _clients.length; _clients.clear(); tabController.state.value.tabs.clear(); @@ -434,6 +458,16 @@ class ServerModel with ChangeNotifier { debugPrint("Failed to decode clientJson '$clientJson', error $e"); } } + if (desktopType == DesktopType.cm) { + if (_clients.isEmpty) { + hideCmWindow(); + } else if (!_hideCm) { + showCmWindow(); + } + } + if (_clients.length != oldClientLenght) { + notifyListeners(); + } } void addConnection(Map evt) { @@ -461,6 +495,9 @@ class ServerModel with ChangeNotifier { _clients.removeAt(index_disconnected); tabController.remove(index_disconnected); } + if (desktopType == DesktopType.cm && !_hideCm) { + showCmWindow(); + } scrollToBottom(); notifyListeners(); if (isAndroid && !client.authorized) showLoginDialog(client); @@ -581,6 +618,9 @@ class ServerModel with ChangeNotifier { parent.target?.dialogManager.dismissByTag(getLoginDialogTag(id)); parent.target?.invokeMethod("cancel_notification", id); } + if (desktopType == DesktopType.cm && _clients.isEmpty) { + hideCmWindow(); + } notifyListeners(); } catch (e) { debugPrint("onClientRemove failed,error:$e"); From 52adf51d33a7e1a99fca7aabc3f5284cc635f9fd Mon Sep 17 00:00:00 2001 From: Abdullah Ibrahim Date: Sat, 26 Aug 2023 16:04:50 +0300 Subject: [PATCH 550/612] Complete arabic translation --- src/lang/ar.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lang/ar.rs b/src/lang/ar.rs index 201db6dc1..88137622a 100644 --- a/src/lang/ar.rs +++ b/src/lang/ar.rs @@ -283,19 +283,19 @@ lazy_static::lazy_static! { ("Do you accept?", "هل تقبل؟"), ("Open System Setting", "فتح اعدادات النظام"), ("How to get Android input permission?", "كيف تحصل على اذن الادخال في اندرويد؟"), - ("android_input_permission_tip1", ""), - ("android_input_permission_tip2", ""), - ("android_new_connection_tip", ""), - ("android_service_will_start_tip", ""), - ("android_stop_service_tip", ""), - ("android_version_audio_tip", ""), - ("android_start_service_tip", ""), - ("android_permission_may_not_change_tip", ""), + ("android_input_permission_tip1", "لكي يتمكن جهاز بعيد من التحكم بجهازك الـ Android عن طريق الفارة أو اللمس، يلزمك السماح لـ RustDesk باستخدام خدمة \"إمكانية الوصول\"."), + ("android_input_permission_tip2", "يرجى الانتقال إلى صفحة إعدادات النظام التالية، والعثور على [الخدمات المثبتة]، وتشغيل خدمة [RustDesk Input]."), + ("android_new_connection_tip", "تم استلام طلب تحكم جديد، حيث يريد التحكم بجهازك الحالي."), + ("android_service_will_start_tip", "تشغيل \"لقط الشاشة\" سيبدأ الخدمة تلقائيا، حيث سيسمح للاجهزة الاخرى بطلب الاتصال مع جهازك."), + ("android_stop_service_tip", "اغلاق الخدمة سيغلق جميع الاتصالات القائمة."), + ("android_version_audio_tip", "نسخة اندرويد الحالية لا تدعم خدمة لقط الصوت، الرجاء الترقية الى نسخة 10 او أحدث."), + ("android_start_service_tip", "اضغط تشغيل الخدمة او فعل صلاحية لقط الشاشة لبدء خدمة مشاركة الشاشة."), + ("android_permission_may_not_change_tip", "الاذونات الاتصالات القائمة قد لا تتغير مباشرة الا بعد اعادة الاتصال."), ("Account", "الحساب"), ("Overwrite", "استبدال"), ("This file exists, skip or overwrite this file?", "الملف موجود, هل تريد التجاوز او الاستبدال؟"), ("Quit", "خروج"), - ("doc_mac_permission", ""), + ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), ("Help", "مساعدة"), ("Failed", "فشل"), ("Succeeded", "نجاح"), @@ -311,7 +311,7 @@ lazy_static::lazy_static! { ("Language", "اللغة"), ("Keep RustDesk background service", "ابق خدمة RustDesk تعمل في الخلفية"), ("Ignore Battery Optimizations", "تجاهل تحسينات البطارية"), - ("android_open_battery_optimizations_tip", ""), + ("android_open_battery_optimizations_tip", "اذا اردت تعطيل هذه الميزة, الرجاء الذهاب الى صفحة اعدادات تطبيق RustDesk, ابحث عن البطارية, الغ تحديد غير مقيد"), ("Start on Boot", "البدء عند تشغيل النظام"), ("Start the screen sharing service on boot, requires special permissions", "تشغيل خدمة مشاركة الشاشة عند بدء تشغيل النظام, يحتاج الى اذونات خاصة"), ("Connection not allowed", "الاتصال غير مسموح"), @@ -382,7 +382,7 @@ lazy_static::lazy_static! { ("Write a message", "اكتب رسالة"), ("Prompt", ""), ("Please wait for confirmation of UAC...", "الرجاء انتظار تاكيد تحكم حساب المستخدم..."), - ("elevated_foreground_window_tip", ""), + ("elevated_foreground_window_tip", "النافذة الحالية لسطح المكتب البعيد تحتاج صلاحية اعلى لتعمل, لذلك لن تستطيع استخدام الفارة ولوحة المفاتيح مؤقتا. تستطيع انت تطلب من المستخدم البعيد تصغير النافذة الحالية, او ضفط زر الارتقاء في نافذة ادارة الاتصال. لتفادي هذة المشكلة من المستحسن تثبيت البرنامج في الجهاز البعيد."), ("Disconnected", "مفصول"), ("Other", "اخرى"), ("Confirm before closing multiple tabs", "التاكيد قبل اغلاق السنة عديدة"), From 553e3ee7586e64815a5e5dc6c8ccebcabf6b33c7 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sun, 27 Aug 2023 10:28:16 +0800 Subject: [PATCH 551/612] win, try awake the os by mouse movement and right click Signed-off-by: fufesou --- flutter/lib/common/widgets/peer_card.dart | 2 -- flutter/lib/common/widgets/peer_tab_page.dart | 2 -- src/client.rs | 21 ++++++++++++------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index a9d18b42c..f5af94220 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -1,11 +1,9 @@ import 'dart:io'; -import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/common/widgets/dialog.dart'; import 'package:flutter_hbb/consts.dart'; -import 'package:flutter_hbb/models/ab_model.dart'; import 'package:flutter_hbb/models/peer_tab_model.dart'; import 'package:get/get.dart'; import 'package:provider/provider.dart'; diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index 3f4161477..cb5413ba1 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -1,11 +1,9 @@ -import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/common/widgets/address_book.dart'; import 'package:flutter_hbb/common/widgets/dialog.dart'; import 'package:flutter_hbb/common/widgets/my_group.dart'; import 'package:flutter_hbb/common/widgets/peers_view.dart'; import 'package:flutter_hbb/common/widgets/peer_card.dart'; -import 'package:flutter_hbb/common/widgets/animated_rotation_widget.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/desktop/widgets/popup_menu.dart'; import 'package:flutter_hbb/models/ab_model.dart'; diff --git a/src/client.rs b/src/client.rs index 253c293ee..0bfcfb655 100644 --- a/src/client.rs +++ b/src/client.rs @@ -58,7 +58,7 @@ use scrap::{ }; use crate::{ - common::input::{MOUSE_BUTTON_LEFT, MOUSE_TYPE_DOWN, MOUSE_TYPE_UP}, + common::input::{MOUSE_BUTTON_LEFT, MOUSE_BUTTON_RIGHT, MOUSE_TYPE_DOWN, MOUSE_TYPE_UP}, is_keyboard_mode_supported, }; @@ -2060,20 +2060,25 @@ pub fn send_pointer_device_event( /// # Arguments /// /// * `interface` - The interface for sending data. -/// * `send_click` - Whether to send a click event. -fn activate_os(interface: &impl Interface, send_click: bool) { +/// * `send_left_click` - Whether to send a click event. +fn activate_os(interface: &impl Interface, send_left_click: bool) { let left_down = MOUSE_BUTTON_LEFT << 3 | MOUSE_TYPE_DOWN; let left_up = MOUSE_BUTTON_LEFT << 3 | MOUSE_TYPE_UP; + let right_down = MOUSE_BUTTON_RIGHT << 3 | MOUSE_TYPE_DOWN; + let right_up = MOUSE_BUTTON_RIGHT << 3 | MOUSE_TYPE_UP; send_mouse(left_up, 0, 0, false, false, false, false, interface); std::thread::sleep(Duration::from_millis(50)); send_mouse(0, 0, 0, false, false, false, false, interface); std::thread::sleep(Duration::from_millis(50)); send_mouse(0, 3, 3, false, false, false, false, interface); - if send_click { - std::thread::sleep(Duration::from_millis(50)); - send_mouse(left_down, 0, 0, false, false, false, false, interface); - send_mouse(left_up, 0, 0, false, false, false, false, interface); - } + let (click_down, click_up) = if send_left_click { + (left_down, left_up) + } else { + (right_down, right_up) + }; + std::thread::sleep(Duration::from_millis(50)); + send_mouse(click_down, 0, 0, false, false, false, false, interface); + send_mouse(click_up, 0, 0, false, false, false, false, interface); /* let mut key_event = KeyEvent::new(); // do not use Esc, which has problem with Linux From 4dd694ab05c194d81c1951f9b2455476d5141bc9 Mon Sep 17 00:00:00 2001 From: fufesou Date: Sun, 27 Aug 2023 11:12:02 +0800 Subject: [PATCH 552/612] better way to detect no displays Signed-off-by: fufesou --- src/server/video_service.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/server/video_service.rs b/src/server/video_service.rs index d4578f547..8800d3b23 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -997,8 +997,18 @@ fn no_displays(displays: &Vec) -> bool { } else if display_len == 1 { let display = &displays[0]; let dummy_display_side_max_size = 800; - display.width() <= dummy_display_side_max_size - && display.height() <= dummy_display_side_max_size + if display.width() > dummy_display_side_max_size + || display.height() > dummy_display_side_max_size + { + return false; + } + let any_real = crate::platform::resolutions(&display.name()) + .iter() + .any(|r| { + (r.height as usize) > dummy_display_side_max_size + || (r.width as usize) > dummy_display_side_max_size + }); + !any_real } else { false } From 9158bdfcf99141dd0729cb36bef6ff29e3b39559 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 27 Aug 2023 11:36:01 +0800 Subject: [PATCH 553/612] fix decrypt unicode string Signed-off-by: 21pages --- libs/hbb_common/src/password_security.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libs/hbb_common/src/password_security.rs b/libs/hbb_common/src/password_security.rs index 64dce1fdc..9584ab6c0 100644 --- a/libs/hbb_common/src/password_security.rs +++ b/libs/hbb_common/src/password_security.rs @@ -103,15 +103,16 @@ pub fn encrypt_str_or_original(s: &str, version: &str, max_len: usize) -> String // String: password // bool: whether decryption is successful // bool: whether should store to re-encrypt when load +// note: s.len() return length in bytes, s.chars().count() return char count +// &[..2] return the left 2 bytes, s.chars().take(2) return the left 2 chars pub fn decrypt_str_or_original(s: &str, current_version: &str) -> (String, bool, bool) { if s.len() > VERSION_LEN { - let version = &s[..VERSION_LEN]; - if version == "00" { + if s.starts_with("00") { if let Ok(v) = decrypt(s[VERSION_LEN..].as_bytes()) { return ( String::from_utf8_lossy(&v).to_string(), true, - version != current_version, + "00" != current_version, ); } } @@ -198,7 +199,7 @@ mod test { let max_len = 128; println!("test str"); - let data = "Hello World"; + let data = "1ü1111"; let encrypted = encrypt_str_or_original(data, version, max_len); let (decrypted, succ, store) = decrypt_str_or_original(&encrypted, version); println!("data: {data}"); @@ -217,7 +218,7 @@ mod test { ); println!("test vec"); - let data: Vec = vec![1, 2, 3, 4, 5, 6]; + let data: Vec = "1ü1111".as_bytes().to_vec(); let encrypted = encrypt_vec_or_original(&data, version, max_len); let (decrypted, succ, store) = decrypt_vec_or_original(&encrypted, version); println!("data: {data:?}"); @@ -253,6 +254,10 @@ mod test { let (_, succ, store) = decrypt_vec_or_original(&[], version); assert!(!store); assert!(!succ); + let data = "1ü1111"; + assert_eq!(decrypt_str_or_original(data, version).0, data); + let data: Vec = "1ü1111".as_bytes().to_vec(); + assert_eq!(decrypt_vec_or_original(&data, version).0, data); println!("test speed"); let test_speed = |len: usize, name: &str| { From 15e8f6ffb71c570c4d1b0f06dba1329c51beab33 Mon Sep 17 00:00:00 2001 From: RustDesk <71636191+rustdesk@users.noreply.github.com> Date: Sun, 27 Aug 2023 13:03:22 +0800 Subject: [PATCH 554/612] Update lang.rs --- src/lang.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lang.rs b/src/lang.rs index 9d0a9e7ea..eff0141c2 100644 --- a/src/lang.rs +++ b/src/lang.rs @@ -33,6 +33,7 @@ mod tw; mod ua; mod vn; mod lt; +mod ar; pub const LANGS: &[(&str, &str)] = &[ ("en", "English"), @@ -133,6 +134,7 @@ pub fn translate_locale(name: String, locale: &str) -> String { "sl" => sl::T.deref(), "ro" => ro::T.deref(), "lt" => lt::T.deref(), + "ar" => ar::T.deref(), _ => en::T.deref(), }; if let Some(v) = m.get(&name as &str) { From 95b588f58e6e0b5cd44d7e33ce554c72f130e819 Mon Sep 17 00:00:00 2001 From: FastAct <93490087+FastAct@users.noreply.github.com> Date: Sun, 27 Aug 2023 09:33:13 +0200 Subject: [PATCH 555/612] Update nl.rs --- src/lang/nl.rs | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 2be2d5da2..b1913d24f 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -524,22 +524,22 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("exceed_max_devices", "Het maximum aantal gecontroleerde apparaten is bereikt."), ("Sync with recent sessions", "Recente sessies synchroniseren"), ("Sort tags", "Labels sorteren"), - ("Open connection in new tab", ""), - ("Move tab to new window", ""), - ("Can not be empty", ""), - ("Already exists", ""), - ("Change Password", ""), - ("Refresh Password", ""), - ("ID", ""), - ("Grid View", ""), - ("List View", ""), - ("Select", ""), - ("Toggle Tags", ""), - ("pull_ab_failed_tip", ""), - ("push_ab_failed_tip", ""), - ("synced_peer_readded_tip", ""), - ("Change Color", ""), - ("Primary Color", ""), - ("HSV Color", ""), + ("Open connection in new tab", "Verbinding openen in een nieuw tabblad"), + ("Move tab to new window", "Tabblad verplaatsen naar nieuw venster"), + ("Can not be empty", "Mag niet leeg zijn"), + ("Already exists", "Bestaat reeds"), + ("Change Password", "Wijzig Wachtwoord"), + ("Refresh Password", "Wachtwoord Vernieuwen"), + ("ID", "ID"), + ("Grid View", "Rasterweergave"), + ("List View", "Lijstweergave"), + ("Select", "Selecteer"), + ("Toggle Tags", "Schakel Tags"), + ("pull_ab_failed_tip", "Adresboek kan niet worden bijgewerkt"), + ("push_ab_failed_tip", "Synchronisatie van adresboek mislukt"), + ("synced_peer_readded_tip", "Apparaten die aanwezig waren in recente sessies worden gesynchroniseerd met het adresboek."), + ("Change Color", "Kleur Aanpassen"), + ("Primary Color", "Hoofdkleur"), + ("HSV Color", "HSV Kleur"), ].iter().cloned().collect(); } From 26c95bab669ffadecf03dab69f0c48fdab95f024 Mon Sep 17 00:00:00 2001 From: Abdullah Ibrahim Date: Sun, 27 Aug 2023 11:14:29 +0300 Subject: [PATCH 556/612] Update lang.rs --- src/lang.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang.rs b/src/lang.rs index eff0141c2..adc3623a5 100644 --- a/src/lang.rs +++ b/src/lang.rs @@ -69,7 +69,7 @@ pub const LANGS: &[(&str, &str)] = &[ ("sl", "Slovenščina"), ("ro", "Română"), ("lt", "Lietuvių"), - ("ar": "العربية"), + ("ar", "العربية"), ]; #[cfg(not(any(target_os = "android", target_os = "ios")))] From 26ef2539df37815eef510c0801ba30df65db7065 Mon Sep 17 00:00:00 2001 From: Abdullah Ibrahim Date: Sun, 27 Aug 2023 14:43:46 +0300 Subject: [PATCH 557/612] Update lang.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace strange Unicode character ';' with Semicolon --- src/lang.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang.rs b/src/lang.rs index adc3623a5..75c067e14 100644 --- a/src/lang.rs +++ b/src/lang.rs @@ -33,7 +33,7 @@ mod tw; mod ua; mod vn; mod lt; -mod ar; +mod ar; pub const LANGS: &[(&str, &str)] = &[ ("en", "English"), From 173984ffd4466b0c68219b77afee015d275b5aa8 Mon Sep 17 00:00:00 2001 From: fufesou Date: Mon, 28 Aug 2023 10:44:24 +0800 Subject: [PATCH 558/612] remove virtual display, beccause it sometimes unable to install(with the exclamation) and there's an connecting bug Signed-off-by: fufesou --- src/server/video_service.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/server/video_service.rs b/src/server/video_service.rs index 8800d3b23..e8f6f30c2 100644 --- a/src/server/video_service.rs +++ b/src/server/video_service.rs @@ -1016,16 +1016,16 @@ fn no_displays(displays: &Vec) -> bool { #[cfg(all(windows, feature = "virtual_display_driver"))] fn try_get_displays() -> ResultType> { - let mut displays = Display::all()?; - if no_displays(&displays) { - log::debug!("no displays, create virtual display"); - if let Err(e) = virtual_display_manager::plug_in_headless() { - log::error!("plug in headless failed {}", e); - } else { - displays = Display::all()?; - } - } - Ok(displays) + // let mut displays = Display::all()?; + // if no_displays(&displays) { + // log::debug!("no displays, create virtual display"); + // if let Err(e) = virtual_display_manager::plug_in_headless() { + // log::error!("plug in headless failed {}", e); + // } else { + // displays = Display::all()?; + // } + // } + Ok( Display::all()?) } pub(super) fn get_current_display_2(mut all: Vec) -> ResultType<(usize, usize, Display)> { From 76a18f5ed34b6e072a0b8074a3b91d575a799ba5 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 30 Aug 2023 11:48:42 +0800 Subject: [PATCH 559/612] remove hide_cm Signed-off-by: 21pages --- .../lib/desktop/pages/desktop_setting_page.dart | 4 ++-- flutter/lib/main.dart | 1 + flutter/lib/models/server_model.dart | 16 ++++++++++------ src/hbbs_http/sync.rs | 14 +++++++++++++- src/server/connection.rs | 5 ++--- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 0222a286d..5b317d5f3 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -707,8 +707,8 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin { if (usePassword) _SubButton('Set permanent password', setPasswordDialog, permEnabled && !locked), - if (usePassword) - hide_cm(!locked).marginOnly(left: _kContentHSubMargin - 6), + // if (usePassword) + // hide_cm(!locked).marginOnly(left: _kContentHSubMargin - 6), if (usePassword) radios[2], ]); }))); diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index 8edd3a356..86bc86517 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -223,6 +223,7 @@ void runConnectionManagerScreen(bool hide) async { const DesktopServerPage(), MyTheme.currentThemeMode(), ); + gFFI.serverModel.hideCm = hide; if (hide) { await hideCmWindow(isStartup: true); } else { diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 716c535ad..9fb91f463 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -31,7 +31,7 @@ class ServerModel with ChangeNotifier { bool _audioOk = false; bool _fileOk = false; bool _showElevation = false; - bool _hideCm = false; + bool hideCm = false; int _connectStatus = 0; // Rendezvous Server status String _verificationMethod = ""; String _temporaryPasswordLength = ""; @@ -61,8 +61,6 @@ class ServerModel with ChangeNotifier { bool get showElevation => _showElevation; - bool get hideCm => _hideCm; - int get connectStatus => _connectStatus; String get verificationMethod { @@ -121,6 +119,7 @@ class ServerModel with ChangeNotifier { _emptyIdShow = translate("Generating ..."); _serverId = IDTextEditingController(text: _emptyIdShow); + /* // initital _hideCm at startup final verificationMethod = bind.mainGetOptionSync(key: "verification-method"); @@ -131,6 +130,7 @@ class ServerModel with ChangeNotifier { verificationMethod == kUsePermanentPassword)) { _hideCm = false; } + */ timerCallback() async { final connectionStatus = @@ -155,7 +155,7 @@ class ServerModel with ChangeNotifier { } } else { _zeroClientLengthCounter = 0; - if (!_hideCm) showCmWindow(); + if (!hideCm) showCmWindow(); } } } @@ -210,12 +210,14 @@ class ServerModel with ChangeNotifier { final temporaryPasswordLength = await bind.mainGetOption(key: "temporary-password-length"); final approveMode = await bind.mainGetOption(key: 'approve-mode'); + /* var hideCm = option2bool( 'allow-hide-cm', await bind.mainGetOption(key: 'allow-hide-cm')); if (!(approveMode == 'password' && verificationMethod == kUsePermanentPassword)) { hideCm = false; } + */ if (_approveMode != approveMode) { _approveMode = approveMode; update = true; @@ -247,6 +249,7 @@ class ServerModel with ChangeNotifier { _temporaryPasswordLength = temporaryPasswordLength; update = true; } + /* if (_hideCm != hideCm) { _hideCm = hideCm; if (desktopType == DesktopType.cm) { @@ -258,6 +261,7 @@ class ServerModel with ChangeNotifier { } update = true; } + */ if (update) { notifyListeners(); } @@ -461,7 +465,7 @@ class ServerModel with ChangeNotifier { if (desktopType == DesktopType.cm) { if (_clients.isEmpty) { hideCmWindow(); - } else if (!_hideCm) { + } else if (!hideCm) { showCmWindow(); } } @@ -495,7 +499,7 @@ class ServerModel with ChangeNotifier { _clients.removeAt(index_disconnected); tabController.remove(index_disconnected); } - if (desktopType == DesktopType.cm && !_hideCm) { + if (desktopType == DesktopType.cm && !hideCm) { showCmWindow(); } scrollToBottom(); diff --git a/src/hbbs_http/sync.rs b/src/hbbs_http/sync.rs index 84af1f69b..45e27b7bc 100644 --- a/src/hbbs_http/sync.rs +++ b/src/hbbs_http/sync.rs @@ -1,4 +1,8 @@ -use std::{collections::HashMap, sync::Mutex, time::Duration}; +use std::{ + collections::HashMap, + sync::{Arc, Mutex}, + time::Duration, +}; #[cfg(not(any(target_os = "ios")))] use crate::Connection; @@ -16,6 +20,7 @@ const TIME_CONN: Duration = Duration::from_secs(3); #[cfg(not(any(target_os = "ios")))] lazy_static::lazy_static! { static ref SENDER : Mutex>> = Mutex::new(start_hbbs_sync()); + static ref PRO: Arc> = Default::default(); } #[cfg(not(any(target_os = "ios")))] @@ -54,6 +59,7 @@ async fn start_hbbs_sync_async() { _ = interval.tick() => { let url = heartbeat_url(); if url.is_empty() { + *PRO.lock().unwrap() = false; continue; } if !Config::get_option("stop-service").is_empty() { @@ -62,6 +68,7 @@ async fn start_hbbs_sync_async() { let conns = Connection::alive_conns(); if info_uploaded.0 && url != info_uploaded.1 { info_uploaded.0 = false; + *PRO.lock().unwrap() = false; } if !info_uploaded.0 && info_uploaded.2.map(|x| x.elapsed() >= UPLOAD_SYSINFO_TIMEOUT).unwrap_or(true){ let mut v = crate::get_sysinfo(); @@ -73,6 +80,7 @@ async fn start_hbbs_sync_async() { if x == "SYSINFO_UPDATED" { info_uploaded = (true, url.clone(), None); hbb_common::log::info!("sysinfo updated"); + *PRO.lock().unwrap() = true; } else if x == "ID_NOT_FOUND" { info_uploaded.2 = None; // next heartbeat will upload sysinfo again } else { @@ -148,3 +156,7 @@ fn handle_config_options(config_options: HashMap) { .count(); Config::set_options(options); } + +pub fn is_pro() -> bool { + PRO.lock().unwrap().clone() +} diff --git a/src/server/connection.rs b/src/server/connection.rs index 22459096f..df3b2c8eb 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -2393,10 +2393,9 @@ async fn start_ipc( stream = Some(s); } else { let mut args = vec!["--cm"]; - if password::hide_cm() { + if crate::hbbs_http::sync::is_pro() && password::hide_cm() { args.push("--hide"); - }; - + } #[allow(unused_mut)] #[cfg(target_os = "linux")] let mut user = None; From 7671ed857da5f452d9580659d86db68d7b100e57 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 30 Aug 2023 13:49:10 +0800 Subject: [PATCH 560/612] ios add dummy call and remove some lookup functions Signed-off-by: dignow --- flutter/ios/Runner/AppDelegate.swift | 5 +-- flutter/ios/Runner/ffi.h | 5 +-- flutter/lib/models/model.dart | 2 +- flutter/lib/models/native_model.dart | 62 ++++------------------------ src/flutter.rs | 35 ++++++---------- src/flutter_ffi.rs | 28 +++++++------ 6 files changed, 39 insertions(+), 98 deletions(-) diff --git a/flutter/ios/Runner/AppDelegate.swift b/flutter/ios/Runner/AppDelegate.swift index 06a9a2695..b1c78e9c8 100644 --- a/flutter/ios/Runner/AppDelegate.swift +++ b/flutter/ios/Runner/AppDelegate.swift @@ -13,9 +13,6 @@ import Flutter } public func dummyMethodToEnforceBundling() { - get_rgba(); - // free_rgba(nil); - // get_by_name("", ""); - // set_by_name("", ""); + session_get_rgba(nil); } } diff --git a/flutter/ios/Runner/ffi.h b/flutter/ios/Runner/ffi.h index 701ec4b09..56b0d6ccc 100644 --- a/flutter/ios/Runner/ffi.h +++ b/flutter/ios/Runner/ffi.h @@ -1,4 +1 @@ -void* get_rgba(); -void free_rgba(void*); -void set_by_name(const char*, const char*); -const char* get_by_name(const char*, const char*); +const unsigned char* session_get_rgba(const char*); diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 4dc17f9c2..105c2b513 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1693,7 +1693,7 @@ class FFI { } else { // Fetch the image buffer from rust codes. final sz = platformFFI.getRgbaSize(sessionId); - if (sz == null || sz == 0) { + if (sz == 0) { return; } final rgba = platformFFI.getRgba(sessionId, sz); diff --git a/flutter/lib/models/native_model.dart b/flutter/lib/models/native_model.dart index d2e11e2c1..80809309a 100644 --- a/flutter/lib/models/native_model.dart +++ b/flutter/lib/models/native_model.dart @@ -21,16 +21,8 @@ class RgbaFrame extends Struct { external Pointer data; } -typedef F2 = Pointer Function(Pointer, Pointer); typedef F3 = Pointer Function(Pointer); -typedef F4 = Uint64 Function(Pointer); -typedef F4Dart = int Function(Pointer); -typedef F5 = Void Function(Pointer); -typedef F5Dart = void Function(Pointer); typedef HandleEvent = Future Function(Map evt); -// pub fn session_register_texture(id: *const char, ptr: usize) -typedef F6 = Void Function(Pointer, Uint64); -typedef F6Dart = void Function(Pointer, int); /// FFI wrapper around the native Rust core. /// Hides the platform differences. @@ -38,7 +30,6 @@ class PlatformFFI { String _dir = ''; // _homeDir is only needed for Android and IOS. String _homeDir = ''; - F2? _translate; final _eventHandlers = >{}; late RustdeskImpl _ffiBind; late String _appType; @@ -51,9 +42,6 @@ class PlatformFFI { RustdeskImpl get ffiBind => _ffiBind; F3? _session_get_rgba; - F4Dart? _session_get_rgba_size; - F5Dart? _session_next_rgba; - F6Dart? _session_register_texture; static get localeName => Platform.localeName; @@ -89,18 +77,8 @@ class PlatformFFI { } } - String translate(String name, String locale) { - if (_translate == null) return name; - var a = name.toNativeUtf8(); - var b = locale.toNativeUtf8(); - var p = _translate!(a, b); - assert(p != nullptr); - final res = p.toDartString(); - calloc.free(p); - calloc.free(a); - calloc.free(b); - return res; - } + String translate(String name, String locale) => + _ffiBind.translate(name: name, locale: locale); Uint8List? getRgba(SessionID sessionId, int bufSize) { if (_session_get_rgba == null) return null; @@ -118,30 +96,11 @@ class PlatformFFI { } } - int? getRgbaSize(SessionID sessionId) { - if (_session_get_rgba_size == null) return null; - final sessionIdStr = sessionId.toString(); - var a = sessionIdStr.toNativeUtf8(); - final bufferSize = _session_get_rgba_size!(a); - malloc.free(a); - return bufferSize; - } - - void nextRgba(SessionID sessionId) { - if (_session_next_rgba == null) return; - final sessionIdStr = sessionId.toString(); - final a = sessionIdStr.toNativeUtf8(); - _session_next_rgba!(a); - malloc.free(a); - } - - void registerTexture(SessionID sessionId, int ptr) { - if (_session_register_texture == null) return; - final sessionIdStr = sessionId.toString(); - final a = sessionIdStr.toNativeUtf8(); - _session_register_texture!(a, ptr); - malloc.free(a); - } + int getRgbaSize(SessionID sessionId) => + _ffiBind.sessionGetRgbaSize(sessionId: sessionId); + void nextRgba(SessionID sessionId) => _ffiBind.sessionNextRgba(sessionId: sessionId); + void registerTexture(SessionID sessionId, int ptr) => + _ffiBind.sessionRegisterTexture(sessionId: sessionId, ptr: ptr); /// Init the FFI class, loads the native Rust core library. Future init(String appType) async { @@ -157,14 +116,7 @@ class PlatformFFI { : DynamicLibrary.process(); debugPrint('initializing FFI $_appType'); try { - _translate = dylib.lookupFunction('translate'); _session_get_rgba = dylib.lookupFunction("session_get_rgba"); - _session_get_rgba_size = - dylib.lookupFunction("session_get_rgba_size"); - _session_next_rgba = - dylib.lookupFunction("session_next_rgba"); - _session_register_texture = - dylib.lookupFunction("session_register_texture"); try { // SYSTEM user failed _dir = (await getApplicationDocumentsDirectory()).path; diff --git a/src/flutter.rs b/src/flutter.rs index 52190ce2e..2c9b7690b 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -1035,24 +1035,24 @@ fn serialize_resolutions(resolutions: &Vec) -> String { } fn char_to_session_id(c: *const char) -> ResultType { + if c.is_null() { + bail!("Session id ptr is null"); + } let cstr = unsafe { std::ffi::CStr::from_ptr(c as _) }; let str = cstr.to_str()?; SessionID::from_str(str).map_err(|e| anyhow!("{:?}", e)) } -#[no_mangle] -pub fn session_get_rgba_size(_session_uuid_str: *const char) -> usize { +pub fn session_get_rgba_size(_session_id: SessionID) -> usize { #[cfg(not(feature = "flutter_texture_render"))] - if let Ok(session_id) = char_to_session_id(_session_uuid_str) { - if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { - return session.rgba.read().unwrap().len(); - } + if let Some(session) = SESSIONS.read().unwrap().get(&_session_id) { + return session.rgba.read().unwrap().len(); } 0 } #[no_mangle] -pub fn session_get_rgba(session_uuid_str: *const char) -> *const u8 { +pub extern "C" fn session_get_rgba(session_uuid_str: *const char) -> *const u8 { if let Ok(session_id) = char_to_session_id(session_uuid_str) { if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { return session.get_rgba(); @@ -1062,23 +1062,17 @@ pub fn session_get_rgba(session_uuid_str: *const char) -> *const u8 { std::ptr::null() } -#[no_mangle] -pub fn session_next_rgba(session_uuid_str: *const char) { - if let Ok(session_id) = char_to_session_id(session_uuid_str) { - if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { - return session.next_rgba(); - } +pub fn session_next_rgba(session_id: SessionID) { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + return session.next_rgba(); } } #[inline] -#[no_mangle] -pub fn session_register_texture(_session_uuid_str: *const char, _ptr: usize) { +pub fn session_register_texture(_session_id: SessionID, _ptr: usize) { #[cfg(feature = "flutter_texture_render")] - if let Ok(session_id) = char_to_session_id(_session_uuid_str) { - if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) { - return session.register_texture(_ptr); - } + if let Some(session) = SESSIONS.write().unwrap().get_mut(&_session_id) { + return session.register_texture(_ptr); } } @@ -1130,9 +1124,6 @@ pub fn stop_global_event_stream(app_type: String) { let _ = GLOBAL_EVENT_STREAM.write().unwrap().remove(&app_type); } -#[no_mangle] -unsafe extern "C" fn get_rgba() {} - /// Hooks for session. #[derive(Clone)] pub enum SessionHook { diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index f076b4b23..88ddd6cd5 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1410,18 +1410,6 @@ pub fn main_get_build_date() -> String { crate::BUILD_DATE.to_string() } -#[no_mangle] -unsafe extern "C" fn translate(name: *const c_char, locale: *const c_char) -> *const c_char { - let name = CStr::from_ptr(name); - let locale = CStr::from_ptr(locale); - let res = if let (Ok(name), Ok(locale)) = (name.to_str(), locale.to_str()) { - crate::client::translate_locale(name.to_owned(), locale) - } else { - String::new() - }; - CString::from_vec_unchecked(res.into_bytes()).into_raw() -} - fn handle_query_onlines(onlines: Vec, offlines: Vec) { let data = HashMap::from([ ("name", "callback_query_onlines".to_owned()), @@ -1434,6 +1422,22 @@ fn handle_query_onlines(onlines: Vec, offlines: Vec) { ); } +pub fn translate(name: String, locale: String) -> SyncReturn { + SyncReturn(crate::client::translate_locale(name, &locale)) +} + +pub fn session_get_rgba_size(session_id: SessionID) -> SyncReturn { + SyncReturn(super::flutter::session_get_rgba_size(session_id)) +} + +pub fn session_next_rgba(session_id: SessionID) -> SyncReturn<()> { + SyncReturn(super::flutter::session_next_rgba(session_id)) +} + +pub fn session_register_texture(session_id: SessionID, ptr: usize) -> SyncReturn<()> { + SyncReturn(super::flutter::session_register_texture(session_id, ptr)) +} + pub fn query_onlines(ids: Vec) { #[cfg(not(any(target_os = "ios")))] crate::rendezvous_mediator::query_online_states(ids, handle_query_onlines) From 2c044d72626a7ccba25924429c6cb8c6ee57c415 Mon Sep 17 00:00:00 2001 From: dignow Date: Wed, 30 Aug 2023 14:56:55 +0800 Subject: [PATCH 561/612] use get to call translate() Signed-off-by: dignow --- flutter/lib/models/server_model.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 8f56ffbe2..e3c8f4c49 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -39,8 +39,6 @@ class ServerModel with ChangeNotifier { late String _emptyIdShow; late final IDTextEditingController _serverId; - final _serverPasswd = - TextEditingController(text: translate("Generating ...")); final tabController = DesktopTabController(tabType: DesktopTabType.cm); @@ -64,6 +62,9 @@ class ServerModel with ChangeNotifier { int get connectStatus => _connectStatus; + TextEditingController get _serverPasswd => + TextEditingController(text: translate("Generating ...")); + String get verificationMethod { final index = [ kUseTemporaryPassword, From a0cc6afa7e288c0aee3e50159a15692be9f38210 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 30 Aug 2023 18:25:50 +0800 Subject: [PATCH 562/612] iOS deploy can run --- .github/workflows/flutter-build.yml | 11 +- flutter/build_ios.sh | 5 +- flutter/ios/Podfile.lock | 8 +- flutter/ios/Runner.xcodeproj/project.pbxproj | 4 + flutter/ios/Runner/AppDelegate.swift | 1 + .../AppIcon.appiconset/Contents.json | 162 +++++++++--------- .../LaunchImage.imageset/Contents.json | 10 +- flutter/ios/Runner/Base.lproj/Main.storyboard | 13 +- flutter/ios/Runner/Runner-Bridging-Header.h | 2 +- flutter/ios/Runner/ffi.h | 1 - flutter/pubspec.lock | 22 +-- flutter/pubspec.yaml | 2 +- 12 files changed, 126 insertions(+), 115 deletions(-) delete mode 100644 flutter/ios/Runner/ffi.h diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 1415cc79d..c04302f76 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -428,6 +428,13 @@ jobs: prefix-key: rustdesk-lib-cache key: ${{ matrix.job.target }}-${{ matrix.job.extra-build-features }} + - name: Install flutter rust bridge deps + shell: bash + run: | + cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid" + pushd flutter && flutter pub get && popd + ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart --c-output ./flutter/ios/Runner/bridge_generated.h + - name: Build rustdesk lib env: VCPKG_ROOT: /opt/rustdesk_thirdparty_lib/vcpkg @@ -439,7 +446,9 @@ jobs: shell: bash run: | pushd flutter - flutter build ipa --release --obfuscate --split-debug-info=./split-debug-info --no-codesign + # flutter build ipa --release --obfuscate --split-debug-info=./split-debug-info --no-codesign + # for easy debugging + flutter build ipa --release --no-codesign # - name: Upload Artifacts # # if: env.ANDROID_SIGNING_KEY != null && env.UPLOAD_ARTIFACT == 'true' diff --git a/flutter/build_ios.sh b/flutter/build_ios.sh index 6d0d627ac..a6468a0a8 100755 --- a/flutter/build_ios.sh +++ b/flutter/build_ios.sh @@ -1,2 +1,5 @@ #!/usr/bin/env bash -flutter build ipa --release --obfuscate --split-debug-info=./split-debug-info +# https://docs.flutter.dev/deployment/ios +# flutter build ipa --release --obfuscate --split-debug-info=./split-debug-info +# no obfuscate, because no easy to check errors +flutter build ipa --release diff --git a/flutter/ios/Podfile.lock b/flutter/ios/Podfile.lock index 76d0bac73..1ad5f6360 100644 --- a/flutter/ios/Podfile.lock +++ b/flutter/ios/Podfile.lock @@ -75,7 +75,7 @@ DEPENDENCIES: - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`) - sqflite (from `.symlinks/plugins/sqflite/ios`) - uni_links (from `.symlinks/plugins/uni_links/ios`) @@ -106,7 +106,7 @@ EXTERNAL SOURCES: package_info_plus: :path: ".symlinks/plugins/package_info_plus/ios" path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/ios" + :path: ".symlinks/plugins/path_provider_foundation/darwin" qr_code_scanner: :path: ".symlinks/plugins/qr_code_scanner/ios" sqflite: @@ -141,6 +141,6 @@ SPEC CHECKSUMS: video_player_avfoundation: e489aac24ef5cf7af82702979ed16f2a5ef84cff wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f -PODFILE CHECKSUM: c649b4e69a3086d323110011d04604e416ad0dcd +PODFILE CHECKSUM: 2aff76ba0ac13439479560d1d03e9b4479f5c9e1 -COCOAPODS: 1.12.0 +COCOAPODS: 1.12.1 diff --git a/flutter/ios/Runner.xcodeproj/project.pbxproj b/flutter/ios/Runner.xcodeproj/project.pbxproj index a3bc7d43d..0813abb11 100644 --- a/flutter/ios/Runner.xcodeproj/project.pbxproj +++ b/flutter/ios/Runner.xcodeproj/project.pbxproj @@ -208,6 +208,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -437,6 +438,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.carriez.flutterHbb; PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_STYLE = "non-global"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; @@ -634,6 +636,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.carriez.flutterHbb; PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_STYLE = "non-global"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -723,6 +726,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.carriez.flutterHbb; PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_STYLE = "non-global"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; diff --git a/flutter/ios/Runner/AppDelegate.swift b/flutter/ios/Runner/AppDelegate.swift index b1c78e9c8..730c9adcb 100644 --- a/flutter/ios/Runner/AppDelegate.swift +++ b/flutter/ios/Runner/AppDelegate.swift @@ -13,6 +13,7 @@ import Flutter } public func dummyMethodToEnforceBundling() { + dummy_method_to_enforce_bundling(); session_get_rgba(nil); } } diff --git a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index eabd8512d..53611299a 100644 --- a/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,122 +1,122 @@ { - "images": [ + "images" : [ { - "filename": "Icon-App-20x20@2x.png", - "idiom": "iphone", - "scale": "2x", - "size": "20x20" + "filename" : "Icon-App-20x20@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" }, { - "filename": "Icon-App-20x20@3x.png", - "idiom": "iphone", - "scale": "3x", - "size": "20x20" + "filename" : "Icon-App-20x20@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" }, { - "filename": "Icon-App-29x29@1x.png", - "idiom": "iphone", - "scale": "1x", - "size": "29x29" + "filename" : "Icon-App-29x29@1x.png", + "idiom" : "iphone", + "scale" : "1x", + "size" : "29x29" }, { - "filename": "Icon-App-29x29@2x.png", - "idiom": "iphone", - "scale": "2x", - "size": "29x29" + "filename" : "Icon-App-29x29@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" }, { - "filename": "Icon-App-29x29@3x.png", - "idiom": "iphone", - "scale": "3x", - "size": "29x29" + "filename" : "Icon-App-29x29@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" }, { - "filename": "Icon-App-40x40@2x.png", - "idiom": "iphone", - "scale": "2x", - "size": "40x40" + "filename" : "Icon-App-40x40@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" }, { - "filename": "Icon-App-40x40@3x.png", - "idiom": "iphone", - "scale": "3x", - "size": "40x40" + "filename" : "Icon-App-40x40@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" }, { - "filename": "Icon-App-60x60@2x.png", - "idiom": "iphone", - "scale": "2x", - "size": "60x60" + "filename" : "Icon-App-60x60@2x.png", + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" }, { - "filename": "Icon-App-60x60@3x.png", - "idiom": "iphone", - "scale": "3x", - "size": "60x60" + "filename" : "Icon-App-60x60@3x.png", + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" }, { - "filename": "Icon-App-20x20@1x.png", - "idiom": "ipad", - "scale": "1x", - "size": "20x20" + "filename" : "Icon-App-20x20@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" }, { - "filename": "Icon-App-20x20@2x.png", - "idiom": "ipad", - "scale": "2x", - "size": "20x20" + "filename" : "Icon-App-20x20@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" }, { - "filename": "Icon-App-29x29@1x.png", - "idiom": "ipad", - "scale": "1x", - "size": "29x29" + "filename" : "Icon-App-29x29@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" }, { - "filename": "Icon-App-29x29@2x.png", - "idiom": "ipad", - "scale": "2x", - "size": "29x29" + "filename" : "Icon-App-29x29@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" }, { - "filename": "Icon-App-40x40@1x.png", - "idiom": "ipad", - "scale": "1x", - "size": "40x40" + "filename" : "Icon-App-40x40@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" }, { - "filename": "Icon-App-40x40@2x.png", - "idiom": "ipad", - "scale": "2x", - "size": "40x40" + "filename" : "Icon-App-40x40@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" }, { - "filename": "Icon-App-76x76@1x.png", - "idiom": "ipad", - "scale": "1x", - "size": "76x76" + "filename" : "Icon-App-76x76@1x.png", + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" }, { - "filename": "Icon-App-76x76@2x.png", - "idiom": "ipad", - "scale": "2x", - "size": "76x76" + "filename" : "Icon-App-76x76@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" }, { - "filename": "Icon-App-83.5x83.5@2x.png", - "idiom": "ipad", - "scale": "2x", - "size": "83.5x83.5" + "filename" : "Icon-App-83.5x83.5@2x.png", + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" }, { - "filename": "Icon-App-1024x1024@1x.png", - "idiom": "ios-marketing", - "scale": "1x", - "size": "1024x1024" + "filename" : "Icon-App-1024x1024@1x.png", + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" } ], - "info": { - "author": "icons_launcher", - "version": 1 + "info" : { + "author" : "xcode", + "version" : 1 } -} \ No newline at end of file +} diff --git a/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json index 0bedcf2fd..00cabce83 100644 --- a/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json +++ b/flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -1,23 +1,23 @@ { "images" : [ { - "idiom" : "universal", "filename" : "LaunchImage.png", + "idiom" : "universal", "scale" : "1x" }, { - "idiom" : "universal", "filename" : "LaunchImage@2x.png", + "idiom" : "universal", "scale" : "2x" }, { - "idiom" : "universal", "filename" : "LaunchImage@3x.png", + "idiom" : "universal", "scale" : "3x" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } } diff --git a/flutter/ios/Runner/Base.lproj/Main.storyboard b/flutter/ios/Runner/Base.lproj/Main.storyboard index f3c28516f..d68a3a7a5 100644 --- a/flutter/ios/Runner/Base.lproj/Main.storyboard +++ b/flutter/ios/Runner/Base.lproj/Main.storyboard @@ -1,8 +1,10 @@ - - + + + - + + @@ -14,13 +16,14 @@ - + - + + diff --git a/flutter/ios/Runner/Runner-Bridging-Header.h b/flutter/ios/Runner/Runner-Bridging-Header.h index a8c447418..e930a3997 100644 --- a/flutter/ios/Runner/Runner-Bridging-Header.h +++ b/flutter/ios/Runner/Runner-Bridging-Header.h @@ -1,3 +1,3 @@ #import "GeneratedPluginRegistrant.h" -#import "ffi.h" +#import "bridge_generated.h" diff --git a/flutter/ios/Runner/ffi.h b/flutter/ios/Runner/ffi.h deleted file mode 100644 index 56b0d6ccc..000000000 --- a/flutter/ios/Runner/ffi.h +++ /dev/null @@ -1 +0,0 @@ -const unsigned char* session_get_rgba(const char*); diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index cfd41ab75..415f46eeb 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -237,10 +237,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.17.1" colorize: dependency: transitive description: @@ -743,10 +743,10 @@ packages: dependency: transitive description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.18.0" io: dependency: transitive description: @@ -799,10 +799,10 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.2.0" meta: dependency: transitive description: @@ -1474,14 +1474,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" - web: - dependency: transitive - description: - name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 - url: "https://pub.dev" - source: hosted - version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -1565,5 +1557,5 @@ packages: source: hosted version: "0.2.0" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.0.0 <4.0.0" flutter: ">=3.7.0-0" diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index fc0be7018..ff6187d06 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # 1.1.9-1 works for android, but for ios it becomes 1.1.91, need to set it to 1.1.9-a.1 for iOS, will get 1.1.9.1, but iOS store not allow 4 numbers -version: 1.2.2 +version: 1.2.2+34 environment: sdk: ">=2.17.0" From 0c77d6d918d8d3c3cd462ba7ad335868e6ed0baa Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 30 Aug 2023 18:58:05 +0800 Subject: [PATCH 563/612] mobile reset waitForImage Signed-off-by: 21pages --- flutter/lib/models/model.dart | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 105c2b513..5796a9700 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1623,6 +1623,12 @@ class FFI { elevationModel = ElevationModel(WeakReference(this)); } + /// Mobile reuse FFI + void mobileReset() { + _waitForImageDialogShow.clear(); + _waitForFirstImage.clear(); + } + /// Start with the given [id]. Only transfer file if [isFileTransfer], only port forward if [isPortForward]. void start(String id, {bool isFileTransfer = false, @@ -1633,6 +1639,7 @@ class FFI { bool? forceRelay}) { closed = false; auditNote = ''; + if (isMobile) mobileReset(); assert(!(isFileTransfer && isPortForward), 'more than one connect type'); if (isFileTransfer) { connType = ConnType.fileTransfer; From c9423509a9eb4a1062279bab37981cc506047dec Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 30 Aug 2023 19:26:15 +0800 Subject: [PATCH 564/612] ios show login/logout Signed-off-by: 21pages --- flutter/lib/mobile/pages/connection_page.dart | 37 ++++--------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart index c99462166..3b0ddff34 100644 --- a/flutter/lib/mobile/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -211,25 +211,6 @@ class WebMenu extends StatefulWidget { } class _WebMenuState extends State { - String url = ""; - - @override - void initState() { - super.initState(); - () async { - final urlRes = await bind.mainGetApiServer(); - var update = false; - if (urlRes != url) { - url = urlRes; - update = true; - } - - if (update) { - setState(() {}); - } - }(); - } - @override Widget build(BuildContext context) { Provider.of(context); @@ -251,16 +232,14 @@ class _WebMenuState extends State { child: Text(translate('ID/Relay Server')), ) ] + - (url.contains('admin.rustdesk.com') - ? >[] - : [ - PopupMenuItem( - value: "login", - child: Text(gFFI.userModel.userName.value.isEmpty - ? translate("Login") - : '${translate("Logout")} (${gFFI.userModel.userName.value})'), - ) - ]) + + [ + PopupMenuItem( + value: "login", + child: Text(gFFI.userModel.userName.value.isEmpty + ? translate("Login") + : '${translate("Logout")} (${gFFI.userModel.userName.value})'), + ) + ] + [ PopupMenuItem( value: "about", From 7a62eb0ebfbb762f392f4cfc12b525319c457b9b Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 30 Aug 2023 18:25:25 +0800 Subject: [PATCH 565/612] mobile reset waitForImage Signed-off-by: 21pages --- flutter/lib/models/model.dart | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 00b344e13..14b6b4df6 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -1716,6 +1716,14 @@ class FFI { elevationModel = ElevationModel(WeakReference(this)); } + /// Mobile reuse FFI + void mobileReset() { + ffiModel.waitForFirstImage.value = true; + ffiModel.waitForImageDialogShow.value = true; + ffiModel.waitForImageTimer?.cancel(); + ffiModel.waitForImageTimer = null; + } + /// Start with the given [id]. Only transfer file if [isFileTransfer], only port forward if [isPortForward]. void start(String id, {bool isFileTransfer = false, @@ -1727,6 +1735,7 @@ class FFI { int? tabWindowId}) { closed = false; auditNote = ''; + if (isMobile) mobileReset(); assert(!(isFileTransfer && isPortForward), 'more than one connect type'); if (isFileTransfer) { connType = ConnType.fileTransfer; From 54310b925d1500f08650cfc5b650edbf8d1a816a Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 30 Aug 2023 20:34:41 +0800 Subject: [PATCH 566/612] close elevation request dialog on submit to avoid frequent request Signed-off-by: 21pages --- flutter/lib/common/widgets/dialog.dart | 2 + src/server/connection.rs | 56 +++++++++++--------------- 2 files changed, 25 insertions(+), 33 deletions(-) diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index ce4b68ae0..880d80baa 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -812,6 +812,8 @@ void showRequestElevationDialog( } else { bind.sessionElevateDirect(sessionId: sessionId); } + close(); + showWaitUacDialog(sessionId, dialogManager, "wait-uac"); } return CustomAlertDialog( diff --git a/src/server/connection.rs b/src/server/connection.rs index df3b2c8eb..a0f05c43a 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1891,42 +1891,17 @@ impl Connection { } } } + #[cfg(windows)] Some(misc::Union::ElevationRequest(r)) => match r.union { Some(elevation_request::Union::Direct(_)) => { - #[cfg(windows)] - { - let mut err = "No need to elevate".to_string(); - if !crate::platform::is_installed() && !portable_client::running() { - err = portable_client::start_portable_service( - portable_client::StartPara::Direct, - ) - .err() - .map_or("".to_string(), |e| e.to_string()); - } - let mut misc = Misc::new(); - misc.set_elevation_response(err); - let mut msg = Message::new(); - msg.set_misc(misc); - self.send(msg).await; - } + self.handle_elevation_request(portable_client::StartPara::Direct) + .await; } - Some(elevation_request::Union::Logon(_r)) => { - #[cfg(windows)] - { - let mut err = "No need to elevate".to_string(); - if !crate::platform::is_installed() && !portable_client::running() { - err = portable_client::start_portable_service( - portable_client::StartPara::Logon(_r.username, _r.password), - ) - .err() - .map_or("".to_string(), |e| e.to_string()); - } - let mut misc = Misc::new(); - misc.set_elevation_response(err); - let mut msg = Message::new(); - msg.set_misc(misc); - self.send(msg).await; - } + Some(elevation_request::Union::Logon(r)) => { + self.handle_elevation_request(portable_client::StartPara::Logon( + r.username, r.password, + )) + .await; } _ => {} }, @@ -2009,6 +1984,21 @@ impl Connection { true } + #[cfg(windows)] + async fn handle_elevation_request(&mut self, para: portable_client::StartPara) { + let mut err = "No need to elevate".to_string(); + if !crate::platform::is_installed() && !portable_client::running() { + err = portable_client::start_portable_service(para) + .err() + .map_or("".to_string(), |e| e.to_string()); + } + let mut misc = Misc::new(); + misc.set_elevation_response(err); + let mut msg = Message::new(); + msg.set_misc(misc); + self.send(msg).await; + } + #[cfg(not(any(target_os = "android", target_os = "ios")))] fn change_resolution(&mut self, r: &Resolution) { if self.keyboard { From 3eeed39f521f166ce052602f4f6c5355550967f7 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 30 Aug 2023 21:59:25 +0800 Subject: [PATCH 567/612] ios add settings tab Signed-off-by: 21pages --- flutter/lib/main.dart | 2 +- flutter/lib/mobile/pages/connection_page.dart | 2 +- flutter/lib/mobile/pages/settings_page.dart | 74 ++++++++++--------- 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index dbf563de2..6f9869ceb 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -395,7 +395,7 @@ class _AppState extends State { themeMode: MyTheme.currentThemeMode(), home: isDesktop ? const DesktopTabPage() - : !isAndroid + : isWeb ? WebHomePage() : HomePage(), localizationsDelegates: const [ diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart index 3b0ddff34..4a14f8466 100644 --- a/flutter/lib/mobile/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -28,7 +28,7 @@ class ConnectionPage extends StatefulWidget implements PageShape { final title = translate("Connection"); @override - final appBarActions = !isAndroid ? [const WebMenu()] : []; + final appBarActions = isWeb ? [const WebMenu()] : []; @override State createState() => _ConnectionPageState(); diff --git a/flutter/lib/mobile/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart index e7e6daade..431cd0f35 100644 --- a/flutter/lib/mobile/pages/settings_page.dart +++ b/flutter/lib/mobile/pages/settings_page.dart @@ -424,41 +424,45 @@ class _SettingsState extends State with WidgetsBindingObserver { }, ) ]), - SettingsSection( - title: Text(translate("Recording")), - tiles: [ - SettingsTile.switchTile( - title: Text(translate('Automatically record incoming sessions')), - leading: Icon(Icons.videocam), - description: FutureBuilder( - builder: (ctx, data) => Offstage( - offstage: !data.hasData, - child: Text("${translate("Directory")}: ${data.data}")), - future: bind.mainDefaultVideoSaveDirectory()), - initialValue: _autoRecordIncomingSession, - onToggle: (v) async { - await bind.mainSetOption( - key: "allow-auto-record-incoming", - value: bool2option("allow-auto-record-incoming", v)); - final newValue = option2bool( - 'allow-auto-record-incoming', - await bind.mainGetOption( - key: 'allow-auto-record-incoming')); - setState(() { - _autoRecordIncomingSession = newValue; - }); - }, - ), - ], - ), - SettingsSection( - title: Text(translate("Share Screen")), - tiles: shareScreenTiles, - ), - SettingsSection( - title: Text(translate("Enhancements")), - tiles: enhancementsTiles, - ), + if (isAndroid) + SettingsSection( + title: Text(translate("Recording")), + tiles: [ + SettingsTile.switchTile( + title: + Text(translate('Automatically record incoming sessions')), + leading: Icon(Icons.videocam), + description: FutureBuilder( + builder: (ctx, data) => Offstage( + offstage: !data.hasData, + child: Text("${translate("Directory")}: ${data.data}")), + future: bind.mainDefaultVideoSaveDirectory()), + initialValue: _autoRecordIncomingSession, + onToggle: (v) async { + await bind.mainSetOption( + key: "allow-auto-record-incoming", + value: bool2option("allow-auto-record-incoming", v)); + final newValue = option2bool( + 'allow-auto-record-incoming', + await bind.mainGetOption( + key: 'allow-auto-record-incoming')); + setState(() { + _autoRecordIncomingSession = newValue; + }); + }, + ), + ], + ), + if (isAndroid) + SettingsSection( + title: Text(translate("Share Screen")), + tiles: shareScreenTiles, + ), + if (isAndroid) + SettingsSection( + title: Text(translate("Enhancements")), + tiles: enhancementsTiles, + ), SettingsSection( title: Text(translate("About")), tiles: [ From a75d73b8acee9f8b8a20dbeffafef4c897cfbf97 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 30 Aug 2023 22:40:55 +0800 Subject: [PATCH 568/612] fix ios build Signed-off-by: 21pages --- src/hbbs_http/sync.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hbbs_http/sync.rs b/src/hbbs_http/sync.rs index 45e27b7bc..9db6c1c93 100644 --- a/src/hbbs_http/sync.rs +++ b/src/hbbs_http/sync.rs @@ -157,6 +157,7 @@ fn handle_config_options(config_options: HashMap) { Config::set_options(options); } +#[cfg(not(any(target_os = "ios")))] pub fn is_pro() -> bool { PRO.lock().unwrap().clone() } From 5d18c046612e7439b867a6b700049f2e05dbe7d2 Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 1 Sep 2023 12:46:05 +0800 Subject: [PATCH 569/612] replace SettingsTile.navigation with SettingsTile() Signed-off-by: 21pages --- flutter/lib/mobile/pages/settings_page.dart | 29 +++++++++++---------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/flutter/lib/mobile/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart index 431cd0f35..95bca0b41 100644 --- a/flutter/lib/mobile/pages/settings_page.dart +++ b/flutter/lib/mobile/pages/settings_page.dart @@ -383,7 +383,7 @@ class _SettingsState extends State with WidgetsBindingObserver { SettingsSection( title: Text(translate('Account')), tiles: [ - SettingsTile.navigation( + SettingsTile( title: Obx(() => Text(gFFI.userModel.userName.value.isEmpty ? translate('Login') : '${translate('Logout')} (${gFFI.userModel.userName.value})')), @@ -399,19 +399,19 @@ class _SettingsState extends State with WidgetsBindingObserver { ], ), SettingsSection(title: Text(translate("Settings")), tiles: [ - SettingsTile.navigation( + SettingsTile( title: Text(translate('ID/Relay Server')), leading: Icon(Icons.cloud), onPressed: (context) { showServerSettings(gFFI.dialogManager); }), - SettingsTile.navigation( + SettingsTile( title: Text(translate('Language')), leading: Icon(Icons.translate), onPressed: (context) { showLanguageSettings(gFFI.dialogManager); }), - SettingsTile.navigation( + SettingsTile( title: Text(translate( Theme.of(context).brightness == Brightness.light ? 'Dark Theme' @@ -466,7 +466,7 @@ class _SettingsState extends State with WidgetsBindingObserver { SettingsSection( title: Text(translate("About")), tiles: [ - SettingsTile.navigation( + SettingsTile( onPressed: (context) async { if (await canLaunchUrl(Uri.parse(url))) { await launchUrl(Uri.parse(url)); @@ -481,21 +481,22 @@ class _SettingsState extends State with WidgetsBindingObserver { )), ), leading: Icon(Icons.info)), - SettingsTile.navigation( + SettingsTile( title: Text(translate("Build Date")), value: Padding( padding: EdgeInsets.symmetric(vertical: 8), child: Text(_buildDate), ), leading: Icon(Icons.query_builder)), - SettingsTile.navigation( - onPressed: (context) => onCopyFingerprint(_fingerprint), - title: Text(translate("Fingerprint")), - value: Padding( - padding: EdgeInsets.symmetric(vertical: 8), - child: Text(_fingerprint), - ), - leading: Icon(Icons.fingerprint)), + if (isAndroid) + SettingsTile( + onPressed: (context) => onCopyFingerprint(_fingerprint), + title: Text(translate("Fingerprint")), + value: Padding( + padding: EdgeInsets.symmetric(vertical: 8), + child: Text(_fingerprint), + ), + leading: Icon(Icons.fingerprint)), ], ), ], From 9cc02d6fcb5b00317f25c825900c5924e61475ef Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Fri, 1 Sep 2023 12:08:33 +0530 Subject: [PATCH 570/612] fix ios draggable chat window Signed-off-by: Sahil Yeole --- flutter/lib/common/widgets/overlay.dart | 87 +++++++++++++++++++++++-- flutter/lib/models/chat_model.dart | 4 +- 2 files changed, 85 insertions(+), 6 deletions(-) diff --git a/flutter/lib/common/widgets/overlay.dart b/flutter/lib/common/widgets/overlay.dart index a3c59d6b1..f2f3b8fb0 100644 --- a/flutter/lib/common/widgets/overlay.dart +++ b/flutter/lib/common/widgets/overlay.dart @@ -26,15 +26,31 @@ class DraggableChatWindow extends StatelessWidget { @override Widget build(BuildContext context) { - return Draggable( + return isIOS + ? IOSDraggable ( + position: position, + chatModel: chatModel, + width: width, + height: height, + builder: (context) { + return Column( + children: [ + _buildMobileAppBar(context), + Expanded( + child: ChatPage(chatModel: chatModel), + ), + ], + ); + }, + ) + : Draggable( checkKeyboard: true, position: position, width: width, height: height, builder: (context, onPanUpdate) { - final child = isIOS - ? ChatPage(chatModel: chatModel) - : Scaffold( + final child = + Scaffold( resizeToAvoidBottomInset: false, appBar: CustomAppBar( onPanUpdate: onPanUpdate, @@ -331,6 +347,69 @@ class _DraggableState extends State { } } +class IOSDraggable extends StatefulWidget { + const IOSDraggable({ + Key? key, + this.position = Offset.zero, + required this.chatModel, + required this.width, + required this.height, + required this.builder}) + : super(key: key); + + final Offset position; + final ChatModel chatModel; + final double width; + final double height; + final Widget Function(BuildContext) builder; + + @override + _IOSDraggableState createState() => _IOSDraggableState(); +} + +class _IOSDraggableState extends State { +late Offset _position; +late ChatModel _chatModel; +late double _width; +late double _height; + +@override +void initState() { + super.initState(); + _position = widget.position; + _chatModel = widget.chatModel; + _width = widget.width; + _height = widget.height; +} + +@override + Widget build(BuildContext context) { + return Stack( + children: [ + Positioned( + left: _position.dx, + top: _position.dy, + child: GestureDetector( + onPanUpdate: (details) { + setState(() { + _position += details.delta; + }); + }, + child: Material( + child: + Container( + width: _width, + height: _height, + child: widget.builder(context), + ), + ), + ), + ), + ], + ); + } +} + class QualityMonitor extends StatelessWidget { final QualityMonitorModel qualityMonitorModel; QualityMonitor(this.qualityMonitorModel); diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 898427351..bffd9d426 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -63,7 +63,7 @@ class ChatModel with ChangeNotifier { bool isConnManager = false; RxBool isWindowFocus = true.obs; - BlockableOverlayState? _blockableOverlayState; + BlockableOverlayState _blockableOverlayState = BlockableOverlayState(); final Rx _voiceCallStatus = Rx(VoiceCallStatus.notStarted); Rx get voiceCallStatus => _voiceCallStatus; @@ -154,7 +154,7 @@ class ChatModel with ChangeNotifier { } } - final overlayState = _blockableOverlayState?.state; + final overlayState = _blockableOverlayState.state; if (overlayState == null) return; final overlay = OverlayEntry(builder: (context) { From b7145959a7710c0989975634e5784e296c17a4e1 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 31 Aug 2023 22:06:39 +0800 Subject: [PATCH 571/612] impl Default for PeerConfig, fix default dispaly not work when ab has password Signed-off-by: 21pages --- libs/hbb_common/src/config.rs | 46 +++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 2cb0072c5..c0f14cbf6 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -214,7 +214,7 @@ pub struct Resolution { pub h: i32, } -#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq)] +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] pub struct PeerConfig { #[serde(default, deserialize_with = "deserialize_vec_u8")] pub password: Vec, @@ -296,6 +296,38 @@ pub struct PeerConfig { pub transfer: TransferSerde, } +impl Default for PeerConfig { + fn default() -> Self { + Self { + password: Default::default(), + size: Default::default(), + size_ft: Default::default(), + size_pf: Default::default(), + view_style: Self::default_view_style(), + scroll_style: Self::default_scroll_style(), + image_quality: Self::default_image_quality(), + custom_image_quality: Self::default_custom_image_quality(), + show_remote_cursor: Default::default(), + lock_after_session_end: Default::default(), + privacy_mode: Default::default(), + allow_swap_key: Default::default(), + port_forwards: Default::default(), + direct_failures: Default::default(), + disable_audio: Default::default(), + disable_clipboard: Default::default(), + enable_file_transfer: Default::default(), + show_quality_monitor: Default::default(), + keyboard_mode: Default::default(), + view_only: Default::default(), + custom_resolutions: Default::default(), + options: Self::default_options(), + ui_flutter: Default::default(), + info: Default::default(), + transfer: Default::default(), + } + } +} + #[derive(Debug, PartialEq, Default, Serialize, Deserialize, Clone)] pub struct PeerInfoSerde { #[serde(default, deserialize_with = "deserialize_string")] @@ -1124,6 +1156,17 @@ impl PeerConfig { D: de::Deserializer<'de>, { let mut mp: HashMap = de::Deserialize::deserialize(deserializer)?; + Self::insert_default_options(&mut mp); + Ok(mp) + } + + fn default_options() -> HashMap { + let mut mp: HashMap = Default::default(); + Self::insert_default_options(&mut mp); + return mp; + } + + fn insert_default_options(mp: &mut HashMap) { let mut key = "codec-preference"; if !mp.contains_key(key) { mp.insert(key.to_owned(), UserDefaultConfig::read().get(key)); @@ -1136,7 +1179,6 @@ impl PeerConfig { if !mp.contains_key(key) { mp.insert(key.to_owned(), UserDefaultConfig::read().get(key)); } - Ok(mp) } } From 54de5b03000ff54a82c7c0836365abae59379288 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 31 Aug 2023 20:30:20 +0800 Subject: [PATCH 572/612] mobile add default display, merge set server and custom quality code Signed-off-by: 21pages --- flutter/lib/common/widgets/dialog.dart | 124 +------- .../lib/common/widgets/setting_widgets.dart | 277 ++++++++++++++++++ .../desktop/pages/desktop_setting_page.dart | 229 +++------------ flutter/lib/mobile/pages/remote_page.dart | 2 +- flutter/lib/mobile/pages/settings_page.dart | 198 ++++++++++++- flutter/lib/mobile/widgets/dialog.dart | 114 ++++--- libs/hbb_common/src/config.rs | 4 + 7 files changed, 583 insertions(+), 365 deletions(-) create mode 100644 flutter/lib/common/widgets/setting_widgets.dart diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index ce4b68ae0..056dc714f 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -1,9 +1,9 @@ import 'dart:async'; -import 'package:debounce_throttle/debounce_throttle.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/common/shared_state.dart'; +import 'package:flutter_hbb/common/widgets/setting_widgets.dart'; import 'package:get/get.dart'; import '../../common.dart'; @@ -1223,76 +1223,9 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { final quality = await bind.sessionGetCustomImageQuality(sessionId: sessionId); qualityInitValue = quality != null && quality.isNotEmpty ? quality[0].toDouble() : 50.0; - const qualityMinValue = 10.0; - const qualityMoreThresholdValue = 100.0; - const qualityMaxValue = 2000.0; - if (qualityInitValue < qualityMinValue) { - qualityInitValue = qualityMinValue; + if (qualityInitValue < 10 || qualityInitValue > 2000) { + qualityInitValue = 50; } - if (qualityInitValue > qualityMaxValue) { - qualityInitValue = qualityMaxValue; - } - final RxDouble qualitySliderValue = RxDouble(qualityInitValue); - final moreQualityInitValue = qualityInitValue > qualityMoreThresholdValue; - final RxBool moreQualityChecked = RxBool(moreQualityInitValue); - final debouncerQuality = Debouncer( - Duration(milliseconds: 1000), - onChanged: (double v) { - setCustomValues(quality: v); - }, - initialValue: qualityInitValue, - ); - final qualitySlider = Obx(() => Row( - children: [ - Expanded( - flex: 3, - child: Slider( - value: qualitySliderValue.value, - min: qualityMinValue, - max: moreQualityChecked.value - ? qualityMaxValue - : qualityMoreThresholdValue, - divisions: 18, - onChanged: (double value) { - qualitySliderValue.value = value; - debouncerQuality.value = value; - }, - )), - Expanded( - flex: 1, - child: Text( - '${qualitySliderValue.value.round()}%', - style: const TextStyle(fontSize: 15), - )), - Expanded( - flex: 1, - child: Text( - translate('Bitrate'), - style: const TextStyle(fontSize: 15), - )), - Expanded( - flex: 1, - child: Row( - children: [ - Checkbox( - value: moreQualityChecked.value, - onChanged: (bool? value) { - moreQualityChecked.value = value!; - if (!value && - qualitySliderValue.value > - qualityMoreThresholdValue) { - qualitySliderValue.value = qualityMoreThresholdValue; - debouncerQuality.value = qualityMoreThresholdValue; - } - }, - ).marginOnly(right: 5), - Expanded( - child: Text(translate('More')), - ) - ], - )), - ], - )); // fps final fpsOption = await bind.sessionGetOption(sessionId: sessionId, arg: 'custom-fps'); @@ -1300,55 +1233,20 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { if (fpsInitValue < 5 || fpsInitValue > 120) { fpsInitValue = 30; } - final RxDouble fpsSliderValue = RxDouble(fpsInitValue); - final debouncerFps = Debouncer( - Duration(milliseconds: 1000), - onChanged: (double v) { - setCustomValues(fps: v); - }, - initialValue: qualityInitValue, - ); bool? direct; try { direct = ConnectionTypeState.find(id).direct.value == ConnectionType.strDirect; } catch (_) {} - final fpsSlider = Offstage( - offstage: (await bind.mainIsUsingPublicServer() && direct != true) || - version_cmp(ffi.ffiModel.pi.version, '1.2.0') < 0, - child: Row( - children: [ - Expanded( - flex: 3, - child: Obx((() => Slider( - value: fpsSliderValue.value, - min: 5, - max: 120, - divisions: 23, - onChanged: (double value) { - fpsSliderValue.value = value; - debouncerFps.value = value; - }, - )))), - Expanded( - flex: 1, - child: Obx(() => Text( - '${fpsSliderValue.value.round()}', - style: const TextStyle(fontSize: 15), - ))), - Expanded( - flex: 2, - child: Text( - translate('FPS'), - style: const TextStyle(fontSize: 15), - )) - ], - ), - ); + bool notShowFps = (await bind.mainIsUsingPublicServer() && direct != true) || + version_cmp(ffi.ffiModel.pi.version, '1.2.0') < 0; - final content = Column( - children: [qualitySlider, fpsSlider], - ); + final content = customImageQualityWidget( + initQuality: qualityInitValue, + initFps: fpsInitValue, + setQuality: (v) => setCustomValues(quality: v), + setFps: (v) => setCustomValues(fps: v), + showFps: !notShowFps); msgBoxCommon(ffi.dialogManager, 'Custom Image Quality', content, [btnClose]); } diff --git a/flutter/lib/common/widgets/setting_widgets.dart b/flutter/lib/common/widgets/setting_widgets.dart new file mode 100644 index 000000000..771b65ab5 --- /dev/null +++ b/flutter/lib/common/widgets/setting_widgets.dart @@ -0,0 +1,277 @@ +import 'package:debounce_throttle/debounce_throttle.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_hbb/common.dart'; +import 'package:flutter_hbb/models/platform_model.dart'; +import 'package:get/get.dart'; + +customImageQualityWidget( + {required double initQuality, + required double initFps, + required Function(double) setQuality, + required Function(double) setFps, + required bool showFps}) { + final qualityValue = initQuality.obs; + final fpsValue = initFps.obs; + + final RxBool moreQualityChecked = RxBool(qualityValue.value > 100); + final debouncerQuality = Debouncer( + Duration(milliseconds: 1000), + onChanged: (double v) { + setQuality(v); + }, + initialValue: qualityValue.value, + ); + final debouncerFps = Debouncer( + Duration(milliseconds: 1000), + onChanged: (double v) { + setFps(v); + }, + initialValue: fpsValue.value, + ); + + onMoreChanged(bool? value) { + if (value == null) return; + moreQualityChecked.value = value; + if (!value && qualityValue.value > 100) { + qualityValue.value = 100; + } + debouncerQuality.value = qualityValue.value; + } + + return Column( + children: [ + Obx(() => Row( + children: [ + Expanded( + flex: 3, + child: Slider( + value: qualityValue.value, + min: 10.0, + max: moreQualityChecked.value ? 2000 : 100, + divisions: moreQualityChecked.value ? 199 : 18, + onChanged: (double value) async { + qualityValue.value = value; + debouncerQuality.value = value; + }, + ), + ), + Expanded( + flex: 1, + child: Text( + '${qualityValue.value.round()}%', + style: const TextStyle(fontSize: 15), + )), + Expanded( + flex: isMobile ? 2 : 1, + child: Text( + translate('Bitrate'), + style: const TextStyle(fontSize: 15), + )), + // mobile doesn't have enough space + if (!isMobile) + Expanded( + flex: 1, + child: Row( + children: [ + Checkbox( + value: moreQualityChecked.value, + onChanged: onMoreChanged, + ), + Expanded( + child: Text(translate('More')), + ) + ], + )) + ], + )), + if (isMobile) + Obx(() => Row( + children: [ + Expanded( + child: Align( + alignment: Alignment.centerRight, + child: Checkbox( + value: moreQualityChecked.value, + onChanged: onMoreChanged, + ), + ), + ), + Expanded( + child: Text(translate('More')), + ) + ], + )), + if (showFps) + Obx(() => Row( + children: [ + Expanded( + flex: 3, + child: Slider( + value: fpsValue.value, + min: 5.0, + max: 120.0, + divisions: 23, + onChanged: (double value) async { + fpsValue.value = value; + debouncerFps.value = value; + }, + ), + ), + Expanded( + flex: 1, + child: Text( + '${fpsValue.value.round()}', + style: const TextStyle(fontSize: 15), + )), + Expanded( + flex: 2, + child: Text( + translate('FPS'), + style: const TextStyle(fontSize: 15), + )) + ], + )), + ], + ); +} + +customImageQualitySetting() { + final qualityKey = 'custom_image_quality'; + final fpsKey = 'custom-fps'; + + var initQuality = + (double.tryParse(bind.mainGetUserDefaultOption(key: qualityKey)) ?? 50.0); + if (initQuality < 10 || initQuality > 2000) { + initQuality = 50; + } + var initFps = + (double.tryParse(bind.mainGetUserDefaultOption(key: fpsKey)) ?? 30.0); + if (initFps < 5 || initFps > 120) { + initFps = 30; + } + + return customImageQualityWidget( + initQuality: initQuality, + initFps: initFps, + setQuality: (v) { + bind.mainSetUserDefaultOption(key: qualityKey, value: v.toString()); + }, + setFps: (v) { + bind.mainSetUserDefaultOption(key: fpsKey, value: v.toString()); + }, + showFps: true); +} + +Future setServerConfig( + List controllers, + List errMsgs, + ServerConfig config, +) async { + config.idServer = config.idServer.trim(); + config.relayServer = config.relayServer.trim(); + config.apiServer = config.apiServer.trim(); + config.key = config.key.trim(); + // id + if (config.idServer.isNotEmpty) { + errMsgs[0].value = + translate(await bind.mainTestIfValidServer(server: config.idServer)); + if (errMsgs[0].isNotEmpty) { + return false; + } + } + // relay + if (config.relayServer.isNotEmpty) { + errMsgs[1].value = + translate(await bind.mainTestIfValidServer(server: config.relayServer)); + if (errMsgs[1].isNotEmpty) { + return false; + } + } + // api + if (config.apiServer.isNotEmpty) { + if (!config.apiServer.startsWith('http://') && + !config.apiServer.startsWith('https://')) { + errMsgs[2].value = + '${translate("API Server")}: ${translate("invalid_http")}'; + return false; + } + } + final oldApiServer = await bind.mainGetApiServer(); + + // should set one by one + await bind.mainSetOption( + key: 'custom-rendezvous-server', value: config.idServer); + await bind.mainSetOption(key: 'relay-server', value: config.relayServer); + await bind.mainSetOption(key: 'api-server', value: config.apiServer); + await bind.mainSetOption(key: 'key', value: config.key); + + final newApiServer = await bind.mainGetApiServer(); + if (oldApiServer.isNotEmpty && + oldApiServer != newApiServer && + gFFI.userModel.isLogin) { + gFFI.userModel.logOut(apiServer: oldApiServer); + } + return true; +} + +List ServerConfigImportExportWidgets( + List controllers, + List errMsgs, +) { + import() { + Clipboard.getData(Clipboard.kTextPlain).then((value) { + final text = value?.text; + if (text != null && text.isNotEmpty) { + try { + final sc = ServerConfig.decode(text); + if (sc.idServer.isNotEmpty) { + controllers[0].text = sc.idServer; + controllers[1].text = sc.relayServer; + controllers[2].text = sc.apiServer; + controllers[3].text = sc.key; + Future success = setServerConfig(controllers, errMsgs, sc); + success.then((value) { + if (value) { + showToast( + translate('Import server configuration successfully')); + } else { + showToast(translate('Invalid server configuration')); + } + }); + } else { + showToast(translate('Invalid server configuration')); + } + } catch (e) { + showToast(translate('Invalid server configuration')); + } + } else { + showToast(translate('Clipboard is empty')); + } + }); + } + + export() { + final text = ServerConfig( + idServer: controllers[0].text.trim(), + relayServer: controllers[1].text.trim(), + apiServer: controllers[2].text.trim(), + key: controllers[3].text.trim()) + .encode(); + debugPrint("ServerConfig export: $text"); + Clipboard.setData(ClipboardData(text: text)); + showToast(translate('Export server configuration successfully')); + } + + return [ + Tooltip( + message: translate('Import Server Config'), + child: IconButton( + icon: Icon(Icons.paste, color: Colors.grey), onPressed: import), + ), + Tooltip( + message: translate('Export Server Config'), + child: IconButton( + icon: Icon(Icons.copy, color: Colors.grey), onPressed: export)) + ]; +} diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index f158efb82..50052f241 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -5,6 +5,7 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hbb/common.dart'; +import 'package:flutter_hbb/common/widgets/setting_widgets.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/desktop/pages/desktop_home_page.dart'; import 'package:flutter_hbb/desktop/pages/desktop_tab_page.dart'; @@ -966,54 +967,27 @@ class _NetworkState extends State<_Network> with AutomaticKeepAliveClientMixin { var relayController = TextEditingController(text: old('relay-server')); var apiController = TextEditingController(text: old('api-server')); var keyController = TextEditingController(text: old('key')); - - set(String idServer, String relayServer, String apiServer, - String key) async { - idServer = idServer.trim(); - relayServer = relayServer.trim(); - apiServer = apiServer.trim(); - key = key.trim(); - if (idServer.isNotEmpty) { - idErrMsg.value = - translate(await bind.mainTestIfValidServer(server: idServer)); - if (idErrMsg.isNotEmpty) { - return false; - } - } - if (relayServer.isNotEmpty) { - relayErrMsg.value = - translate(await bind.mainTestIfValidServer(server: relayServer)); - if (relayErrMsg.isNotEmpty) { - return false; - } - } - if (apiServer.isNotEmpty) { - if (!apiServer.startsWith('http://') && - !apiServer.startsWith('https://')) { - apiErrMsg.value = - '${translate("API Server")}: ${translate("invalid_http")}'; - return false; - } - } - final oldApiServer = await bind.mainGetApiServer(); - - // should set one by one - await bind.mainSetOption( - key: 'custom-rendezvous-server', value: idServer); - await bind.mainSetOption(key: 'relay-server', value: relayServer); - await bind.mainSetOption(key: 'api-server', value: apiServer); - await bind.mainSetOption(key: 'key', value: key); - - final newApiServer = await bind.mainGetApiServer(); - if (oldApiServer.isNotEmpty && oldApiServer != newApiServer) { - await gFFI.userModel.logOut(apiServer: oldApiServer); - } - return true; - } + final controllers = [ + idController, + relayController, + apiController, + keyController, + ]; + final errMsgs = [ + idErrMsg, + relayErrMsg, + apiErrMsg, + ]; submit() async { - bool result = await set(idController.text, relayController.text, - apiController.text, keyController.text); + bool result = await setServerConfig( + controllers, + errMsgs, + ServerConfig( + idServer: idController.text, + relayServer: relayController.text, + apiServer: apiController.text, + key: keyController.text)); if (result) { setState(() {}); showToast(translate('Successful')); @@ -1022,83 +996,28 @@ class _NetworkState extends State<_Network> with AutomaticKeepAliveClientMixin { } } - import() { - Clipboard.getData(Clipboard.kTextPlain).then((value) { - final text = value?.text; - if (text != null && text.isNotEmpty) { - try { - final sc = ServerConfig.decode(text); - if (sc.idServer.isNotEmpty) { - idController.text = sc.idServer; - relayController.text = sc.relayServer; - apiController.text = sc.apiServer; - keyController.text = sc.key; - Future success = - set(sc.idServer, sc.relayServer, sc.apiServer, sc.key); - success.then((value) { - if (value) { - showToast( - translate('Import server configuration successfully')); - } else { - showToast(translate('Invalid server configuration')); - } - }); - } else { - showToast(translate('Invalid server configuration')); - } - } catch (e) { - showToast(translate('Invalid server configuration')); - } - } else { - showToast(translate('Clipboard is empty')); - } - }); - } - - export() { - final text = ServerConfig( - idServer: idController.text, - relayServer: relayController.text, - apiServer: apiController.text, - key: keyController.text) - .encode(); - debugPrint("ServerConfig export: $text"); - - Clipboard.setData(ClipboardData(text: text)); - showToast(translate('Export server configuration successfully')); - } - bool secure = !enabled; - return _Card(title: 'ID/Relay Server', title_suffix: [ - Tooltip( - message: translate('Import Server Config'), - child: IconButton( - icon: Icon(Icons.paste, color: Colors.grey), - onPressed: enabled ? import : null), - ), - Tooltip( - message: translate('Export Server Config'), - child: IconButton( - icon: Icon(Icons.copy, color: Colors.grey), - onPressed: enabled ? export : null)), - ], children: [ - Column( + return _Card( + title: 'ID/Relay Server', + title_suffix: ServerConfigImportExportWidgets(controllers, errMsgs), children: [ - Obx(() => _LabeledTextField(context, 'ID Server', idController, - idErrMsg.value, enabled, secure)), - Obx(() => _LabeledTextField(context, 'Relay Server', - relayController, relayErrMsg.value, enabled, secure)), - Obx(() => _LabeledTextField(context, 'API Server', apiController, - apiErrMsg.value, enabled, secure)), - _LabeledTextField( - context, 'Key', keyController, '', enabled, secure), - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [_Button('Apply', submit, enabled: enabled)], - ).marginOnly(top: 10), - ], - ) - ]); + Column( + children: [ + Obx(() => _LabeledTextField(context, 'ID Server', idController, + idErrMsg.value, enabled, secure)), + Obx(() => _LabeledTextField(context, 'Relay Server', + relayController, relayErrMsg.value, enabled, secure)), + Obx(() => _LabeledTextField(context, 'API Server', + apiController, apiErrMsg.value, enabled, secure)), + _LabeledTextField( + context, 'Key', keyController, '', enabled, secure), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [_Button('Apply', submit, enabled: enabled)], + ).marginOnly(top: 10), + ], + ) + ]); } return tmpWrapper(); @@ -1182,15 +1101,6 @@ class _DisplayState extends State<_Display> { } final groupValue = bind.mainGetUserDefaultOption(key: key); - final qualityKey = 'custom_image_quality'; - final qualityValue = - (double.tryParse(bind.mainGetUserDefaultOption(key: qualityKey)) ?? - 50.0) - .obs; - final fpsKey = 'custom-fps'; - final fpsValue = - (double.tryParse(bind.mainGetUserDefaultOption(key: fpsKey)) ?? 30.0) - .obs; return _Card(title: 'Default Image Quality', children: [ _Radio(context, value: kRemoteImageQualityBest, @@ -1214,64 +1124,7 @@ class _DisplayState extends State<_Display> { onChanged: onChanged), Offstage( offstage: groupValue != kRemoteImageQualityCustom, - child: Column( - children: [ - Obx(() => Row( - children: [ - Slider( - value: qualityValue.value, - min: 10.0, - max: 100.0, - divisions: 18, - onChanged: (double value) async { - qualityValue.value = value; - await bind.mainSetUserDefaultOption( - key: qualityKey, value: value.toString()); - }, - ), - SizedBox( - width: 40, - child: Text( - '${qualityValue.value.round()}%', - style: const TextStyle(fontSize: 15), - )), - SizedBox( - width: 50, - child: Text( - translate('Bitrate'), - style: const TextStyle(fontSize: 15), - )) - ], - )), - Obx(() => Row( - children: [ - Slider( - value: fpsValue.value, - min: 5.0, - max: 120.0, - divisions: 23, - onChanged: (double value) async { - fpsValue.value = value; - await bind.mainSetUserDefaultOption( - key: fpsKey, value: value.toString()); - }, - ), - SizedBox( - width: 40, - child: Text( - '${fpsValue.value.round()}', - style: const TextStyle(fontSize: 15), - )), - SizedBox( - width: 50, - child: Text( - translate('FPS'), - style: const TextStyle(fontSize: 15), - )) - ], - )), - ], - ), + child: customImageQualitySetting(), ) ]); } diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart index 84426a307..d10095381 100644 --- a/flutter/lib/mobile/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -466,7 +466,7 @@ class _RemotePageState extends State { gFFI.ffiModel.toggleTouchMode(); final v = gFFI.ffiModel.touchMode ? 'Y' : ''; bind.sessionPeerOption( - sessionId: sessionId, name: "touch", value: v); + sessionId: sessionId, name: "touch-mode", value: v); }))); } diff --git a/flutter/lib/mobile/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart index 95bca0b41..e2120a05f 100644 --- a/flutter/lib/mobile/pages/settings_page.dart +++ b/flutter/lib/mobile/pages/settings_page.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; +import 'package:flutter_hbb/common/widgets/setting_widgets.dart'; import 'package:get/get.dart'; import 'package:provider/provider.dart'; import 'package:settings_ui/settings_ui.dart'; @@ -458,6 +458,7 @@ class _SettingsState extends State with WidgetsBindingObserver { title: Text(translate("Share Screen")), tiles: shareScreenTiles, ), + defaultDisplaySection(), if (isAndroid) SettingsSection( title: Text(translate("Enhancements")), @@ -513,6 +514,23 @@ class _SettingsState extends State with WidgetsBindingObserver { } return true; } + + defaultDisplaySection() { + return SettingsSection( + title: Text(translate("Display Settings")), + tiles: [ + SettingsTile( + title: Text(translate('Display Settings')), + leading: Icon(Icons.desktop_windows_outlined), + trailing: Icon(Icons.arrow_forward_ios), + onPressed: (context) { + Navigator.push(context, MaterialPageRoute(builder: (context) { + return _DisplayPage(); + })); + }) + ], + ); + } } void showServerSettings(OverlayDialogManager dialogManager) async { @@ -623,3 +641,181 @@ class ScanButton extends StatelessWidget { ); } } + +class _DisplayPage extends StatefulWidget { + const _DisplayPage({super.key}); + + @override + State<_DisplayPage> createState() => __DisplayPageState(); +} + +class __DisplayPageState extends State<_DisplayPage> { + @override + Widget build(BuildContext context) { + final Map codecsJson = jsonDecode(bind.mainSupportedHwdecodings()); + final h264 = codecsJson['h264'] ?? false; + final h265 = codecsJson['h265'] ?? false; + var codecList = [ + _RadioEntry('Auto', 'auto'), + _RadioEntry('VP8', 'vp8'), + _RadioEntry('VP9', 'vp9'), + _RadioEntry('AV1', 'av1'), + if (h264) _RadioEntry('H264', 'h264'), + if (h265) _RadioEntry('H265', 'h265') + ]; + RxBool showCustomImageQuality = false.obs; + return Scaffold( + appBar: AppBar( + leading: IconButton( + onPressed: () => Navigator.pop(context), + icon: Icon(Icons.arrow_back_ios)), + title: Text(translate('Display Settings')), + centerTitle: true, + ), + body: SettingsList(sections: [ + SettingsSection( + tiles: [ + _getPopupDialogRadioEntry( + title: 'Default View Style', + list: [ + _RadioEntry('Scale original', kRemoteViewStyleOriginal), + _RadioEntry('Scale adaptive', kRemoteViewStyleAdaptive) + ], + getter: () => bind.mainGetUserDefaultOption(key: 'view_style'), + asyncSetter: (value) async { + await bind.mainSetUserDefaultOption( + key: 'view_style', value: value); + }, + ), + _getPopupDialogRadioEntry( + title: 'Default Image Quality', + list: [ + _RadioEntry('Good image quality', kRemoteImageQualityBest), + _RadioEntry('Balanced', kRemoteImageQualityBalanced), + _RadioEntry('Optimize reaction time', kRemoteImageQualityLow), + _RadioEntry('Custom', kRemoteImageQualityCustom), + ], + getter: () { + final v = bind.mainGetUserDefaultOption(key: 'image_quality'); + showCustomImageQuality.value = v == kRemoteImageQualityCustom; + return v; + }, + asyncSetter: (value) async { + await bind.mainSetUserDefaultOption( + key: 'image_quality', value: value); + showCustomImageQuality.value = + value == kRemoteImageQualityCustom; + }, + tail: customImageQualitySetting(), + showTail: showCustomImageQuality, + notCloseValue: kRemoteImageQualityCustom, + ), + _getPopupDialogRadioEntry( + title: 'Default Codec', + list: codecList, + getter: () => + bind.mainGetUserDefaultOption(key: 'codec-preference'), + asyncSetter: (value) async { + await bind.mainSetUserDefaultOption( + key: 'codec-preference', value: value); + }, + ), + ], + ), + SettingsSection( + title: Text(translate('Other Default Options')), + tiles: [ + otherRow('Show remote cursor', 'show_remote_cursor'), + otherRow('Show quality monitor', 'show_quality_monitor'), + otherRow('Mute', 'disable_audio'), + otherRow('Disable clipboard', 'disable_clipboard'), + otherRow('Lock after session end', 'lock_after_session_end'), + otherRow('Privacy mode', 'privacy_mode'), + otherRow('Touch mode', 'touch-mode'), + ], + ), + ]), + ); + } + + otherRow(String label, String key) { + final value = bind.mainGetUserDefaultOption(key: key) == 'Y'; + return SettingsTile.switchTile( + initialValue: value, + title: Text(translate(label)), + onToggle: (b) async { + await bind.mainSetUserDefaultOption(key: key, value: b ? 'Y' : ''); + setState(() {}); + }, + ); + } +} + +class _RadioEntry { + final String label; + final String value; + _RadioEntry(this.label, this.value); +} + +typedef _RadioEntryGetter = String Function(); +typedef _RadioEntrySetter = Future Function(String); + +_getPopupDialogRadioEntry({ + required String title, + required List<_RadioEntry> list, + required _RadioEntryGetter getter, + required _RadioEntrySetter asyncSetter, + Widget? tail, + RxBool? showTail, + String? notCloseValue, +}) { + RxString groupValue = ''.obs; + RxString valueText = ''.obs; + + init() { + groupValue.value = getter(); + final e = list.firstWhereOrNull((e) => e.value == groupValue.value); + if (e != null) { + valueText.value = e.label; + } + } + + init(); + + void showDialog() async { + gFFI.dialogManager.show((setState, close, context) { + onChanged(String? value) async { + if (value == null) return; + await asyncSetter(value); + init(); + if (value != notCloseValue) { + close(); + } + } + + return CustomAlertDialog( + content: Obx( + () => Column(children: [ + ...list + .map((e) => getRadio(Text(translate(e.label)), e.value, + groupValue.value, (String? value) => onChanged(value))) + .toList(), + Offstage( + offstage: + !(tail != null && showTail != null && showTail.value == true), + child: tail, + ), + ]), + )); + }, backDismiss: true, clickMaskDismiss: true); + } + + return SettingsTile( + title: Text(translate(title)), + onPressed: (context) => showDialog(), + value: Padding( + padding: EdgeInsets.symmetric(vertical: 8), + child: Obx(() => Text(translate(valueText.value))), + ), + ); +} diff --git a/flutter/lib/mobile/widgets/dialog.dart b/flutter/lib/mobile/widgets/dialog.dart index 550b37d72..3e745ecce 100644 --- a/flutter/lib/mobile/widgets/dialog.dart +++ b/flutter/lib/mobile/widgets/dialog.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'dart:convert'; import 'package:flutter/material.dart'; +import 'package:flutter_hbb/common/widgets/setting_widgets.dart'; import 'package:get/get.dart'; import '../../common.dart'; @@ -147,59 +147,72 @@ void setTemporaryPasswordLengthDialog( void showServerSettingsWithValue( ServerConfig serverConfig, OverlayDialogManager dialogManager) async { - Map oldOptions = jsonDecode(await bind.mainGetOptions()); - final oldCfg = ServerConfig.fromOptions(oldOptions); - var isInProgress = false; final idCtrl = TextEditingController(text: serverConfig.idServer); final relayCtrl = TextEditingController(text: serverConfig.relayServer); final apiCtrl = TextEditingController(text: serverConfig.apiServer); final keyCtrl = TextEditingController(text: serverConfig.key); - String? idServerMsg; - String? relayServerMsg; - String? apiServerMsg; + RxString idServerMsg = ''.obs; + RxString relayServerMsg = ''.obs; + RxString apiServerMsg = ''.obs; + + final controllers = [idCtrl, relayCtrl, apiCtrl, keyCtrl]; + final errMsgs = [ + idServerMsg, + relayServerMsg, + apiServerMsg, + ]; dialogManager.show((setState, close, context) { - Future validate() async { - if (idCtrl.text != oldCfg.idServer) { - final res = await validateAsync(idCtrl.text); - setState(() => idServerMsg = res); - if (idServerMsg != null) return false; - } - if (relayCtrl.text != oldCfg.relayServer) { - relayServerMsg = await validateAsync(relayCtrl.text); - if (relayServerMsg != null) return false; - } - if (apiCtrl.text != oldCfg.apiServer) { - if (apiServerMsg != null) return false; - } - return true; + Future submit() async { + setState(() { + isInProgress = true; + }); + bool ret = await setServerConfig( + controllers, + errMsgs, + ServerConfig( + idServer: idCtrl.text.trim(), + relayServer: relayCtrl.text.trim(), + apiServer: apiCtrl.text.trim(), + key: keyCtrl.text.trim())); + setState(() { + isInProgress = false; + }); + return ret; } return CustomAlertDialog( - title: Text(translate('ID/Relay Server')), + title: Row( + children: [ + Expanded(child: Text(translate('ID/Relay Server'))), + ...ServerConfigImportExportWidgets(controllers, errMsgs), + ], + ), content: Form( - child: Column( + child: Obx(() => Column( mainAxisSize: MainAxisSize.min, children: [ TextFormField( controller: idCtrl, decoration: InputDecoration( labelText: translate('ID Server'), - errorText: idServerMsg), + errorText: idServerMsg.value.isEmpty + ? null + : idServerMsg.value), + ) + ] + + [ + TextFormField( + controller: relayCtrl, + decoration: InputDecoration( + labelText: translate('Relay Server'), + errorText: relayServerMsg.value.isEmpty + ? null + : relayServerMsg.value), ) ] + - (isAndroid - ? [ - TextFormField( - controller: relayCtrl, - decoration: InputDecoration( - labelText: translate('Relay Server'), - errorText: relayServerMsg), - ) - ] - : []) + [ TextFormField( controller: apiCtrl, @@ -214,7 +227,7 @@ void showServerSettingsWithValue( return translate("invalid_http"); } } - return apiServerMsg; + return null; }, ), TextFormField( @@ -225,7 +238,7 @@ void showServerSettingsWithValue( ), // NOT use Offstage to wrap LinearProgressIndicator if (isInProgress) const LinearProgressIndicator(), - ])), + ]))), actions: [ dialogButton('Cancel', onPressed: () { close(); @@ -233,35 +246,12 @@ void showServerSettingsWithValue( dialogButton( 'OK', onPressed: () async { - setState(() { - idServerMsg = null; - relayServerMsg = null; - apiServerMsg = null; - isInProgress = true; - }); - if (await validate()) { - if (idCtrl.text != oldCfg.idServer) { - if (oldCfg.idServer.isNotEmpty) { - await gFFI.userModel.logOut(); - } - bind.mainSetOption( - key: "custom-rendezvous-server", value: idCtrl.text); - } - if (relayCtrl.text != oldCfg.relayServer) { - bind.mainSetOption(key: "relay-server", value: relayCtrl.text); - } - if (keyCtrl.text != oldCfg.key) { - bind.mainSetOption(key: "key", value: keyCtrl.text); - } - if (apiCtrl.text != oldCfg.apiServer) { - bind.mainSetOption(key: "api-server", value: apiCtrl.text); - } + if (await submit()) { close(); showToast(translate('Successful')); + } else { + showToast(translate('Failed')); } - setState(() { - isInProgress = false; - }); }, ), ], diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index c0f14cbf6..113c11df6 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -1179,6 +1179,10 @@ impl PeerConfig { if !mp.contains_key(key) { mp.insert(key.to_owned(), UserDefaultConfig::read().get(key)); } + key = "touch-mode"; + if !mp.contains_key(key) { + mp.insert(key.to_owned(), UserDefaultConfig::read().get(key)); + } } } From 6c5f0aecb40d6b85281ca2d63d18bf7a6be2700d Mon Sep 17 00:00:00 2001 From: deep-soft Date: Fri, 1 Sep 2023 16:11:23 +0300 Subject: [PATCH 573/612] Update flutter-build.yml --- .github/workflows/flutter-build.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 69f7df67b..d0dd8470b 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -96,6 +96,18 @@ jobs: VCPKG_ROOT: C:\rustdesk_thirdpary_lib\vcpkg run: python3 .\build.py --portable --hwcodec --flutter --feature IddDriver + - name: find Runner.res + # Windows: find Runner.res (compiled from ./flutter/windows/runner/Runner.rc), copy to ./Runner.res + # Runner.rc does not contain actual version, but Runner.res does + continue-on-error: true + shell: bash + run: | + runner_res=$(find . -name Runner.res) + if [ runner_res != '' ]; then + echo "Runner.res: $runner_res" + cp $runner.res ./Runner.res + fi + - name: Sign rustdesk files uses: GermanBluefox/code-sign-action@v7 if: env.UPLOAD_ARTIFACT == 'true' @@ -198,6 +210,18 @@ jobs: curl -LJ -o ./Release/sciter.dll https://github.com/c-smile/sciter-sdk/raw/master/bin.win/x32/sciter.dll echo "output_folder=./Release" >> $GITHUB_OUTPUT + - name: find Runner.res + # Windows: find Runner.res (compiled from ./flutter/windows/runner/Runner.rc), copy to ./Runner.res + # Runner.rc does not contain actual version, but Runner.res does + continue-on-error: true + shell: bash + run: | + runner_res=$(find . -name Runner.res) + if [ runner_res != '' ]; then + echo "Runner.res: $runner_res" + cp $runner.res ./Runner.res + fi + - name: Sign rustdesk files uses: GermanBluefox/code-sign-action@v7 if: env.UPLOAD_ARTIFACT == 'true' From e83a97349f63ec19e85bd81996ae45c334a0d753 Mon Sep 17 00:00:00 2001 From: deep-soft Date: Fri, 1 Sep 2023 16:12:13 +0300 Subject: [PATCH 574/612] Update build.rs # if Runner.res not found compile icon.rc --- libs/portable/build.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libs/portable/build.rs b/libs/portable/build.rs index 2450e16cd..697af3d45 100644 --- a/libs/portable/build.rs +++ b/libs/portable/build.rs @@ -1,5 +1,10 @@ extern crate embed_resource; +use std::fs; fn main() { - embed_resource::compile("icon.rc", embed_resource::NONE); + let runner_res_path = "./Runner.res"; + match fs::metadata(runner_res_path) { + Ok(_) => println!("cargo:rustc-link-lib=dylib:+verbatim=./Runner.res"), + Err(_) => embed_resource::compile("icon.rc", embed_resource::NONE), + } } From 0c6eacb14130768ffd78d855fe7ebe3b3c4caace Mon Sep 17 00:00:00 2001 From: deep-soft Date: Fri, 1 Sep 2023 16:13:21 +0300 Subject: [PATCH 575/612] Update Runner.rc --- flutter/windows/runner/Runner.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/windows/runner/Runner.rc b/flutter/windows/runner/Runner.rc index 32d01bf44..03776ded4 100644 --- a/flutter/windows/runner/Runner.rc +++ b/flutter/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "rustdesk" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "rustdesk" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.carriez. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.carriez. All rights reserved." "\0" VALUE "OriginalFilename", "rustdesk.exe" "\0" VALUE "ProductName", "rustdesk" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" From 96d9604fe1cbe8b07c8a078969f495517cab6cb0 Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 1 Sep 2023 23:55:43 +0800 Subject: [PATCH 576/612] enable bottom actions before first image is reached Signed-off-by: fufesou --- flutter/lib/mobile/pages/home_page.dart | 3 -- flutter/lib/mobile/pages/remote_page.dart | 54 +++++++++++++++++------ 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/flutter/lib/mobile/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart index 1fb75c1d1..a0f2fee65 100644 --- a/flutter/lib/mobile/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter_hbb/common/widgets/overlay.dart'; import 'package:flutter_hbb/mobile/pages/server_page.dart'; import 'package:flutter_hbb/mobile/pages/settings_page.dart'; import 'package:get/get.dart'; @@ -26,7 +25,6 @@ class _HomePageState extends State { var _selectedIndex = 0; int get selectedIndex => _selectedIndex; final List _pages = []; - final _blockableOverlayState = BlockableOverlayState(); void refreshPages() { setState(() { @@ -38,7 +36,6 @@ class _HomePageState extends State { void initState() { super.initState(); initPages(); - _blockableOverlayState.applyFfi(gFFI); } void initPages() { diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart index 84426a307..cac59ec8f 100644 --- a/flutter/lib/mobile/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -39,6 +39,8 @@ class _RemotePageState extends State { String _value = ''; Orientation? _currentOrientation; + final _blockableOverlayState = BlockableOverlayState(); + final keyboardVisibilityController = KeyboardVisibilityController(); late final StreamSubscription keyboardSubscription; final FocusNode _mobileFocusNode = FocusNode(); @@ -67,6 +69,8 @@ class _RemotePageState extends State { initSharedStates(widget.id); gFFI.chatModel .changeCurrentKey(MessageKey(widget.id, ChatModel.clientModeID)); + + _blockableOverlayState.applyFfi(gFFI); } @override @@ -88,6 +92,15 @@ class _RemotePageState extends State { removeSharedStates(widget.id); } + Widget emptyOverlay() => BlockableOverlay( + /// the Overlay key will be set with _blockableOverlayState in BlockableOverlay + /// see override build() in [BlockableOverlay] + state: _blockableOverlayState, + underlying: Container( + color: Colors.transparent, + ), + ); + void onSoftKeyboardChanged(bool visible) { if (!visible) { SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []); @@ -198,13 +211,19 @@ class _RemotePageState extends State { }); } + bool get keyboard => gFFI.ffiModel.permissions['keyboard'] != false; + + Widget _bottomWidget() => _showGestureHelp + ? getGestureHelp() + : (_showBar && gFFI.ffiModel.pi.displays.isNotEmpty + ? getBottomAppBar(keyboard) + : Offstage()); + @override Widget build(BuildContext context) { - final pi = Provider.of(context).pi; final keyboardIsVisible = keyboardVisibilityController.isVisible && _showEdit; final showActionButton = !_showBar || keyboardIsVisible || _showGestureHelp; - final keyboard = gFFI.ffiModel.permissions['keyboard'] != false; return WillPopScope( onWillPop: () async { @@ -241,11 +260,17 @@ class _RemotePageState extends State { } }); }), - bottomNavigationBar: _showGestureHelp - ? getGestureHelp() - : (_showBar && pi.displays.isNotEmpty - ? getBottomAppBar(keyboard) - : null), + bottomNavigationBar: Obx(() => Stack( + alignment: Alignment.bottomCenter, + children: [ + gFFI.ffiModel.pi.isSet.isTrue && + gFFI.ffiModel.waitForFirstImage.isTrue + ? emptyOverlay() + : Offstage(), + _bottomWidget(), + gFFI.ffiModel.pi.isSet.isFalse ? emptyOverlay() : Offstage(), + ], + )), body: Overlay( initialEntries: [ OverlayEntry(builder: (context) { @@ -368,12 +393,15 @@ class _RemotePageState extends State { }, ), ]), - IconButton( - color: Colors.white, - icon: Icon(Icons.expand_more), - onPressed: () { - setState(() => _showBar = !_showBar); - }), + Obx(() => IconButton( + color: Colors.white, + icon: Icon(Icons.expand_more), + onPressed: gFFI.ffiModel.waitForFirstImage.isTrue + ? null + : () { + setState(() => _showBar = !_showBar); + }, + )), ], ), ); From 4fe33db4f397c7680c41cd81e73b13968a9959b4 Mon Sep 17 00:00:00 2001 From: deep-soft Date: Fri, 1 Sep 2023 19:29:10 +0300 Subject: [PATCH 577/612] Update flutter-build.yml --- .github/workflows/flutter-build.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index d0dd8470b..050cfe787 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -102,10 +102,12 @@ jobs: continue-on-error: true shell: bash run: | - runner_res=$(find . -name Runner.res) - if [ runner_res != '' ]; then + runner_res=$(find . -name "Runner.res") + if [ $runner_res == '' ]; then + echo "Runner.res: not found" + else echo "Runner.res: $runner_res" - cp $runner.res ./Runner.res + cp $runner_res ./Runner.res fi - name: Sign rustdesk files @@ -216,10 +218,12 @@ jobs: continue-on-error: true shell: bash run: | - runner_res=$(find . -name Runner.res) - if [ runner_res != '' ]; then + runner_res=$(find . -name "Runner.res") + if [ $runner_res == '' ]; then + echo "Runner.res: not found" + else echo "Runner.res: $runner_res" - cp $runner.res ./Runner.res + cp $runner_res ./Runner.res fi - name: Sign rustdesk files From c9caa5687ac22fde4ad98d0db5d837add6d30678 Mon Sep 17 00:00:00 2001 From: deep-soft Date: Sat, 2 Sep 2023 14:29:03 +0300 Subject: [PATCH 578/612] Update flutter-build.yml fix find Runner.res --- .github/workflows/flutter-build.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 050cfe787..310607c7b 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -103,11 +103,13 @@ jobs: shell: bash run: | runner_res=$(find . -name "Runner.res") - if [ $runner_res == '' ]; then + if [ "$runner_res" == "" ]; then echo "Runner.res: not found" else echo "Runner.res: $runner_res" cp $runner_res ./Runner.res + echo "list ./Runner.res" + ls -l ./Runner.res fi - name: Sign rustdesk files @@ -219,11 +221,13 @@ jobs: shell: bash run: | runner_res=$(find . -name "Runner.res") - if [ $runner_res == '' ]; then + if [ "$runner_res" == "" ]; then echo "Runner.res: not found" else echo "Runner.res: $runner_res" cp $runner_res ./Runner.res + echo "list ./Runner.res" + ls -l ./Runner.res fi - name: Sign rustdesk files From a9308dd992fe782c872b29b034be6122ccd64fa4 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 3 Sep 2023 00:06:32 +0800 Subject: [PATCH 579/612] higher build --- flutter/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index ff6187d06..3ff117dba 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # 1.1.9-1 works for android, but for ios it becomes 1.1.91, need to set it to 1.1.9-a.1 for iOS, will get 1.1.9.1, but iOS store not allow 4 numbers -version: 1.2.2+34 +version: 1.2.2+38 environment: sdk: ">=2.17.0" From 3fab42b8d1cb3a8290328b0a47d59db55f4cef7c Mon Sep 17 00:00:00 2001 From: deep-soft Date: Sat, 2 Sep 2023 20:52:07 +0300 Subject: [PATCH 580/612] Update build.rs --- libs/portable/build.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/portable/build.rs b/libs/portable/build.rs index 697af3d45..4f33273f5 100644 --- a/libs/portable/build.rs +++ b/libs/portable/build.rs @@ -2,9 +2,9 @@ extern crate embed_resource; use std::fs; fn main() { - let runner_res_path = "./Runner.res"; + let runner_res_path = "Runner.res"; match fs::metadata(runner_res_path) { - Ok(_) => println!("cargo:rustc-link-lib=dylib:+verbatim=./Runner.res"), + Ok(_) => println!("cargo:rustc-link-lib=dylib:+verbatim=./libs/portable/Runner.res"), Err(_) => embed_resource::compile("icon.rc", embed_resource::NONE), } } From 8ce1bb1b0b3d1091c91fcc70372fc119fef1a089 Mon Sep 17 00:00:00 2001 From: deep-soft Date: Sat, 2 Sep 2023 20:52:29 +0300 Subject: [PATCH 581/612] Update flutter-build.yml --- .github/workflows/flutter-build.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/flutter-build.yml b/.github/workflows/flutter-build.yml index 310607c7b..f9faa554e 100644 --- a/.github/workflows/flutter-build.yml +++ b/.github/workflows/flutter-build.yml @@ -102,14 +102,14 @@ jobs: continue-on-error: true shell: bash run: | - runner_res=$(find . -name "Runner.res") + runner_res=$(find . -name "Runner.res"); if [ "$runner_res" == "" ]; then - echo "Runner.res: not found" + echo "Runner.res: not found"; else - echo "Runner.res: $runner_res" - cp $runner_res ./Runner.res - echo "list ./Runner.res" - ls -l ./Runner.res + echo "Runner.res: $runner_res"; + cp $runner_res ./libs/portable/Runner.res; + echo "list ./libs/portable/Runner.res"; + ls -l ./libs/portable/Runner.res; fi - name: Sign rustdesk files @@ -220,14 +220,14 @@ jobs: continue-on-error: true shell: bash run: | - runner_res=$(find . -name "Runner.res") + runner_res=$(find . -name "Runner.res"); if [ "$runner_res" == "" ]; then - echo "Runner.res: not found" + echo "Runner.res: not found"; else - echo "Runner.res: $runner_res" - cp $runner_res ./Runner.res - echo "list ./Runner.res" - ls -l ./Runner.res + echo "Runner.res: $runner_res"; + cp $runner_res ./libs/portable/Runner.res; + echo "list ./libs/portable/Runner.res"; + ls -l ./libs/portable/Runner.res; fi - name: Sign rustdesk files From 58073484fe58a2ce7ec2cccfd8070646852a7b5b Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 3 Sep 2023 07:21:27 +0800 Subject: [PATCH 582/612] fix ios setting page show chat title Signed-off-by: 21pages --- flutter/lib/mobile/pages/home_page.dart | 19 ++++++++++++------- flutter/lib/models/chat_model.dart | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/flutter/lib/mobile/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart index 1fb75c1d1..3574f1cea 100644 --- a/flutter/lib/mobile/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -27,6 +27,9 @@ class _HomePageState extends State { int get selectedIndex => _selectedIndex; final List _pages = []; final _blockableOverlayState = BlockableOverlayState(); + bool get isChatPageCurrentTab => isAndroid + ? _selectedIndex == 1 + : false; // change this when ios have chat page void refreshPages() { setState(() { @@ -82,13 +85,15 @@ class _HomePageState extends State { unselectedItemColor: MyTheme.darkGray, onTap: (index) => setState(() { // close chat overlay when go chat page - if (index == 1 && _selectedIndex != index) { - gFFI.chatModel.hideChatIconOverlay(); - gFFI.chatModel.hideChatWindowOverlay(); - gFFI.chatModel - .mobileClearClientUnread(gFFI.chatModel.currentKey.connId); + if (_selectedIndex != index) { + _selectedIndex = index; + if (isChatPageCurrentTab) { + gFFI.chatModel.hideChatIconOverlay(); + gFFI.chatModel.hideChatWindowOverlay(); + gFFI.chatModel.mobileClearClientUnread( + gFFI.chatModel.currentKey.connId); + } } - _selectedIndex = index; }), ), body: _pages.elementAt(_selectedIndex), @@ -98,7 +103,7 @@ class _HomePageState extends State { Widget appTitle() { final currentUser = gFFI.chatModel.currentUser; final currentKey = gFFI.chatModel.currentKey; - if (_selectedIndex == 1 && + if (isChatPageCurrentTab && currentUser != null && currentKey.peerId.isNotEmpty) { final connected = diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index bffd9d426..5ab0a6929 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -396,7 +396,7 @@ class ChatModel with ChangeNotifier { parent.target?.serverModel.jumpTo(id); } } else { - if (HomePage.homeKey.currentState?.selectedIndex != 1 || + if (HomePage.homeKey.currentState?.isChatPageCurrentTab != true || _currentKey != messagekey) { client.unreadChatMessageCount.value += 1; mobileUpdateUnreadSum(); From 701220246da0ac2d343fb9da81afad5de8d06505 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sun, 3 Sep 2023 14:55:23 +0800 Subject: [PATCH 583/612] fix ci --- flutter/lib/mobile/pages/home_page.dart | 1 - flutter/pubspec.lock | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/flutter/lib/mobile/pages/home_page.dart b/flutter/lib/mobile/pages/home_page.dart index 76c23b315..c04e03244 100644 --- a/flutter/lib/mobile/pages/home_page.dart +++ b/flutter/lib/mobile/pages/home_page.dart @@ -25,7 +25,6 @@ class _HomePageState extends State { var _selectedIndex = 0; int get selectedIndex => _selectedIndex; final List _pages = []; - final _blockableOverlayState = BlockableOverlayState(); bool get isChatPageCurrentTab => isAndroid ? _selectedIndex == 1 : false; // change this when ios have chat page diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index 415f46eeb..960e28338 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -451,6 +451,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + flex_color_picker: + dependency: "direct main" + description: + name: flex_color_picker + sha256: f37476ab3e80dcaca94e428e159944d465dd16312fda9ff41e07e86f04bfa51c + url: "https://pub.dev" + source: hosted + version: "3.3.0" + flex_seed_scheme: + dependency: transitive + description: + name: flex_seed_scheme + sha256: "29c12aba221eb8a368a119685371381f8035011d18de5ba277ad11d7dfb8657f" + url: "https://pub.dev" + source: hosted + version: "1.4.0" flutter: dependency: "direct main" description: flutter @@ -1558,4 +1574,4 @@ packages: version: "0.2.0" sdks: dart: ">=3.0.0 <4.0.0" - flutter: ">=3.7.0-0" + flutter: ">=3.10.0" From dcfcc1f27180ec0e999a800208f21d4daf6209ac Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Sun, 3 Sep 2023 11:36:10 +0200 Subject: [PATCH 584/612] Update italian language --- src/lang/it.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 22088a061..9c8b4fd48 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -538,8 +538,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "Impossibile aggiornare la rubrica"), ("push_ab_failed_tip", "Impossibile sincronizzare la rubrica con il server"), ("synced_peer_readded_tip", "I dispositivi presenti nelle sessioni recenti saranno sincronizzati di nuovo nella rubrica."), - ("Change Color", ""), - ("Primary Color", ""), - ("HSV Color", ""), + ("Change Color", "Modifica colore"), + ("Primary Color", "Colore primario"), + ("HSV Color", "Colore HSV"), ].iter().cloned().collect(); } From 969eeff636e5d185ba20d1c00fb595121d9d24c3 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Sun, 3 Sep 2023 18:18:44 +0530 Subject: [PATCH 585/612] add ios chat window border Signed-off-by: Sahil Yeole --- flutter/lib/common/widgets/overlay.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common/widgets/overlay.dart b/flutter/lib/common/widgets/overlay.dart index f2f3b8fb0..45fa46195 100644 --- a/flutter/lib/common/widgets/overlay.dart +++ b/flutter/lib/common/widgets/overlay.dart @@ -400,7 +400,8 @@ void initState() { Container( width: _width, height: _height, - child: widget.builder(context), + decoration: BoxDecoration(border: Border.all(color: MyTheme.border)), + child: widget.builder(context), ), ), ), From bf32477f89fadea016b8ecb913b3e92e4eaa7004 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 3 Sep 2023 22:18:48 +0800 Subject: [PATCH 586/612] Remove dup maximized state Signed-off-by: dignow --- .../lib/desktop/pages/connection_page.dart | 3 +- .../lib/desktop/widgets/tabbar_widget.dart | 32 ++++++------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart index de87317b3..6d53ecc78 100644 --- a/flutter/lib/desktop/pages/connection_page.dart +++ b/flutter/lib/desktop/pages/connection_page.dart @@ -106,7 +106,8 @@ class _ConnectionPageState extends State @override void onWindowLeaveFullScreen() { // Restore edge border to default edge size. - stateGlobal.resizeEdgeSize.value = kWindowEdgeSize; + stateGlobal.resizeEdgeSize.value = + stateGlobal.isMaximized.isTrue ? kMaximizeEdgeSize : kWindowEdgeSize; } @override diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 148135a81..b27e8fafe 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -440,7 +440,6 @@ class DesktopTab extends StatelessWidget { tabType: tabType, state: state, tail: tail, - isMaximized: stateGlobal.isMaximized, showMinimize: showMinimize, showMaximize: showMaximize, showClose: showClose, @@ -455,7 +454,6 @@ class WindowActionPanel extends StatefulWidget { final bool isMainWindow; final DesktopTabType tabType; final Rx state; - final RxBool isMaximized; final bool showMinimize; final bool showMaximize; @@ -468,7 +466,6 @@ class WindowActionPanel extends StatefulWidget { required this.isMainWindow, required this.tabType, required this.state, - required this.isMaximized, this.tail, this.showMinimize = true, this.showMaximize = true, @@ -495,18 +492,18 @@ class WindowActionPanelState extends State Future.delayed(Duration(milliseconds: 500), () { if (widget.isMainWindow) { windowManager.isMaximized().then((maximized) { - if (widget.isMaximized.value != maximized) { + if (stateGlobal.isMaximized.value != maximized) { WidgetsBinding.instance.addPostFrameCallback( - (_) => setState(() => widget.isMaximized.value = maximized)); + (_) => setState(() => stateGlobal.setMaximized(maximized))); } }); } else { final wc = WindowController.fromWindowId(kWindowId!); wc.isMaximized().then((maximized) { debugPrint("isMaximized $maximized"); - if (widget.isMaximized.value != maximized) { + if (stateGlobal.isMaximized.value != maximized) { WidgetsBinding.instance.addPostFrameCallback( - (_) => setState(() => widget.isMaximized.value = maximized)); + (_) => setState(() => stateGlobal.setMaximized(maximized))); } }); } @@ -535,10 +532,6 @@ class WindowActionPanelState extends State @override void onWindowMaximize() { - // catch maximize from system - if (!widget.isMaximized.value) { - widget.isMaximized.value = true; - } stateGlobal.setMinimized(false); _setMaximized(true); super.onWindowMaximize(); @@ -546,10 +539,6 @@ class WindowActionPanelState extends State @override void onWindowUnmaximize() { - // catch unmaximize from system - if (widget.isMaximized.value) { - widget.isMaximized.value = false; - } stateGlobal.setMinimized(false); _setMaximized(false); super.onWindowUnmaximize(); @@ -632,9 +621,10 @@ class WindowActionPanelState extends State Offstage( offstage: !widget.showMaximize || Platform.isMacOS, child: Obx(() => ActionIcon( - message: - widget.isMaximized.value ? 'Restore' : 'Maximize', - icon: widget.isMaximized.value + message: stateGlobal.isMaximized.isTrue + ? 'Restore' + : 'Maximize', + icon: stateGlobal.isMaximized.isTrue ? IconFont.restore : IconFont.max, onTap: _toggleMaximize, @@ -671,10 +661,8 @@ class WindowActionPanelState extends State void _toggleMaximize() { toggleMaximize(widget.isMainWindow).then((maximize) { - if (widget.isMaximized.value != maximize) { - // update state for sub window, wc.unmaximize/maximize() will not invoke onWindowMaximize/Unmaximize - widget.isMaximized.value = maximize; - } + // update state for sub window, wc.unmaximize/maximize() will not invoke onWindowMaximize/Unmaximize + stateGlobal.setMaximized(maximize); }); } } From 4fc65aac84796d28f83ed6ea8721b4bbf06fd5b4 Mon Sep 17 00:00:00 2001 From: dignow Date: Sun, 3 Sep 2023 22:27:42 +0800 Subject: [PATCH 587/612] Remote window restore, add 300 milliseconds delay for maximizing after the frame is restored Signed-off-by: dignow --- flutter/lib/common.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 48323d5fa..208c7f7c8 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1699,7 +1699,10 @@ Future restoreWindowPosition(WindowType type, } if (lpos.isMaximized == true) { await restoreFrame(); - await wc.maximize(); + // An duration is needed to avoid the window being restored after maximized. + Future.delayed(Duration(milliseconds: 300), () async { + await wc.maximize(); + }); } else { await restoreFrame(); } From 9cce56caf87bb04ba2cb346321421c2690134692 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Mon, 4 Sep 2023 01:45:48 +0530 Subject: [PATCH 588/612] remember chat window last position Signed-off-by: Sahil Yeole --- flutter/lib/common/widgets/overlay.dart | 18 +++++++++++++----- flutter/lib/models/chat_model.dart | 9 ++++++++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/flutter/lib/common/widgets/overlay.dart b/flutter/lib/common/widgets/overlay.dart index 45fa46195..9b0b4e51e 100644 --- a/flutter/lib/common/widgets/overlay.dart +++ b/flutter/lib/common/widgets/overlay.dart @@ -16,7 +16,8 @@ class DraggableChatWindow extends StatelessWidget { this.position = Offset.zero, required this.width, required this.height, - required this.chatModel}) + required this.chatModel + }) : super(key: key); final Offset position; @@ -48,6 +49,7 @@ class DraggableChatWindow extends StatelessWidget { position: position, width: width, height: height, + chatModel: chatModel, builder: (context, onPanUpdate) { final child = Scaffold( @@ -242,6 +244,7 @@ class Draggable extends StatefulWidget { this.position = Offset.zero, required this.width, required this.height, + this.chatModel, required this.builder}) : super(key: key); @@ -250,6 +253,7 @@ class Draggable extends StatefulWidget { final Offset position; final double width; final double height; + final ChatModel? chatModel; final Widget Function(BuildContext, GestureDragUpdateCallback) builder; @override @@ -258,6 +262,7 @@ class Draggable extends StatefulWidget { class _DraggableState extends State { late Offset _position; + late ChatModel? _chatModel; bool _keyboardVisible = false; double _saveHeight = 0; double _lastBottomHeight = 0; @@ -266,6 +271,7 @@ class _DraggableState extends State { void initState() { super.initState(); _position = widget.position; + _chatModel = widget.chatModel??null; } void onPanUpdate(DragUpdateDetails d) { @@ -292,6 +298,7 @@ class _DraggableState extends State { setState(() { _position = Offset(x, y); }); + _chatModel?.setChatWindowPosition(_position); } checkScreenSize() {} @@ -351,14 +358,14 @@ class IOSDraggable extends StatefulWidget { const IOSDraggable({ Key? key, this.position = Offset.zero, - required this.chatModel, + this.chatModel, required this.width, required this.height, required this.builder}) : super(key: key); final Offset position; - final ChatModel chatModel; + final ChatModel? chatModel; final double width; final double height; final Widget Function(BuildContext) builder; @@ -369,7 +376,7 @@ class IOSDraggable extends StatefulWidget { class _IOSDraggableState extends State { late Offset _position; -late ChatModel _chatModel; +late ChatModel? _chatModel; late double _width; late double _height; @@ -377,7 +384,7 @@ late double _height; void initState() { super.initState(); _position = widget.position; - _chatModel = widget.chatModel; + _chatModel = widget.chatModel??null; _width = widget.width; _height = widget.height; } @@ -394,6 +401,7 @@ void initState() { setState(() { _position += details.delta; }); + _chatModel?.setChatWindowPosition(_position); }, child: Material( child: diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index bffd9d426..042f3852d 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -72,6 +72,13 @@ class ChatModel with ChangeNotifier { RxInt mobileUnreadSum = 0.obs; MessageKey? latestReceivedKey; + Offset chatWindowPosition = Offset(20, 80); + + void setChatWindowPosition(Offset position) { + chatWindowPosition = position; + notifyListeners(); + } + @override void dispose() { textController.dispose(); @@ -210,7 +217,7 @@ class ChatModel with ChangeNotifier { } }, child: DraggableChatWindow( - position: chatInitPos ?? Offset(20, 80), + position: chatInitPos ?? chatWindowPosition, width: 250, height: 350, chatModel: this)); From b6c1816833c435db1cf1acf179a3245bea29adce Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 4 Sep 2023 12:11:35 +0800 Subject: [PATCH 589/612] fix generating id Signed-off-by: dignow --- flutter/lib/models/server_model.dart | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 00c5490e0..9fb91f463 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -40,6 +40,8 @@ class ServerModel with ChangeNotifier { late String _emptyIdShow; late final IDTextEditingController _serverId; + final _serverPasswd = + TextEditingController(text: translate("Generating ...")); final tabController = DesktopTabController(tabType: DesktopTabType.cm); @@ -61,9 +63,6 @@ class ServerModel with ChangeNotifier { int get connectStatus => _connectStatus; - TextEditingController get _serverPasswd => - TextEditingController(text: translate("Generating ...")); - String get verificationMethod { final index = [ kUseTemporaryPassword, From ea41a60057d03a7ad746ec4e1dc250b5b44a9c50 Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 4 Sep 2023 14:17:54 +0800 Subject: [PATCH 590/612] fix, the session image covers android toolbar Signed-off-by: dignow --- flutter/lib/common.dart | 3 +++ flutter/lib/desktop/pages/remote_page.dart | 5 +++- .../lib/desktop/widgets/remote_toolbar.dart | 17 +++++++++----- flutter/lib/mobile/pages/remote_page.dart | 5 +++- flutter/lib/models/model.dart | 23 +++++++++++-------- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 208c7f7c8..672adca75 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -614,6 +614,7 @@ class OverlayDialogManager { int _tagCount = 0; OverlayEntry? _mobileActionsOverlayEntry; + RxBool mobileActionsOverlayVisible = false.obs; void setOverlayState(OverlayKeyState overlayKeyState) { _overlayKeyState = overlayKeyState; @@ -780,12 +781,14 @@ class OverlayDialogManager { }); overlayState.insert(overlay); _mobileActionsOverlayEntry = overlay; + mobileActionsOverlayVisible.value = true; } void hideMobileActionsOverlay() { if (_mobileActionsOverlayEntry != null) { _mobileActionsOverlayEntry!.remove(); _mobileActionsOverlayEntry = null; + mobileActionsOverlayVisible.value = false; return; } } diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 7e6e8ff86..f265f1895 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -279,7 +279,10 @@ class _RemotePageState extends State _ffi.ffiModel.pi.isSet.isTrue && _ffi.ffiModel.waitForFirstImage.isTrue ? emptyOverlay() - : Offstage(), + : () { + _ffi.ffiModel.tryShowAndroidActionsOverlay(); + return Offstage(); + }(), // Use Overlay to enable rebuild every time on menu button click. _ffi.ffiModel.pi.isSet.isTrue ? Overlay(initialEntries: [ diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 9d6dec496..b59ae3736 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -101,6 +101,9 @@ class ToolbarState { class _ToolbarTheme { static const Color blueColor = MyTheme.button; static const Color hoverBlueColor = MyTheme.accent; + static Color inactiveColor = Colors.grey[800]!; + static Color hoverInactiveColor = Colors.grey[850]!; + static const Color redColor = Colors.redAccent; static const Color hoverRedColor = Colors.red; // kMinInteractiveDimension @@ -543,9 +546,9 @@ class _PinMenu extends StatelessWidget { assetName: state.pin ? "assets/pinned.svg" : "assets/unpinned.svg", tooltip: state.pin ? 'Unpin Toolbar' : 'Pin Toolbar', onPressed: state.switchPin, - color: state.pin ? _ToolbarTheme.blueColor : Colors.grey[800]!, + color: state.pin ? _ToolbarTheme.blueColor : _ToolbarTheme.inactiveColor, hoverColor: - state.pin ? _ToolbarTheme.hoverBlueColor : Colors.grey[850]!, + state.pin ? _ToolbarTheme.hoverBlueColor : _ToolbarTheme.hoverInactiveColor, ), ); } @@ -558,13 +561,15 @@ class _MobileActionMenu extends StatelessWidget { @override Widget build(BuildContext context) { if (!ffi.ffiModel.isPeerAndroid) return Offstage(); - return _IconMenuButton( + return Obx(()=>_IconMenuButton( assetName: 'assets/actions_mobile.svg', tooltip: 'Mobile Actions', onPressed: () => ffi.dialogManager.toggleMobileActionsOverlay(ffi: ffi), - color: _ToolbarTheme.blueColor, - hoverColor: _ToolbarTheme.hoverBlueColor, - ); + color: ffi.dialogManager.mobileActionsOverlayVisible.isTrue + ? _ToolbarTheme.blueColor : _ToolbarTheme.inactiveColor, + hoverColor: ffi.dialogManager.mobileActionsOverlayVisible.isTrue + ? _ToolbarTheme.hoverBlueColor : _ToolbarTheme.hoverInactiveColor, + )); } } diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart index ff650d3c9..519e228f8 100644 --- a/flutter/lib/mobile/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -266,7 +266,10 @@ class _RemotePageState extends State { gFFI.ffiModel.pi.isSet.isTrue && gFFI.ffiModel.waitForFirstImage.isTrue ? emptyOverlay() - : Offstage(), + : () { + gFFI.ffiModel.tryShowAndroidActionsOverlay(); + return Offstage(); + }(), _bottomWidget(), gFFI.ffiModel.pi.isSet.isFalse ? emptyOverlay() : Offstage(), ], diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 95b5094df..a1f22242e 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -554,23 +554,13 @@ class FfiModel with ChangeNotifier { } final connType = parent.target?.connType; - if (isPeerAndroid) { _touchMode = true; - if (connType == ConnType.defaultConn && - parent.target != null && - parent.target!.ffiModel.permissions['keyboard'] != false) { - Timer( - const Duration(milliseconds: 100), - () => parent.target!.dialogManager - .showMobileActionsOverlay(ffi: parent.target!)); - } } else { _touchMode = await bind.sessionGetOption( sessionId: sessionId, arg: 'touch-mode') != ''; } - if (connType == ConnType.fileTransfer) { parent.target?.fileModel.onReady(); } else if (connType == ConnType.defaultConn) { @@ -616,6 +606,19 @@ class FfiModel with ChangeNotifier { notifyListeners(); } + tryShowAndroidActionsOverlay({int delayMSecs = 10}) { + if (isPeerAndroid) { + if (parent.target?.connType == ConnType.defaultConn && + parent.target != null && + parent.target!.ffiModel.permissions['keyboard'] != false) { + Timer( + Duration(milliseconds: delayMSecs), + () => parent.target!.dialogManager + .showMobileActionsOverlay(ffi: parent.target!)); + } + } + } + handleResolutions(String id, dynamic resolutions) { try { final List dynamicArray = jsonDecode(resolutions as String); From cd2541a9d2177899d39efe387ddc7266c3a47960 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 4 Sep 2023 15:50:13 +0800 Subject: [PATCH 591/612] fix docker issue #5595 --- src/core_main.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core_main.rs b/src/core_main.rs index 7e328d278..7b7b4b590 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -222,6 +222,8 @@ pub fn core_main() -> Option> { log::info!("start --uninstall-service"); crate::platform::uninstall_service(false); } else if args[0] == "--service" { + #[cfg(target_os = "macos")] + crate::platform::macos::hide_dock(); log::info!("start --service"); crate::start_os_service(); return None; From 8235bca664b31259a5ebb65b097c9ba64a92080b Mon Sep 17 00:00:00 2001 From: rustdesk Date: Mon, 4 Sep 2023 16:22:56 +0800 Subject: [PATCH 592/612] fix mac uninstall service --- src/platform/macos.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/platform/macos.rs b/src/platform/macos.rs index fa6f630ca..78e52faf4 100644 --- a/src/platform/macos.rs +++ b/src/platform/macos.rs @@ -240,6 +240,11 @@ pub fn uninstall_service(show_new_window: bool) -> bool { uninstalled ); if uninstalled { + if !show_new_window { + let _ = crate::ipc::close_all_instances(); + // leave ipc a little time + std::thread::sleep(std::time::Duration::from_millis(300)); + } crate::ipc::set_option("stop-service", "Y"); std::process::Command::new("launchctl") .args(&["remove", &format!("{}_server", crate::get_full_name())]) @@ -255,13 +260,6 @@ pub fn uninstall_service(show_new_window: bool) -> bool { .spawn() .ok(); } - std::process::Command::new("pkill") - .arg(crate::get_app_name()) - .status() - .ok(); - let _ = crate::ipc::close_all_instances(); - // leave ipc a little time - std::thread::sleep(std::time::Duration::from_millis(300)); quit_gui(); } } From d6c23bb5f3c9f71f710a8650e579125e65a4bb99 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Mon, 4 Sep 2023 20:47:45 +0530 Subject: [PATCH 593/612] avoid chat window keyboard overlap ios Signed-off-by: Sahil Yeole --- flutter/lib/common/widgets/overlay.dart | 69 +++++++++++++++++++------ 1 file changed, 52 insertions(+), 17 deletions(-) diff --git a/flutter/lib/common/widgets/overlay.dart b/flutter/lib/common/widgets/overlay.dart index 9b0b4e51e..89a4184db 100644 --- a/flutter/lib/common/widgets/overlay.dart +++ b/flutter/lib/common/widgets/overlay.dart @@ -16,8 +16,7 @@ class DraggableChatWindow extends StatelessWidget { this.position = Offset.zero, required this.width, required this.height, - required this.chatModel - }) + required this.chatModel}) : super(key: key); final Offset position; @@ -271,7 +270,7 @@ class _DraggableState extends State { void initState() { super.initState(); _position = widget.position; - _chatModel = widget.chatModel??null; + _chatModel = widget.chatModel; } void onPanUpdate(DragUpdateDetails d) { @@ -298,7 +297,7 @@ class _DraggableState extends State { setState(() { _position = Offset(x, y); }); - _chatModel?.setChatWindowPosition(_position); + _chatModel?.setChatWindowPosition(_position); } checkScreenSize() {} @@ -374,20 +373,56 @@ class IOSDraggable extends StatefulWidget { _IOSDraggableState createState() => _IOSDraggableState(); } -class _IOSDraggableState extends State { -late Offset _position; -late ChatModel? _chatModel; -late double _width; -late double _height; +class _IOSDraggableState extends State with WidgetsBindingObserver { + late Offset _position; + late ChatModel? _chatModel; + late double _width; + late double _height; + bool _keyboardVisible = false; + double _saveHeight = 0; + double _lastBottomHeight = 0; -@override -void initState() { - super.initState(); - _position = widget.position; - _chatModel = widget.chatModel??null; - _width = widget.width; - _height = widget.height; -} + @override + void initState() { + super.initState(); + _position = widget.position; + _chatModel = widget.chatModel; + _width = widget.width; + _height = widget.height; + + WidgetsBinding.instance?.addObserver(this); + } + + @override + void dispose() { + WidgetsBinding.instance?.removeObserver(this); + super.dispose(); + } + + @override + void didChangeMetrics() { + final currentVisible = MediaQuery.of(context).viewInsets.bottom != 0; + + if (!_keyboardVisible && currentVisible) { + _saveHeight = _position.dy; + } else if (_lastBottomHeight > 0 && !currentVisible) { + setState(() { + _position = Offset(_position.dx, _saveHeight); + }); + } else if (_keyboardVisible && currentVisible) { + final sumHeight = MediaQuery.of(context).viewInsets.bottom + _height; + final contextHeight = MediaQuery.of(context).size.height; + if (sumHeight + _position.dy > contextHeight) { + final y = contextHeight - sumHeight; + setState(() { + _position = Offset(_position.dx, y); + }); + } + } + + _keyboardVisible = currentVisible; + _lastBottomHeight = MediaQuery.of(context).viewInsets.bottom; + } @override Widget build(BuildContext context) { From 85e82d0bd57929c1693af766ce3dab82c1997498 Mon Sep 17 00:00:00 2001 From: fufesou Date: Mon, 4 Sep 2023 23:21:47 +0800 Subject: [PATCH 594/612] fix, mobile connecting canvas color Signed-off-by: fufesou --- flutter/lib/mobile/pages/remote_page.dart | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart index 519e228f8..838545d0c 100644 --- a/flutter/lib/mobile/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -92,12 +92,16 @@ class _RemotePageState extends State { removeSharedStates(widget.id); } - Widget emptyOverlay() => BlockableOverlay( + // to-do: It should be better to use transparent color instead of the bgColor. + // But for now, the transparent color will cause the canvas to be white. + // I'm sure that the white color is caused by the Overlay widget in BlockableOverlay. + // But I don't know why and how to fix it. + Widget emptyOverlay(Color bgColor) => BlockableOverlay( /// the Overlay key will be set with _blockableOverlayState in BlockableOverlay /// see override build() in [BlockableOverlay] state: _blockableOverlayState, underlying: Container( - color: Colors.transparent, + color: bgColor, ), ); @@ -265,13 +269,13 @@ class _RemotePageState extends State { children: [ gFFI.ffiModel.pi.isSet.isTrue && gFFI.ffiModel.waitForFirstImage.isTrue - ? emptyOverlay() + ? emptyOverlay(MyTheme.canvasColor) : () { gFFI.ffiModel.tryShowAndroidActionsOverlay(); return Offstage(); }(), _bottomWidget(), - gFFI.ffiModel.pi.isSet.isFalse ? emptyOverlay() : Offstage(), + gFFI.ffiModel.pi.isSet.isFalse ? emptyOverlay(MyTheme.canvasColor) : Offstage(), ], )), body: Overlay( From 7242d03f568beec3819e0a1aa6235c8e21258780 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 5 Sep 2023 15:09:41 +0800 Subject: [PATCH 595/612] change target android sdk to 33 --- flutter/android/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/android/app/build.gradle b/flutter/android/app/build.gradle index 326689e5e..f4dc69e41 100644 --- a/flutter/android/app/build.gradle +++ b/flutter/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.carriez.flutter_hbb" minSdkVersion 21 - targetSdkVersion 31 + targetSdkVersion 33 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } From f1c0f1d0a4c8ecb5d8190ebd44d422d826eddf6c Mon Sep 17 00:00:00 2001 From: rustdesk Date: Tue, 5 Sep 2023 17:44:49 +0800 Subject: [PATCH 596/612] prepare for https://github.com/rustdesk/rustdesk-server-pro/discussions/65 --- src/common.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/common.rs b/src/common.rs index 36ca972b2..8477c9e62 100644 --- a/src/common.rs +++ b/src/common.rs @@ -779,12 +779,18 @@ pub fn get_sysinfo() -> serde_json::Value { os = format!("{os} - {}", system.os_version().unwrap_or_default()); } let hostname = hostname(); // sys.hostname() return localhost on android in my test - serde_json::json!({ + use serde_json::json; + let mut out = json!({ "cpu": format!("{cpu}{num_cpus}/{num_pcpus} cores"), "memory": format!("{memory}GB"), "os": os, "hostname": hostname, - }) + }); + #[cfg(not(any(target_os = "android", target_os = "ios")))] + { + out["username"] = json!(crate::platform::get_active_username()); + } + out } #[inline] From 048e97e1eecf4a9c03509ab00dcff99b7b0a332e Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Tue, 5 Sep 2023 17:40:11 +0530 Subject: [PATCH 597/612] use modified dashchat to fix ios chat window safe area Signed-off-by: Sahil Yeole --- flutter/pubspec.lock | 19 ++++++++++--------- flutter/pubspec.yaml | 4 +++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/flutter/pubspec.lock b/flutter/pubspec.lock index 960e28338..b6aca5429 100644 --- a/flutter/pubspec.lock +++ b/flutter/pubspec.lock @@ -300,11 +300,12 @@ packages: dash_chat_2: dependency: "direct main" description: - name: dash_chat_2 - sha256: e9e08b2a030d340d60f7adbeb977d3d6481db1f172b51440bfa02488b92fa19c - url: "https://pub.dev" - source: hosted - version: "0.0.17" + path: "." + ref: HEAD + resolved-ref: bd6b5b41254e57c5bcece202ebfb234de63e6487 + url: "https://github.com/rustdesk-org/Dash-Chat-2" + source: git + version: "0.0.18" debounce_throttle: dependency: "direct main" description: @@ -1398,10 +1399,10 @@ packages: dependency: transitive description: name: video_player - sha256: "59f7f31c919c59cbedd37c617317045f5f650dc0eeb568b0b0de9a36472bdb28" + sha256: d3910a8cefc0de8a432a4411dcf85030e885d8fef3ddea291f162253a05dbf01 url: "https://pub.dev" source: hosted - version: "2.5.1" + version: "2.7.1" video_player_android: dependency: transitive description: @@ -1422,10 +1423,10 @@ packages: dependency: transitive description: name: video_player_platform_interface - sha256: "42bb75de5e9b79e1f20f1d95f688fac0f95beac4d89c6eb2cd421724d4432dae" + sha256: be72301bf2c0150ab35a8c34d66e5a99de525f6de1e8d27c0672b836fe48f73a url: "https://pub.dev" source: hosted - version: "6.0.1" + version: "6.2.1" video_player_web: dependency: transitive description: diff --git a/flutter/pubspec.yaml b/flutter/pubspec.yaml index 691f86066..ba90bef3c 100644 --- a/flutter/pubspec.yaml +++ b/flutter/pubspec.yaml @@ -39,7 +39,9 @@ dependencies: package_info_plus: ^3.1.2 url_launcher: ^6.0.9 toggle_switch: ^2.1.0 - dash_chat_2: ^0.0.17 + dash_chat_2: + git: + url: https://github.com/rustdesk-org/Dash-Chat-2 draggable_float_widget: ^0.0.2 settings_ui: ^2.0.2 flutter_breadcrumb: ^1.0.1 From 71dbf0fab28c2b1cd4ac6e3b4dbf15b21c1be15a Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Tue, 5 Sep 2023 17:58:22 +0530 Subject: [PATCH 598/612] fix avoid chat window keyboard overlap ios Signed-off-by: Sahil Yeole --- flutter/lib/common/widgets/overlay.dart | 30 ++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flutter/lib/common/widgets/overlay.dart b/flutter/lib/common/widgets/overlay.dart index 89a4184db..bae1f7fc0 100644 --- a/flutter/lib/common/widgets/overlay.dart +++ b/flutter/lib/common/widgets/overlay.dart @@ -389,28 +389,27 @@ class _IOSDraggableState extends State with WidgetsBindingObserver _chatModel = widget.chatModel; _width = widget.width; _height = widget.height; - - WidgetsBinding.instance?.addObserver(this); } - @override - void dispose() { - WidgetsBinding.instance?.removeObserver(this); - super.dispose(); - } - - @override - void didChangeMetrics() { - final currentVisible = MediaQuery.of(context).viewInsets.bottom != 0; + checkKeyboard() { + final bottomHeight = MediaQuery.of(context).viewInsets.bottom; + final currentVisible = bottomHeight != 0; + // save if (!_keyboardVisible && currentVisible) { _saveHeight = _position.dy; - } else if (_lastBottomHeight > 0 && !currentVisible) { + } + + // reset + if (_lastBottomHeight > 0 && bottomHeight == 0) { setState(() { _position = Offset(_position.dx, _saveHeight); }); - } else if (_keyboardVisible && currentVisible) { - final sumHeight = MediaQuery.of(context).viewInsets.bottom + _height; + } + + // onKeyboardVisible + if (_keyboardVisible && currentVisible) { + final sumHeight = bottomHeight + _height; final contextHeight = MediaQuery.of(context).size.height; if (sumHeight + _position.dy > contextHeight) { final y = contextHeight - sumHeight; @@ -421,11 +420,12 @@ class _IOSDraggableState extends State with WidgetsBindingObserver } _keyboardVisible = currentVisible; - _lastBottomHeight = MediaQuery.of(context).viewInsets.bottom; + _lastBottomHeight = bottomHeight; } @override Widget build(BuildContext context) { + checkKeyboard(); return Stack( children: [ Positioned( From 2ada9fbee393d7c345344dfb346f81a0c1cafd6c Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Tue, 5 Sep 2023 18:21:17 +0530 Subject: [PATCH 599/612] remove WidgetsBindingObserver ios Signed-off-by: Sahil Yeole --- flutter/lib/common/widgets/overlay.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/lib/common/widgets/overlay.dart b/flutter/lib/common/widgets/overlay.dart index bae1f7fc0..b19034c68 100644 --- a/flutter/lib/common/widgets/overlay.dart +++ b/flutter/lib/common/widgets/overlay.dart @@ -373,7 +373,7 @@ class IOSDraggable extends StatefulWidget { _IOSDraggableState createState() => _IOSDraggableState(); } -class _IOSDraggableState extends State with WidgetsBindingObserver { +class _IOSDraggableState extends State { late Offset _position; late ChatModel? _chatModel; late double _width; From 12fbbbb5b33a8d4f5a15e2d68f3f84e3e8ac6702 Mon Sep 17 00:00:00 2001 From: "Miguel F. G" <116861809+flusheDData@users.noreply.github.com> Date: Tue, 5 Sep 2023 16:22:08 +0200 Subject: [PATCH 600/612] Update es.rs New terms added --- src/lang/es.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/es.rs b/src/lang/es.rs index 7bb24ac53..35d776f1a 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -538,8 +538,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("pull_ab_failed_tip", "No se ha podido refrescar el directorio"), ("push_ab_failed_tip", "No se ha podido sincronizar el directorio con el servidor"), ("synced_peer_readded_tip", "Los dispositivos presentes en sesiones recientes se sincronizarán con el directorio."), - ("Change Color", ""), - ("Primary Color", ""), - ("HSV Color", ""), + ("Change Color", "Cambiar Color"), + ("Primary Color", "Color Primario"), + ("HSV Color", "Color HSV"), ].iter().cloned().collect(); } From 0931341a7f704c6450f882935bbd82d9de71d7f8 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Wed, 6 Sep 2023 22:43:33 +0530 Subject: [PATCH 601/612] prevent frequent loginctl calls Signed-off-by: Sahil Yeole --- libs/hbb_common/src/platform/linux.rs | 9 +++++++++ src/platform/linux.rs | 6 ++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/libs/hbb_common/src/platform/linux.rs b/libs/hbb_common/src/platform/linux.rs index 89c96799d..536ac3091 100644 --- a/libs/hbb_common/src/platform/linux.rs +++ b/libs/hbb_common/src/platform/linux.rs @@ -183,6 +183,15 @@ pub fn is_active(sid: &str) -> bool { } } +pub fn is_active_and_seat0(sid: &str) -> bool { + if let Ok(output) = run_loginctl(Some(vec!["show-session", sid])) { + String::from_utf8_lossy(&output.stdout).contains("State=active") + && String::from_utf8_lossy(&output.stdout).contains("Seat=seat0") + } else { + false + } +} + pub fn run_cmds(cmds: &str) -> ResultType { let output = std::process::Command::new("sh") .args(vec!["-c", cmds]) diff --git a/src/platform/linux.rs b/src/platform/linux.rs index c09d26008..944e24c15 100644 --- a/src/platform/linux.rs +++ b/src/platform/linux.rs @@ -1073,13 +1073,11 @@ mod desktop { } pub fn refresh(&mut self) { - let seat0_values = get_values_of_seat0(&[0, 1, 2]); - if !self.sid.is_empty() && is_active(&self.sid) { - if self.sid == seat0_values[0] { + if !self.sid.is_empty() && is_active_and_seat0(&self.sid) { return; - } } + let seat0_values = get_values_of_seat0(&[0, 1, 2]); if seat0_values[0].is_empty() { *self = Self::default(); self.is_rustdesk_subprocess = false; From 55fc0cb63bd2aae078397fda635c487dc6ebd1c9 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 7 Sep 2023 13:39:20 +0800 Subject: [PATCH 602/612] feat, remember remote window fullscreen state Signed-off-by: dignow --- flutter/lib/common.dart | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 672adca75..8b20214df 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1392,9 +1392,10 @@ class LastWindowPosition { double? offsetWidth; double? offsetHeight; bool? isMaximized; + bool? isFullscreen; LastWindowPosition(this.width, this.height, this.offsetWidth, - this.offsetHeight, this.isMaximized); + this.offsetHeight, this.isMaximized, this.isFullscreen); Map toJson() { return { @@ -1403,6 +1404,7 @@ class LastWindowPosition { "offsetWidth": offsetWidth, "offsetHeight": offsetHeight, "isMaximized": isMaximized, + "isFullscreen": isFullscreen, }; } @@ -1418,7 +1420,7 @@ class LastWindowPosition { try { final m = jsonDecode(content); return LastWindowPosition(m["width"], m["height"], m["offsetWidth"], - m["offsetHeight"], m["isMaximized"]); + m["offsetHeight"], m["isMaximized"], m["isFullscreen"]); } catch (e) { debugPrintStack( label: @@ -1484,20 +1486,21 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { } final pos = LastWindowPosition( - sz.width, sz.height, position.dx, position.dy, isMaximized); + sz.width, sz.height, position.dx, position.dy, isMaximized, stateGlobal.fullscreen); debugPrint( - "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}, isMaximized:${pos.isMaximized}"); + "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}, isMaximized:${pos.isMaximized}, isFullscreen:${pos.isFullscreen}"); await bind.setLocalFlutterOption( k: kWindowPrefix + type.name, v: pos.toString()); if (type == WindowType.RemoteDesktop && windowId != null) { - await _saveSessionWindowPosition(type, windowId, isMaximized, pos); + await _saveSessionWindowPosition( + type, windowId, isMaximized, stateGlobal.fullscreen, pos); } } Future _saveSessionWindowPosition(WindowType windowType, int windowId, - bool isMaximized, LastWindowPosition pos) async { + bool isMaximized, bool isFullscreen, LastWindowPosition pos) async { final remoteList = await DesktopMultiWindow.invokeMethod( windowId, kWindowEventGetRemoteList, null); getPeerPos(String peerId) { @@ -1510,7 +1513,8 @@ Future _saveSessionWindowPosition(WindowType windowType, int windowId, lpos?.height ?? pos.offsetHeight, lpos?.offsetWidth ?? pos.offsetWidth, lpos?.offsetHeight ?? pos.offsetHeight, - isMaximized) + isMaximized, + isFullscreen) .toString(); } else { return pos.toString(); @@ -1700,7 +1704,13 @@ Future restoreWindowPosition(WindowType type, await wc.setFrame(frame); } } - if (lpos.isMaximized == true) { + if (lpos.isFullscreen == true) { + await restoreFrame(); + // An duration is needed to avoid the window being restored after fullscreen. + Future.delayed(Duration(milliseconds: 300), () async { + stateGlobal.setFullscreen(true); + }); + } else if (lpos.isMaximized == true) { await restoreFrame(); // An duration is needed to avoid the window being restored after maximized. Future.delayed(Duration(milliseconds: 300), () async { From dc29b4afa16088d4c3c4474813ebcfda6419c828 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Thu, 7 Sep 2023 15:17:07 +0800 Subject: [PATCH 603/612] qs.exe -> -qs- --- src/core_main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_main.rs b/src/core_main.rs index 7b7b4b590..afdb05722 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -116,7 +116,7 @@ pub fn core_main() -> Option> { { _is_quick_support |= !crate::platform::is_installed() && args.is_empty() - && (arg_exe.to_lowercase().ends_with("qs.exe") + && (arg_exe.to_lowercase().contains("-qs-") || (!click_setup && crate::platform::is_elevated(None).unwrap_or(false))); crate::portable_service::client::set_quick_support(_is_quick_support); } From 2afce3f1f4dd904eca65de0245b207ea347020c0 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 6 Sep 2023 16:56:39 +0800 Subject: [PATCH 604/612] add file log page to cm * Only send and receive logs are shown * For older version, client send to server doesn't have size information, because server side doesn't know the total_size * Not switch tabs automatically when new files are transferred * If cm side page is open, not pop up automatically when new files are transferred * Show unread message count * The cm tab remains open when closed if a file transfer has previously occurred Signed-off-by: 21pages --- flutter/assets/file_transfer.svg | 1 + flutter/lib/desktop/pages/server_page.dart | 223 ++++++++++++++++++++- flutter/lib/models/chat_model.dart | 26 ++- flutter/lib/models/cm_file_model.dart | 154 ++++++++++++++ flutter/lib/models/file_model.dart | 1 + flutter/lib/models/model.dart | 7 + libs/hbb_common/protos/message.proto | 1 + libs/hbb_common/src/fs.rs | 47 ++++- src/client/io_loop.rs | 9 +- src/flutter.rs | 4 + src/ipc.rs | 3 + src/server/connection.rs | 34 +++- src/ui/cm.rs | 8 +- src/ui_cm_interface.rs | 40 +++- 14 files changed, 519 insertions(+), 39 deletions(-) create mode 100644 flutter/assets/file_transfer.svg create mode 100644 flutter/lib/models/cm_file_model.dart diff --git a/flutter/assets/file_transfer.svg b/flutter/assets/file_transfer.svg new file mode 100644 index 000000000..e1d8ccbec --- /dev/null +++ b/flutter/assets/file_transfer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index ce7b26b58..2ef04b244 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:io'; +import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/consts.dart'; @@ -9,12 +10,14 @@ import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/models/chat_model.dart'; import 'package:flutter_hbb/utils/platform_channel.dart'; import 'package:get/get.dart'; +import 'package:percent_indicator/linear_percent_indicator.dart'; import 'package:provider/provider.dart'; import 'package:window_manager/window_manager.dart'; import 'package:flutter_svg/flutter_svg.dart'; import '../../common.dart'; import '../../common/widgets/chat_page.dart'; +import '../../models/file_model.dart'; import '../../models/platform_model.dart'; import '../../models/server_model.dart'; @@ -32,6 +35,7 @@ class _DesktopServerPageState extends State void initState() { gFFI.ffiModel.updateEventListener(gFFI.sessionId, ""); windowManager.addListener(this); + Get.put(tabController); tabController.onRemoved = (_, id) { onRemoveId(id); }; @@ -111,6 +115,7 @@ class ConnectionManagerState extends State { }); } windowManager.setTitle(getWindowNameWithId(client.peerId)); + gFFI.cmFileModel.updateCurrentClientId(client.id); } } }; @@ -173,7 +178,7 @@ class ConnectionManagerState extends State { pageViewBuilder: (pageView) => Row( children: [ Consumer( - builder: (_, model, child) => model.isShowCMChatPage + builder: (_, model, child) => model.isShowCMSidePage ? Expanded( child: buildRemoteBlock( child: Container( @@ -182,8 +187,7 @@ class ConnectionManagerState extends State { right: BorderSide( color: Theme.of(context) .dividerColor))), - child: - ChatPage(type: ChatPageType.desktopCM)), + child: buildSidePage()), ), flex: (kConnectionManagerWindowSizeOpenChat.width - kConnectionManagerWindowSizeClosedChat @@ -204,6 +208,19 @@ class ConnectionManagerState extends State { ); } + Widget buildSidePage() { + final selected = gFFI.serverModel.tabController.state.value.selected; + if (selected < 0 || selected >= gFFI.serverModel.clients.length) { + return Offstage(); + } + final clientType = gFFI.serverModel.clients[selected].type_(); + if (clientType == ClientType.file) { + return _FileTransferLogPage(); + } else { + return ChatPage(type: ChatPageType.desktopCM); + } + } + Widget buildTitleBar() { return SizedBox( height: kDesktopRemoteTabBarHeight, @@ -447,14 +464,21 @@ class _CmHeaderState extends State<_CmHeader> ), ), Offstage( - offstage: !client.authorized || client.type_() != ClientType.remote, + offstage: !client.authorized || + (client.type_() != ClientType.remote && + client.type_() != ClientType.file), child: IconButton( - onPressed: () => checkClickTime( - client.id, - () => gFFI.chatModel - .toggleCMChatPage(MessageKey(client.peerId, client.id)), - ), - icon: SvgPicture.asset('assets/chat2.svg'), + onPressed: () => checkClickTime(client.id, () { + if (client.type_() != ClientType.file) { + gFFI.chatModel.toggleCMSidePage(); + } else { + gFFI.chatModel + .toggleCMChatPage(MessageKey(client.peerId, client.id)); + } + }), + icon: SvgPicture.asset(client.type_() == ClientType.file + ? 'assets/file_transfer.svg' + : 'assets/chat2.svg'), splashRadius: kDesktopIconButtonSplashRadius, ), ) @@ -912,3 +936,182 @@ void checkClickTime(int id, Function() callback) async { if (d > 120) callback(); }); } + +class _FileTransferLogPage extends StatefulWidget { + _FileTransferLogPage({Key? key}) : super(key: key); + + @override + State<_FileTransferLogPage> createState() => __FileTransferLogPageState(); +} + +class __FileTransferLogPageState extends State<_FileTransferLogPage> { + @override + Widget build(BuildContext context) { + return statusList(); + } + + Widget generateCard(Widget child) { + return Container( + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + borderRadius: BorderRadius.all( + Radius.circular(15.0), + ), + ), + child: child, + ); + } + + Widget statusList() { + return PreferredSize( + preferredSize: const Size(200, double.infinity), + child: Container( + margin: const EdgeInsets.only(top: 16.0, bottom: 16.0, right: 16.0), + padding: const EdgeInsets.all(8.0), + child: Obx( + () { + final jobTable = gFFI.cmFileModel.currentJobTable; + statusListView(List jobs) => ListView.builder( + controller: ScrollController(), + itemBuilder: (BuildContext context, int index) { + final item = jobs[index]; + return Padding( + padding: const EdgeInsets.only(bottom: 5), + child: generateCard( + Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: 50, + child: Column( + children: [ + Transform.rotate( + angle: item.isRemoteToLocal ? 0 : pi, + child: SvgPicture.asset( + "assets/arrow.svg", + color: Theme.of(context) + .tabBarTheme + .labelColor, + ), + ), + Text(item.isRemoteToLocal + ? translate('Send') + : translate('Receive')) + ], + ), + ).paddingOnly(left: 15), + const SizedBox( + width: 16.0, + ), + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + item.fileName, + ).paddingSymmetric(vertical: 10), + if (item.totalSize > 0) + Text( + '${translate("Total")} ${readableFileSize(item.totalSize.toDouble())}', + style: TextStyle( + fontSize: 12, + color: MyTheme.darkGray, + ), + ), + if (item.totalSize > 0) + Offstage( + offstage: item.state != + JobState.inProgress, + child: Text( + '${translate("Speed")} ${readableFileSize(item.speed)}/s', + style: TextStyle( + fontSize: 12, + color: MyTheme.darkGray, + ), + ), + ), + Offstage( + offstage: + item.state == JobState.inProgress, + child: Text( + translate( + item.display(), + ), + style: TextStyle( + fontSize: 12, + color: MyTheme.darkGray, + ), + ), + ), + if (item.totalSize > 0) + Offstage( + offstage: item.state != + JobState.inProgress, + child: LinearPercentIndicator( + padding: + EdgeInsets.only(right: 15), + animateFromLastPercent: true, + center: Text( + '${(item.finishedSize / item.totalSize * 100).toStringAsFixed(0)}%', + ), + barRadius: Radius.circular(15), + percent: item.finishedSize / + item.totalSize, + progressColor: MyTheme.accent, + backgroundColor: + Theme.of(context).hoverColor, + lineHeight: + kDesktopFileTransferRowHeight, + ).paddingSymmetric(vertical: 15), + ), + ], + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [], + ), + ], + ), + ], + ).paddingSymmetric(vertical: 10), + ), + ); + }, + itemCount: jobTable.length, + ); + + return jobTable.isEmpty + ? generateCard( + Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SvgPicture.asset( + "assets/transfer.svg", + color: Theme.of(context).tabBarTheme.labelColor, + height: 40, + ).paddingOnly(bottom: 10), + Text( + translate("No transfers in progress"), + textAlign: TextAlign.center, + textScaleFactor: 1.20, + style: TextStyle( + color: + Theme.of(context).tabBarTheme.labelColor), + ), + ], + ), + ), + ) + : statusListView(jobTable); + }, + )), + ); + } +} diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 898427351..487f57e4d 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -86,13 +86,13 @@ class ChatModel with ChangeNotifier { late final Map _messages = {}; MessageKey _currentKey = MessageKey('', -2); // -2 is invalid value - late bool _isShowCMChatPage = false; + late bool _isShowCMSidePage = false; Map get messages => _messages; MessageKey get currentKey => _currentKey; - bool get isShowCMChatPage => _isShowCMChatPage; + bool get isShowCMSidePage => _isShowCMSidePage; void setOverlayState(BlockableOverlayState blockableOverlayState) { _blockableOverlayState = blockableOverlayState; @@ -255,7 +255,7 @@ class ChatModel with ChangeNotifier { showChatPage(MessageKey key) async { if (isDesktop) { if (isConnManager) { - if (!_isShowCMChatPage) { + if (!_isShowCMSidePage) { await toggleCMChatPage(key); } } else { @@ -272,12 +272,26 @@ class ChatModel with ChangeNotifier { } } + showSidePage() async { + if (isDesktop) { + if (isConnManager) { + if (!_isShowCMSidePage) { + await toggleCMSidePage(); + } + } + } + } + toggleCMChatPage(MessageKey key) async { if (gFFI.chatModel.currentKey != key) { gFFI.chatModel.changeCurrentKey(key); } - if (_isShowCMChatPage) { - _isShowCMChatPage = !_isShowCMChatPage; + await toggleCMSidePage(); + } + + toggleCMSidePage() async { + if (_isShowCMSidePage) { + _isShowCMSidePage = !_isShowCMSidePage; notifyListeners(); await windowManager.show(); await windowManager.setSizeAlignment( @@ -287,7 +301,7 @@ class ChatModel with ChangeNotifier { await windowManager.show(); await windowManager.setSizeAlignment( kConnectionManagerWindowSizeOpenChat, Alignment.topRight); - _isShowCMChatPage = !_isShowCMChatPage; + _isShowCMSidePage = !_isShowCMSidePage; notifyListeners(); } } diff --git a/flutter/lib/models/cm_file_model.dart b/flutter/lib/models/cm_file_model.dart new file mode 100644 index 000000000..064ce9d53 --- /dev/null +++ b/flutter/lib/models/cm_file_model.dart @@ -0,0 +1,154 @@ +import 'dart:collection'; +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter_hbb/common.dart'; +import 'package:flutter_hbb/models/model.dart'; +import 'package:flutter_hbb/models/server_model.dart'; +import 'package:get/get.dart'; +import 'file_model.dart'; + +class CmFileModel { + final WeakReference parent; + final currentJobTable = RxList(); + final _jobTables = HashMap>.fromEntries([]); + Stopwatch stopwatch = Stopwatch(); + int _lastElapsed = 0; + bool _jobAdded = false; + bool _showing = false; + + CmFileModel(this.parent); + + void updateCurrentClientId(int id) { + if (_jobTables[id] == null) { + _jobTables[id] = RxList(); + } + Future.delayed(Duration.zero, () { + currentJobTable.value = _jobTables[id]!; + }); + } + + onFileTransferLog(dynamic log) { + try { + dynamic d = jsonDecode(log); + if (!stopwatch.isRunning) stopwatch.start(); + bool calcSpeed = stopwatch.elapsedMilliseconds - _lastElapsed >= 1000; + if (calcSpeed) { + _lastElapsed = stopwatch.elapsedMilliseconds; + } + if (d is List) { + for (var l in d) { + _dealOneJob(l, calcSpeed); + } + } else { + _dealOneJob(d, calcSpeed); + } + currentJobTable.refresh(); + Future.delayed(Duration.zero, () async { + if (_jobAdded) { + _jobAdded = false; + if (!_showing) { + _showing = true; + await gFFI.chatModel.showSidePage(); + _showing = false; + } + } + }); + } catch (e) { + debugPrint("onFileTransferLog:$e"); + } + } + + _dealOneJob(dynamic l, bool calcSpeed) { + final data = TransferJobSerdeData.fromJson(l); + Client? client = + gFFI.serverModel.clients.firstWhereOrNull((e) => e.id == data.connId); + var jobTable = _jobTables[data.connId]; + if (jobTable == null) { + debugPrint("jobTable should not be null"); + return; + } + JobProgress? job = jobTable.firstWhereOrNull((e) => e.id == data.id); + if (job == null) { + job = JobProgress(); + jobTable.add(job); + _jobAdded = true; + final currentSelectedTab = + gFFI.serverModel.tabController.state.value.selectedTabInfo; + if (currentSelectedTab.key != data.connId.toString()) { + client?.unreadChatMessageCount.value += 1; + } + } + job.id = data.id; + job.isRemoteToLocal = data.isRemote; + job.fileName = data.path; + job.totalSize = data.totalSize; + job.finishedSize = data.finishedSize; + if (job.finishedSize > data.totalSize) { + job.finishedSize = data.totalSize; + } + job.isRemoteToLocal = data.isRemote; + + if (job.finishedSize > 0) { + if (job.finishedSize < job.totalSize) { + job.state = JobState.inProgress; + } else { + job.state = JobState.done; + } + } + if (data.done) { + job.state = JobState.done; + } else if (data.cancel || data.error == 'skipped') { + job.state = JobState.done; + job.err = 'skipped'; + } else if (data.error.isNotEmpty) { + job.state = JobState.error; + job.err = data.error; + } + if (calcSpeed) { + job.speed = (data.transferred - job.lastTransferredSize) * 1.0; + job.lastTransferredSize = data.transferred; + } + jobTable.refresh(); + } +} + +class TransferJobSerdeData { + int connId; + int id; + String path; + bool isRemote; + int totalSize; + int finishedSize; + int transferred; + bool done; + bool cancel; + String error; + + TransferJobSerdeData({ + required this.connId, + required this.id, + required this.path, + required this.isRemote, + required this.totalSize, + required this.finishedSize, + required this.transferred, + required this.done, + required this.cancel, + required this.error, + }); + + TransferJobSerdeData.fromJson(dynamic d) + : this( + connId: d['connId'] ?? 0, + id: int.tryParse(d['id'].toString()) ?? 0, + path: d['path'] ?? '', + isRemote: d['isRemote'] ?? false, + totalSize: d['totalSize'] ?? 0, + finishedSize: d['finishedSize'] ?? 0, + transferred: d['transferred'] ?? 0, + done: d['done'] ?? false, + cancel: d['cancel'] ?? false, + error: d['error'] ?? '', + ); +} diff --git a/flutter/lib/models/file_model.dart b/flutter/lib/models/file_model.dart index 35c0d020d..108c76f1e 100644 --- a/flutter/lib/models/file_model.dart +++ b/flutter/lib/models/file_model.dart @@ -1029,6 +1029,7 @@ class JobProgress { var to = ""; var showHidden = false; var err = ""; + int lastTransferredSize = 0; clear() { state = JobState.none; diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 14b6b4df6..a07a0d5e7 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -11,6 +11,7 @@ import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/generated_bridge.dart'; import 'package:flutter_hbb/models/ab_model.dart'; import 'package:flutter_hbb/models/chat_model.dart'; +import 'package:flutter_hbb/models/cm_file_model.dart'; import 'package:flutter_hbb/models/file_model.dart'; import 'package:flutter_hbb/models/group_model.dart'; import 'package:flutter_hbb/models/peer_tab_model.dart'; @@ -317,6 +318,10 @@ class FfiModel with ChangeNotifier { } } } + } else if (name == "cm_file_transfer_log") { + if (isDesktop) { + gFFI.cmFileModel.onFileTransferLog(evt['log']); + } } else { debugPrint('Unknown event name: $name'); } @@ -1696,6 +1701,7 @@ class FFI { late final RecordingModel recordingModel; // session late final InputModel inputModel; // session late final ElevationModel elevationModel; // session + late final CmFileModel cmFileModel; // cm FFI(SessionID? sId) { sessionId = sId ?? (isDesktop ? Uuid().v4obj() : _constSessionId); @@ -1714,6 +1720,7 @@ class FFI { recordingModel = RecordingModel(WeakReference(this)); inputModel = InputModel(WeakReference(this)); elevationModel = ElevationModel(WeakReference(this)); + cmFileModel = CmFileModel(WeakReference(this)); } /// Mobile reuse FFI diff --git a/libs/hbb_common/protos/message.proto b/libs/hbb_common/protos/message.proto index 82206cbf2..47de31e45 100644 --- a/libs/hbb_common/protos/message.proto +++ b/libs/hbb_common/protos/message.proto @@ -397,6 +397,7 @@ message FileTransferReceiveRequest { string path = 2; // path written to repeated FileEntry files = 3; int32 file_num = 4; + uint64 total_size = 5; } message FileRemoveDir { diff --git a/libs/hbb_common/src/fs.rs b/libs/hbb_common/src/fs.rs index 33902e575..b7ea836b7 100644 --- a/libs/hbb_common/src/fs.rs +++ b/libs/hbb_common/src/fs.rs @@ -4,6 +4,7 @@ use std::path::{Path, PathBuf}; use std::time::{Duration, SystemTime, UNIX_EPOCH}; use serde_derive::{Deserialize, Serialize}; +use serde_json::json; use tokio::{fs::File, io::*}; use crate::{anyhow::anyhow, bail, get_version_number, message_proto::*, ResultType, Stream}; @@ -194,7 +195,8 @@ pub fn can_enable_overwrite_detection(version: i64) -> bool { version >= get_version_number("1.1.10") } -#[derive(Default)] +#[derive(Default, Serialize, Debug)] +#[serde(rename_all = "camelCase")] pub struct TransferJob { pub id: i32, pub remote: String, @@ -203,10 +205,13 @@ pub struct TransferJob { pub is_remote: bool, pub is_last_job: bool, pub file_num: i32, + #[serde(skip_serializing)] pub files: Vec, + pub conn_id: i32, // server only + #[serde(skip_serializing)] file: Option, - total_size: u64, + pub total_size: u64, finished_size: u64, transferred: u64, enable_overwrite_detection: bool, @@ -695,13 +700,20 @@ pub fn new_send_confirm(r: FileTransferSendConfirmRequest) -> Message { } #[inline] -pub fn new_receive(id: i32, path: String, file_num: i32, files: Vec) -> Message { +pub fn new_receive( + id: i32, + path: String, + file_num: i32, + files: Vec, + total_size: u64, +) -> Message { let mut action = FileAction::new(); action.set_receive(FileTransferReceiveRequest { id, path, files, file_num, + total_size, ..Default::default() }); let mut msg_out = Message::new(); @@ -748,10 +760,16 @@ pub fn get_job(id: i32, jobs: &mut [TransferJob]) -> Option<&mut TransferJob> { jobs.iter_mut().find(|x| x.id() == id) } +#[inline] +pub fn get_job_immutable(id: i32, jobs: &[TransferJob]) -> Option<&TransferJob> { + jobs.iter().find(|x| x.id() == id) +} + pub async fn handle_read_jobs( jobs: &mut Vec, stream: &mut crate::Stream, -) -> ResultType<()> { +) -> ResultType { + let mut job_log = Default::default(); let mut finished = Vec::new(); for job in jobs.iter_mut() { if job.is_last_job { @@ -768,9 +786,11 @@ pub async fn handle_read_jobs( } Ok(None) => { if job.job_completed() { + job_log = serialize_transfer_job(job, true, false, ""); finished.push(job.id()); match job.job_error() { Some(err) => { + job_log = serialize_transfer_job(job, false, false, &err); stream .send(&new_error(job.id(), err, job.file_num())) .await? @@ -786,7 +806,7 @@ pub async fn handle_read_jobs( for id in finished { remove_job(id, jobs); } - Ok(()) + Ok(job_log) } pub fn remove_all_empty_dir(path: &PathBuf) -> ResultType<()> { @@ -861,3 +881,20 @@ pub fn is_write_need_confirmation( Ok(DigestCheckResult::NoSuchFile) } } + +pub fn serialize_transfer_jobs(jobs: &[TransferJob]) -> String { + let mut v = vec![]; + for job in jobs { + let value = serde_json::to_value(job).unwrap_or_default(); + v.push(value); + } + serde_json::to_string(&v).unwrap_or_default() +} + +pub fn serialize_transfer_job(job: &TransferJob, done: bool, cancel: bool, error: &str) -> String { + let mut value = serde_json::to_value(job).unwrap_or_default(); + value["done"] = json!(done); + value["cancel"] = json!(cancel); + value["error"] = json!(error); + serde_json::to_string(&value).unwrap_or_default() +} diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index aaf426e28..ddf4b64ac 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -483,9 +483,13 @@ impl Remote { // peer is not windows, need transform \ to / fs::transform_windows_path(&mut files); } + let total_size = job.total_size(); self.read_jobs.push(job); self.timer = time::interval(MILLI1); - allow_err!(peer.send(&fs::new_receive(id, to, file_num, files)).await); + allow_err!( + peer.send(&fs::new_receive(id, to, file_num, files, total_size)) + .await + ); } } } @@ -568,7 +572,8 @@ impl Remote { id, job.path.to_string_lossy().to_string(), job.file_num, - job.files.clone() + job.files.clone(), + job.total_size(), )) .await ); diff --git a/src/flutter.rs b/src/flutter.rs index af9580587..817503c68 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -907,6 +907,10 @@ pub mod connection_manager { let client_json = serde_json::to_string(&client).unwrap_or("".into()); self.push_event("update_voice_call_state", vec![("client", &client_json)]); } + + fn file_transfer_log(&self, log: String) { + self.push_event("cm_file_transfer_log", vec![("log", &log.to_string())]); + } } impl FlutterHandler { diff --git a/src/ipc.rs b/src/ipc.rs index 1d0c99ea3..1cbd994bb 100644 --- a/src/ipc.rs +++ b/src/ipc.rs @@ -70,6 +70,8 @@ pub enum FS { file_num: i32, files: Vec<(String, u64)>, overwrite_detection: bool, + total_size: u64, + conn_id: i32, }, CancelWrite { id: i32, @@ -231,6 +233,7 @@ pub enum Data { Plugin(Plugin), #[cfg(windows)] SyncWinCpuUsage(Option), + FileTransferLog(String), } #[tokio::main(flavor = "current_thread")] diff --git a/src/server/connection.rs b/src/server/connection.rs index a0f05c43a..c9f07eb78 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -188,6 +188,7 @@ pub struct Connection { lr: LoginRequest, last_recv_time: Arc>, chat_unanswered: bool, + file_transferred: bool, #[cfg(windows)] portable: PortableState, from_switch: bool, @@ -320,6 +321,7 @@ impl Connection { lr: Default::default(), last_recv_time: Arc::new(Mutex::new(Instant::now())), chat_unanswered: false, + file_transferred: false, #[cfg(windows)] portable: Default::default(), from_switch: false, @@ -399,6 +401,7 @@ impl Connection { } ipc::Data::Close => { conn.chat_unanswered = false; // seen + conn.file_transferred = false; //seen conn.send_close_reason_no_retry("").await; conn.on_close("connection manager", true).await; break; @@ -536,9 +539,17 @@ impl Connection { }, _ = conn.file_timer.tick() => { if !conn.read_jobs.is_empty() { - if let Err(err) = fs::handle_read_jobs(&mut conn.read_jobs, &mut conn.stream).await { - conn.on_close(&err.to_string(), false).await; - break; + conn.send_to_cm(ipc::Data::FileTransferLog(fs::serialize_transfer_jobs(&conn.read_jobs))); + match fs::handle_read_jobs(&mut conn.read_jobs, &mut conn.stream).await { + Ok(log) => { + if !log.is_empty() { + conn.send_to_cm(ipc::Data::FileTransferLog(log)); + } + } + Err(err) => { + conn.on_close(&err.to_string(), false).await; + break; + } } } else { conn.file_timer = time::interval_at(Instant::now() + SEC30, SEC30); @@ -1717,6 +1728,7 @@ impl Connection { } } Some(file_action::Union::Send(s)) => { + // server to client let id = s.id; let od = can_enable_overwrite_detection(get_version_number( &self.lr.version, @@ -1734,10 +1746,12 @@ impl Connection { Err(err) => { self.send(fs::new_error(id, err, 0)).await; } - Ok(job) => { + Ok(mut job) => { self.send(fs::new_dir(id, path, job.files().to_vec())) .await; let mut files = job.files().to_owned(); + job.is_remote = true; + job.conn_id = self.inner.id(); self.read_jobs.push(job); self.file_timer = time::interval(MILLI1); self.post_file_audit( @@ -1751,8 +1765,10 @@ impl Connection { ); } } + self.file_transferred = true; } Some(file_action::Union::Receive(r)) => { + // client to server // note: 1.1.10 introduced identical file detection, which breaks original logic of send/recv files // whenever got send/recv request, check peer version to ensure old version of rustdesk let od = can_enable_overwrite_detection(get_version_number( @@ -1769,6 +1785,8 @@ impl Connection { .map(|f| (f.name, f.modified_time)) .collect(), overwrite_detection: od, + total_size: r.total_size, + conn_id: self.inner.id(), }); self.post_file_audit( FileAuditType::RemoteReceive, @@ -1780,6 +1798,7 @@ impl Connection { .collect(), json!({}), ); + self.file_transferred = true; } Some(file_action::Union::RemoveDir(d)) => { self.send_fs(ipc::FS::RemoveDir { @@ -1803,6 +1822,11 @@ impl Connection { } Some(file_action::Union::Cancel(c)) => { self.send_fs(ipc::FS::CancelWrite { id: c.id }); + if let Some(job) = fs::get_job_immutable(c.id, &self.read_jobs) { + self.send_to_cm(ipc::Data::FileTransferLog( + fs::serialize_transfer_job(job, false, true, ""), + )); + } fs::remove_job(c.id, &mut self.read_jobs); } Some(file_action::Union::SendConfirm(r)) => { @@ -2254,7 +2278,7 @@ impl Connection { lock_screen().await; } #[cfg(not(any(target_os = "android", target_os = "ios")))] - let data = if self.chat_unanswered { + let data = if self.chat_unanswered || self.file_transferred { ipc::Data::Disconnected } else { ipc::Data::Close diff --git a/src/ui/cm.rs b/src/ui/cm.rs index a574b5e88..b827b76b1 100644 --- a/src/ui/cm.rs +++ b/src/ui/cm.rs @@ -59,13 +59,11 @@ impl InvokeUiCM for SciterHandler { fn update_voice_call_state(&self, client: &crate::ui_cm_interface::Client) { self.call( "updateVoiceCallState", - &make_args!( - client.id, - client.in_voice_call, - client.incoming_voice_call - ), + &make_args!(client.id, client.in_voice_call, client.incoming_voice_call), ); } + + fn file_transfer_log(&self, _log: String) {} } impl SciterHandler { diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 16fa59631..ceb185443 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -99,6 +99,8 @@ pub trait InvokeUiCM: Send + Clone + 'static + Sized { fn show_elevation(&self, show: bool); fn update_voice_call_state(&self, client: &Client); + + fn file_transfer_log(&self, log: String); } impl Deref for ConnectionManager { @@ -357,6 +359,7 @@ impl IpcTaskRunner { ); } } + let (tx_log, mut rx_log) = mpsc::unbounded_channel::(); self.running = false; loop { @@ -403,11 +406,16 @@ impl IpcTaskRunner { if let ipc::FS::WriteBlock { id, file_num, data: _, compressed } = fs { if let Ok(bytes) = self.stream.next_raw().await { fs = ipc::FS::WriteBlock{id, file_num, data:bytes.into(), compressed}; - handle_fs(fs, &mut write_jobs, &self.tx).await; + handle_fs(fs, &mut write_jobs, &self.tx, Some(&tx_log)).await; } } else { - handle_fs(fs, &mut write_jobs, &self.tx).await; + handle_fs(fs, &mut write_jobs, &self.tx, Some(&tx_log)).await; } + let log = fs::serialize_transfer_jobs(&write_jobs); + self.cm.ui_handler.file_transfer_log(log); + } + Data::FileTransferLog(log) => { + self.cm.ui_handler.file_transfer_log(log); } #[cfg(not(any(target_os = "android", target_os = "ios")))] Data::ClipboardFile(_clip) => { @@ -509,6 +517,9 @@ impl IpcTaskRunner { // } }, + Some(job_log) = rx_log.recv() => { + self.cm.ui_handler.file_transfer_log(job_log); + } } } } @@ -632,7 +643,7 @@ pub async fn start_listen( cm.new_message(current_id, text); } Some(Data::FS(fs)) => { - handle_fs(fs, &mut write_jobs, &tx).await; + handle_fs(fs, &mut write_jobs, &tx, None).await; } Some(Data::Close) => { break; @@ -647,7 +658,14 @@ pub async fn start_listen( } #[cfg(not(any(target_os = "ios")))] -async fn handle_fs(fs: ipc::FS, write_jobs: &mut Vec, tx: &UnboundedSender) { +async fn handle_fs( + fs: ipc::FS, + write_jobs: &mut Vec, + tx: &UnboundedSender, + tx_log: Option<&UnboundedSender>, +) { + use hbb_common::fs::serialize_transfer_job; + match fs { ipc::FS::ReadDir { dir, @@ -674,10 +692,12 @@ async fn handle_fs(fs: ipc::FS, write_jobs: &mut Vec, tx: &Unbo file_num, mut files, overwrite_detection, + total_size, + conn_id, } => { // cm has no show_hidden context // dummy remote, show_hidden, is_remote - write_jobs.push(fs::TransferJob::new_write( + let mut job = fs::TransferJob::new_write( id, "".to_string(), path, @@ -693,11 +713,17 @@ async fn handle_fs(fs: ipc::FS, write_jobs: &mut Vec, tx: &Unbo }) .collect(), overwrite_detection, - )); + ); + job.total_size = total_size; + job.conn_id = conn_id; + write_jobs.push(job); } ipc::FS::CancelWrite { id } => { if let Some(job) = fs::get_job(id, write_jobs) { job.remove_download_file(); + tx_log.map(|tx: &UnboundedSender| { + tx.send(serialize_transfer_job(job, false, true, "")) + }); fs::remove_job(id, write_jobs); } } @@ -705,11 +731,13 @@ async fn handle_fs(fs: ipc::FS, write_jobs: &mut Vec, tx: &Unbo if let Some(job) = fs::get_job(id, write_jobs) { job.modify_time(); send_raw(fs::new_done(id, file_num), tx); + tx_log.map(|tx| tx.send(serialize_transfer_job(job, true, false, ""))); fs::remove_job(id, write_jobs); } } ipc::FS::WriteError { id, file_num, err } => { if let Some(job) = fs::get_job(id, write_jobs) { + tx_log.map(|tx| tx.send(serialize_transfer_job(job, false, false, &err))); send_raw(fs::new_error(job.id(), err, file_num), tx); fs::remove_job(job.id(), write_jobs); } From 17af5622eca67a7ccc209e8b8eb5b654da37c314 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 7 Sep 2023 20:04:23 +0800 Subject: [PATCH 605/612] remember remote window fullscreen, set global state Signed-off-by: dignow --- .../lib/desktop/pages/remote_tab_page.dart | 1 + flutter/lib/models/state_model.dart | 32 ++++++++++--------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 4467adad4..0490ce373 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -410,6 +410,7 @@ class _ConnectionTabPageState extends State { void onRemoveId(String id) async { if (tabController.state.value.tabs.isEmpty) { await WindowController.fromWindowId(windowId()).close(); + stateGlobal.setFullscreen(false, procWnd: false); } ConnectionTypeState.delete(id); _update_remote_count(); diff --git a/flutter/lib/models/state_model.dart b/flutter/lib/models/state_model.dart index d7784f652..a70d0f97d 100644 --- a/flutter/lib/models/state_model.dart +++ b/flutter/lib/models/state_model.dart @@ -64,7 +64,7 @@ class StateGlobal { setMinimized(bool v) => _isMinimized = v; - setFullscreen(bool v) { + setFullscreen(bool v, {bool procWnd = true}) { if (_fullscreen != v) { _fullscreen = v; _showTabBar.value = !_fullscreen; @@ -76,20 +76,22 @@ class StateGlobal { print( "fullscreen: $fullscreen, resizeEdgeSize: ${_resizeEdgeSize.value}"); _windowBorderWidth.value = fullscreen ? 0 : kWindowBorderWidth; - WindowController.fromWindowId(windowId) - .setFullscreen(_fullscreen) - .then((_) { - // https://github.com/leanflutter/window_manager/issues/131#issuecomment-1111587982 - if (Platform.isWindows && !v) { - Future.delayed(Duration.zero, () async { - final frame = - await WindowController.fromWindowId(windowId).getFrame(); - final newRect = Rect.fromLTWH( - frame.left, frame.top, frame.width + 1, frame.height + 1); - await WindowController.fromWindowId(windowId).setFrame(newRect); - }); - } - }); + if (procWnd) { + WindowController.fromWindowId(windowId) + .setFullscreen(_fullscreen) + .then((_) { + // https://github.com/leanflutter/window_manager/issues/131#issuecomment-1111587982 + if (Platform.isWindows && !v) { + Future.delayed(Duration.zero, () async { + final frame = + await WindowController.fromWindowId(windowId).getFrame(); + final newRect = Rect.fromLTWH( + frame.left, frame.top, frame.width + 1, frame.height + 1); + await WindowController.fromWindowId(windowId).setFrame(newRect); + }); + } + }); + } } } From 5293e3b2776167349dc9fa0b1d71938de3cb0a2e Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 7 Sep 2023 21:50:03 +0800 Subject: [PATCH 606/612] fix, macos, remote fullscreen mode Signed-off-by: dignow --- flutter/lib/common.dart | 6 +- .../lib/desktop/pages/remote_tab_page.dart | 9 +++ .../lib/desktop/widgets/tabbar_widget.dart | 57 +++++++++++++++---- flutter/lib/models/chat_model.dart | 1 - flutter/lib/models/state_model.dart | 2 + 5 files changed, 61 insertions(+), 14 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 8b20214df..33321c81a 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1441,6 +1441,8 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { late Offset position; late Size sz; late bool isMaximized; + bool isFullscreen = stateGlobal.fullscreen || + (Platform.isMacOS && stateGlobal.closeOnFullscreen); setFrameIfMaximized() { if (isMaximized) { final pos = bind.getLocalFlutterOption(k: kWindowPrefix + type.name); @@ -1486,7 +1488,7 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { } final pos = LastWindowPosition( - sz.width, sz.height, position.dx, position.dy, isMaximized, stateGlobal.fullscreen); + sz.width, sz.height, position.dx, position.dy, isMaximized, isFullscreen); debugPrint( "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}, isMaximized:${pos.isMaximized}, isFullscreen:${pos.isFullscreen}"); @@ -1495,7 +1497,7 @@ Future saveWindowPosition(WindowType type, {int? windowId}) async { if (type == WindowType.RemoteDesktop && windowId != null) { await _saveSessionWindowPosition( - type, windowId, isMaximized, stateGlobal.fullscreen, pos); + type, windowId, isMaximized, isFullscreen, pos); } } diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index 0490ce373..cb9438465 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:async'; import 'dart:io'; import 'dart:ui' as ui; @@ -109,6 +110,14 @@ class _ConnectionTabPageState extends State { final sessionId = args['session_id']; final tabWindowId = args['tab_window_id']; windowOnTop(windowId()); + if (tabController.length == 0) { + if (Platform.isMacOS && stateGlobal.closeOnFullscreen) { + Timer( + Duration(milliseconds: 300), + () async => await WindowController.fromWindowId(windowId()) + .setFullscreen(true)); + } + } ConnectionTypeState.init(id); _toolbarState.setShow( bind.mainGetUserDefaultOption(key: 'collapse_toolbar') != 'Y'); diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index b27e8fafe..2dcd757a1 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -482,6 +482,8 @@ class WindowActionPanel extends StatefulWidget { class WindowActionPanelState extends State with MultiWindowListener, WindowListener { final _saveFrameDebounce = Debouncer(delay: Duration(seconds: 1)); + Timer? _macOSCheckRestoreTimer; + int _macOSCheckRestoreCounter = 0; @override void initState() { @@ -514,6 +516,7 @@ class WindowActionPanelState extends State void dispose() { DesktopMultiWindow.removeListener(this); windowManager.removeListener(this); + _macOSCheckRestoreTimer?.cancel(); super.dispose(); } @@ -566,6 +569,33 @@ class WindowActionPanelState extends State @override void onWindowClose() async { + mainWindowClose() async => await windowManager.hide(); + notMainWindowClose(WindowController controller) async { + await controller.hide(); + await Future.wait([ + rustDeskWinManager + .call(WindowType.Main, kWindowEventHide, {"id": kWindowId!}), + widget.onClose?.call() ?? Future.microtask(() => null) + ]); + } + + macOSWindowClose( + Future Function() restoreFunc, + Future Function() checkFullscreen, + Future Function() closeFunc) async { + await restoreFunc(); + _macOSCheckRestoreCounter = 0; + _macOSCheckRestoreTimer = + Timer.periodic(Duration(milliseconds: 30), (timer) async { + _macOSCheckRestoreCounter++; + if (!await checkFullscreen() || _macOSCheckRestoreCounter >= 30) { + _macOSCheckRestoreTimer?.cancel(); + _macOSCheckRestoreTimer = null; + Timer(Duration(milliseconds: 500), () async => await closeFunc()); + } + }); + } + // hide window on close if (widget.isMainWindow) { if (rustDeskWinManager.getActiveWindows().contains(kMainWindowId)) { @@ -573,23 +603,28 @@ class WindowActionPanelState extends State } // macOS specific workaround, the window is not hiding when in fullscreen. if (Platform.isMacOS && await windowManager.isFullScreen()) { - await windowManager.setFullScreen(false); - await Future.delayed(Duration(seconds: 1)); + stateGlobal.closeOnFullscreen = true; + await macOSWindowClose( + () async => await windowManager.setFullScreen(false), + () async => await windowManager.isFullScreen(), + mainWindowClose); + } else { + stateGlobal.closeOnFullscreen = false; + await mainWindowClose(); } - await windowManager.hide(); } else { // it's safe to hide the subwindow final controller = WindowController.fromWindowId(kWindowId!); if (Platform.isMacOS && await controller.isFullScreen()) { - await controller.setFullscreen(false); - await Future.delayed(Duration(seconds: 1)); + stateGlobal.closeOnFullscreen = true; + await macOSWindowClose( + () async => await controller.setFullscreen(false), + () async => await controller.isFullScreen(), + () async => await notMainWindowClose(controller)); + } else { + stateGlobal.closeOnFullscreen = false; + await notMainWindowClose(controller); } - await controller.hide(); - await Future.wait([ - rustDeskWinManager - .call(WindowType.Main, kWindowEventHide, {"id": kWindowId!}), - widget.onClose?.call() ?? Future.microtask(() => null) - ]); } super.onWindowClose(); } diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 37766e54a..61d7682e1 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -10,7 +10,6 @@ import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/mobile/pages/home_page.dart'; import 'package:flutter_hbb/models/platform_model.dart'; import 'package:flutter_hbb/models/state_model.dart'; -import 'package:get/get_rx/src/rx_types/rx_types.dart'; import 'package:get/get.dart'; import 'package:uuid/uuid.dart'; import 'package:window_manager/window_manager.dart'; diff --git a/flutter/lib/models/state_model.dart b/flutter/lib/models/state_model.dart index a70d0f97d..e36bef924 100644 --- a/flutter/lib/models/state_model.dart +++ b/flutter/lib/models/state_model.dart @@ -20,6 +20,8 @@ class StateGlobal { final RxBool showRemoteToolBar = false.obs; final RxInt displaysCount = 0.obs; final svcStatus = SvcStatus.notReady.obs; + // Only used for macOS + bool closeOnFullscreen = false; // Use for desktop -> remote toolbar -> resolution final Map> _lastResolutionGroupValues = {}; From 296ebd0341bd6a16cd66feeab99e1b61ba7fa0f1 Mon Sep 17 00:00:00 2001 From: dignow Date: Thu, 7 Sep 2023 22:26:32 +0800 Subject: [PATCH 607/612] fix, macos, remote fullscreen state, debug Signed-off-by: dignow --- flutter/lib/desktop/pages/remote_tab_page.dart | 5 +---- flutter/lib/desktop/widgets/tabbar_widget.dart | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_tab_page.dart b/flutter/lib/desktop/pages/remote_tab_page.dart index cb9438465..063fe49d8 100644 --- a/flutter/lib/desktop/pages/remote_tab_page.dart +++ b/flutter/lib/desktop/pages/remote_tab_page.dart @@ -112,10 +112,7 @@ class _ConnectionTabPageState extends State { windowOnTop(windowId()); if (tabController.length == 0) { if (Platform.isMacOS && stateGlobal.closeOnFullscreen) { - Timer( - Duration(milliseconds: 300), - () async => await WindowController.fromWindowId(windowId()) - .setFullscreen(true)); + stateGlobal.setFullscreen(true); } } ConnectionTypeState.init(id); diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index 2dcd757a1..be089559b 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -591,7 +591,7 @@ class WindowActionPanelState extends State if (!await checkFullscreen() || _macOSCheckRestoreCounter >= 30) { _macOSCheckRestoreTimer?.cancel(); _macOSCheckRestoreTimer = null; - Timer(Duration(milliseconds: 500), () async => await closeFunc()); + Timer(Duration(milliseconds: 700), () async => await closeFunc()); } }); } From 91decea302b905cf6b725fc294c6771baa17735e Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 7 Sep 2023 21:29:49 +0800 Subject: [PATCH 608/612] windows silent install notification Signed-off-by: 21pages --- Cargo.lock | 65 ++- Cargo.toml | 1 + src/core_main.rs | 19 +- src/lang/ar.rs | 1090 +++++++++++++++++++++--------------------- src/lang/ca.rs | 2 + src/lang/cn.rs | 2 + src/lang/cs.rs | 2 + src/lang/da.rs | 2 + src/lang/de.rs | 2 + src/lang/el.rs | 2 + src/lang/eo.rs | 2 + src/lang/es.rs | 2 + src/lang/fa.rs | 2 + src/lang/fr.rs | 4 +- src/lang/hu.rs | 2 + src/lang/id.rs | 2 + src/lang/it.rs | 2 + src/lang/ja.rs | 2 + src/lang/ko.rs | 2 + src/lang/kz.rs | 2 + src/lang/lt.rs | 2 + src/lang/nl.rs | 2 + src/lang/pl.rs | 2 + src/lang/pt_PT.rs | 2 + src/lang/ptbr.rs | 2 + src/lang/ro.rs | 2 + src/lang/ru.rs | 2 + src/lang/sk.rs | 2 + src/lang/sl.rs | 2 + src/lang/sq.rs | 2 + src/lang/sr.rs | 2 + src/lang/sv.rs | 2 + src/lang/template.rs | 2 + src/lang/th.rs | 2 + src/lang/tr.rs | 4 +- src/lang/tw.rs | 2 + src/lang/ua.rs | 2 + src/lang/vn.rs | 2 + 38 files changed, 698 insertions(+), 549 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 99784e400..f11db81d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4422,7 +4422,7 @@ dependencies = [ "base64", "indexmap", "line-wrap", - "quick-xml", + "quick-xml 0.28.2", "serde 1.0.163", "time 0.3.21", ] @@ -4622,6 +4622,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "quick-xml" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea" +dependencies = [ + "memchr", +] + [[package]] name = "quick-xml" version = "0.28.2" @@ -5199,6 +5208,7 @@ dependencies = [ "sys-locale", "system_shutdown", "tao", + "tauri-winrt-notification", "tray-icon", "url", "users 0.11.0", @@ -5971,6 +5981,16 @@ dependencies = [ "serde_json 0.9.10", ] +[[package]] +name = "tauri-winrt-notification" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f5bff1d532fead7c43324a0fa33643b8621a47ce2944a633be4cb6c0240898f" +dependencies = [ + "quick-xml 0.23.1", + "windows 0.39.0", +] + [[package]] name = "tempfile" version = "3.5.0" @@ -6824,6 +6844,19 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] +[[package]] +name = "windows" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" +dependencies = [ + "windows_aarch64_msvc 0.39.0", + "windows_i686_gnu 0.39.0", + "windows_i686_msvc 0.39.0", + "windows_x86_64_gnu 0.39.0", + "windows_x86_64_msvc 0.39.0", +] + [[package]] name = "windows" version = "0.44.0" @@ -6973,6 +7006,12 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" +[[package]] +name = "windows_aarch64_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -6997,6 +7036,12 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" +[[package]] +name = "windows_i686_gnu" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -7021,6 +7066,12 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" +[[package]] +name = "windows_i686_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -7045,6 +7096,12 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" +[[package]] +name = "windows_x86_64_gnu" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -7081,6 +7138,12 @@ version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" +[[package]] +name = "windows_x86_64_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" diff --git a/Cargo.toml b/Cargo.toml index 2abc198cd..9e8224fc1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -97,6 +97,7 @@ virtual_display = { path = "libs/virtual_display", optional = true } impersonate_system = { git = "https://github.com/21pages/impersonate-system" } shared_memory = "0.12" shutdown_hooks = "0.1" +tauri-winrt-notification = "0.1.2" [target.'cfg(target_os = "macos")'.dependencies] objc = "0.2" diff --git a/src/core_main.rs b/src/core_main.rs index afdb05722..3fe1a1630 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -1,3 +1,5 @@ +#[cfg(not(any(target_os = "android", target_os = "ios")))] +use crate::client::translate; #[cfg(not(debug_assertions))] #[cfg(not(any(target_os = "android", target_os = "ios")))] use crate::platform::breakdown_callback; @@ -5,6 +7,8 @@ use hbb_common::log; #[cfg(not(debug_assertions))] #[cfg(not(any(target_os = "android", target_os = "ios")))] use hbb_common::platform::register_breakdown_handler; +#[cfg(windows)] +use tauri_winrt_notification::{Duration, Sound, Toast}; #[macro_export] macro_rules! my_println{ @@ -178,12 +182,23 @@ pub fn core_main() -> Option> { } return None; } else if args[0] == "--silent-install" { - hbb_common::allow_err!(platform::install_me( + let res = platform::install_me( "desktopicon startmenu driverCert", "".to_owned(), true, args.len() > 1, - )); + ); + let text = match res { + Ok(_) => translate("Installation Successful!".to_string()), + Err(_) => translate("Installation failed!".to_string()), + }; + Toast::new(Toast::POWERSHELL_APP_ID) + .title(&hbb_common::config::APP_NAME.read().unwrap()) + .text1(&text) + .sound(Some(Sound::Default)) + .duration(Duration::Short) + .show() + .ok(); return None; } else if args[0] == "--install-cert" { #[cfg(windows)] diff --git a/src/lang/ar.rs b/src/lang/ar.rs index 88137622a..0d9bdacd3 100644 --- a/src/lang/ar.rs +++ b/src/lang/ar.rs @@ -1,545 +1,547 @@ lazy_static::lazy_static! { - pub static ref T: std::collections::HashMap<&'static str, &'static str> = - [ - ("Status", "الحالة"), - ("Your Desktop", "سطح مكتبك"), - ("desk_tip", "يمكن الوصول لسطح مكتبك بهذا المعرف والرقم السري."), - ("Password", "كلمة المرور"), - ("Ready", "جاهز"), - ("Established", "تم الانشاء"), - ("connecting_status", "جاري الاتصال بشبكة RustDesk..."), - ("Enable Service", "تفعيل الخدمة"), - ("Start Service", "بدء الخدمة"), - ("Service is running", "الخدمة تعمل"), - ("Service is not running", "الخدمة لا تعمل"), - ("not_ready_status", "غير جاهز. الرجاء التأكد من الاتصال"), - ("Control Remote Desktop", "التحكم بسطح المكتب البعيد"), - ("Transfer File", "نقل ملف"), - ("Connect", "اتصال"), - ("Recent Sessions", "الجلسات الحديثة"), - ("Address Book", "كتاب العناوين"), - ("Confirmation", "التأكيد"), - ("TCP Tunneling", "نفق TCP"), - ("Remove", "ازالة"), - ("Refresh random password", "تحديث كلمة مرور عشوائية"), - ("Set your own password", "تعيين كلمة مرور خاصة بك"), - ("Enable Keyboard/Mouse", "تفعيل لوحة المفاتيح/الفأرة"), - ("Enable Clipboard", "تفعيل الحافظة"), - ("Enable File Transfer", "تفعيل نقل الملفات"), - ("Enable TCP Tunneling", "تفعيل نفق TCP"), - ("IP Whitelisting", "القائمة البيضاء للـ IP"), - ("ID/Relay Server", "معرف خادم الوسيط"), - ("Import Server Config", "استيراد إعدادات الخادم"), - ("Export Server Config", "تصدير إعدادات الخادم"), - ("Import server configuration successfully", "تم استيراد إعدادات الخادم بنجاح"), - ("Export server configuration successfully", "تم تصدير إعدادات الخادم بنجاح"), - ("Invalid server configuration", "إعدادات الخادم غير صحيحة"), - ("Clipboard is empty", "الحافظة فارغة"), - ("Stop service", "إيقاف الخدمة"), - ("Change ID", "تغيير المعرف"), - ("Your new ID", "معرفك الجديد"), - ("length %min% to %max%", "الطول من %min% الى %max%"), - ("starts with a letter", "يبدأ بحرف"), - ("allowed characters", "الحروف المسموح بها"), - ("id_change_tip", "فقط a-z, A-Z, 0-9 و _ مسموح بها. اول حرف يجب ان يكون a-z او A-Z. الطول بين 6 و 16."), - ("Website", "الموقع"), - ("About", "عن"), - ("Slogan_tip", "صنع بحب في هذا العالم الفوضوي!"), - ("Privacy Statement", "بيان الخصوصية"), - ("Mute", "كتم"), - ("Build Date", "تاريخ البناء"), - ("Version", "النسخة"), - ("Home", "المنزل"), - ("Audio Input", "مصدر الصوت"), - ("Enhancements", "التحسينات"), - ("Hardware Codec", "ترميز العتاد"), - ("Adaptive bitrate", "معدل بت متكيف"), - ("ID Server", "معرف الخادم"), - ("Relay Server", "خادم الوسيط"), - ("API Server", "خادم API"), - ("invalid_http", "يجب ان يبدأ بـ http:// او https://"), - ("Invalid IP", "عنوان IP غير صحيح"), - ("Invalid format", "صيغة غير صحيحة"), - ("server_not_support", "الخادم غير مدعوم"), - ("Not available", "غير متوفر"), - ("Too frequent", "متكرر جدا"), - ("Cancel", "إلغاء الأمر"), - ("Skip", "تجاوز"), - ("Close", "إغلاق"), - ("Retry", "إعادة المحاولة"), - ("OK", "موافق"), - ("Password Required", "كلمة المرور اجبارية"), - ("Please enter your password", "الرجاء كتابة كلمة المرور"), - ("Remember password", "تذكر كلمة المرور"), - ("Wrong Password", "كلمة مرور خاطئة"), - ("Do you want to enter again?", "هل تريد الادخال مرة اخرى؟"), - ("Connection Error", "خطأ غي الاتصال"), - ("Error", "خطأ"), - ("Reset by the peer", "تمت اعادة التعيين بواسطة القرين"), - ("Connecting...", "جاري الاتصال..."), - ("Connection in progress. Please wait.", "جاري الاتصال, الرجاء الانتظار..."), - ("Please try 1 minute later", "الرجاء المحاولة بعد دقيقة واحدة"), - ("Login Error", "خطأ في تسجيل الدخول"), - ("Successful", "نجاح"), - ("Connected, waiting for image...", "متصل, جاري انتظار الصورة..."), - ("Name", "الاسم"), - ("Type", "النوع"), - ("Modified", "آخر تعديل"), - ("Size", "الحجم"), - ("Show Hidden Files", "عرض الملفات المخفية"), - ("Receive", "استقبال"), - ("Send", "ارسال"), - ("Refresh File", "تحديث الملف"), - ("Local", "المحلي"), - ("Remote", "البعيد"), - ("Remote Computer", "الحاسب البعيد"), - ("Local Computer", "الحاسب المحلي"), - ("Confirm Delete", "تأكيد الحذف"), - ("Delete", "حذف"), - ("Properties", "الخصائص"), - ("Multi Select", "اختيار متعدد"), - ("Select All", "تحديد الكل"), - ("Unselect All", "الغاء تحديد الكل"), - ("Empty Directory", "مجلد فارغ"), - ("Not an empty directory", "مجلد غير فارغ"), - ("Are you sure you want to delete this file?", "هل انت متأكد من أنك تريد حذف هذا الملف؟"), - ("Are you sure you want to delete this empty directory?", "هل انت متأكد من أنك تريد حذف هذا المجلد؟"), - ("Are you sure you want to delete the file of this directory?", "هل انت متأكد من أنك تريد حذف ملفات هذا المجلد؟"), - ("Do this for all conflicts", "فعل هذا لكل التعارضات"), - ("This is irreversible!", "لا يمكن التراجع عن هذا!"), - ("Deleting", "جاري الحذف"), - ("files", "ملفات"), - ("Waiting", "انتظار"), - ("Finished", "انتهى"), - ("Speed", "السرعة"), - ("Custom Image Quality", "جودة صورة مخصصة"), - ("Privacy mode", "وضع الخصوصية"), - ("Block user input", "حجم ادخال المستخدم"), - ("Unblock user input", "الغاء حجب ادخال المستخدم"), - ("Adjust Window", "ضبط النافذة"), - ("Original", "الاصلي"), - ("Shrink", "تقليص"), - ("Stretch", "تمديد"), - ("Scrollbar", "شريط التمرير"), - ("ScrollAuto", "التمرير التلقائي"), - ("Good image quality", "دقة صورة جيدة"), - ("Balanced", "متوازن"), - ("Optimize reaction time", "تحسين وقت رد الفعل"), - ("Custom", "مخصص"), - ("Show remote cursor", "عرض مؤشر الجهاز البعيد"), - ("Show quality monitor", "عرض مراقب الجودة"), - ("Disable clipboard", "تعطيل الحافظة"), - ("Lock after session end", "القفل بعد نهاية هذه الجلسة"), - ("Insert", "ادخال"), - ("Insert Lock", "قفل الادخال"), - ("Refresh", "تحديث"), - ("ID does not exist", "المعرف غير موجود"), - ("Failed to connect to rendezvous server", "فشل الاتصال بخادم rendezvous"), - ("Please try later", "الرجاء المحاولة لاحقا"), - ("Remote desktop is offline", "سطح المكتب البعيد غير متصل"), - ("Key mismatch", "المفتاح غير متطابق"), - ("Timeout", "نفذ الوقت"), - ("Failed to connect to relay server", "فشل الاتصال بالخادم الوسيط"), - ("Failed to connect via rendezvous server", "فشل الاتصال عير خادم rendezvous"), - ("Failed to connect via relay server", "فشل الاتصال عبر الخادم الوسيط"), - ("Failed to make direct connection to remote desktop", "فشل في اجراء اتصال مباشر لسطح المكتب البعيد"), - ("Set Password", "ضبط كلمة المرور"), - ("OS Password", "كلمة مرور نظام التشغيل"), - ("install_tip", "بسبب صلاحيات تحكم حساب المستخدم. RustDesk قد لا يعمل بشكل صحيح في جهة البعيد في بعض الحالات. لتفادي ذلك. الرجاء الضغط على الزر ادناه لتثبيت RustDesk في جهازك."), - ("Click to upgrade", "اضغط للارتقاء"), - ("Click to download", "اضغط للتنزيل"), - ("Click to update", "ضغط للتحديث"), - ("Configure", "تهيئة"), - ("config_acc", "لتتمكن من التحكم بسطح مكتبك البعيد, تحتاج الى منح RustDesk اذونات \"امكانية الوصول\"."), - ("config_screen", "لتتمكن من الوصول الى سطح مكتبك البعيد, تحتاج الى منح RustDesk اذونات \"تسجيل الشاشة\"."), - ("Installing ...", "جاري التثبيت..."), - ("Install", "تثبيت"), - ("Installation", "التثبيت"), - ("Installation Path", "مسار التثبيت"), - ("Create start menu shortcuts", "انشاء اختصارات قائمة ابداء"), - ("Create desktop icon", "انشاء اختصار سطح المكتب"), - ("agreement_tip", "بمجرد البدء بالتثبيت, فانت قد قبلت اتفاقية الترخيص."), - ("Accept and Install", "الموافقة والتثبيت"), - ("End-user license agreement", "اتفاقية ترخيص المستخدم النهائي"), - ("Generating ...", "جاري الانشاء..."), - ("Your installation is lower version.", "انت تحاول تثبيت نسخة قديمة."), - ("not_close_tcp_tip", "لا تغلق هذه النافذة اثناء استخدامك للنفق"), - ("Listening ...", "جاري الاستماع..."), - ("Remote Host", "المستضيف البعيد"), - ("Remote Port", "منفذ المستضيف البعيد"), - ("Action", "فعل"), - ("Add", "اضافة"), - ("Local Port", "المنفذ المحلي"), - ("Local Address", "العنوان المحلي"), - ("Change Local Port", "تغيير المنفذ المحلي"), - ("setup_server_tip", "لاتصال اسرع, الرجاء اعداد خادم خاص بك"), - ("Too short, at least 6 characters.", "قصير جدا. يجب ان يكون على الاقل 6 خانات"), - ("The confirmation is not identical.", "التأكيد غير متطابق"), - ("Permissions", "الاذونات"), - ("Accept", "قبول"), - ("Dismiss", "صرف"), - ("Disconnect", "قطع الاتصال"), - ("Allow using keyboard and mouse", "السماح باستخدام لوحة المفاتيح والفأرة"), - ("Allow using clipboard", "السماح باستخدام الحافظة"), - ("Allow hearing sound", "السماح بسماع الصوت"), - ("Allow file copy and paste", "السماح بالنسخ واللصق"), - ("Connected", "متصل"), - ("Direct and encrypted connection", "اتصال مباشر مشفر"), - ("Relayed and encrypted connection", "اتصال غير مباشر مشفر"), - ("Direct and unencrypted connection", "اتصال مباشر غير مشفر"), - ("Relayed and unencrypted connection", "اتصال غير مباشر غير مشفر"), - ("Enter Remote ID", "ادخل المعرف البعيد"), - ("Enter your password", "ادخل كلمة المرور"), - ("Logging in...", "جاري تسجيل الدخول..."), - ("Enable RDP session sharing", "تفعيل مشاركة الجلسة باستخدام RDP"), - ("Auto Login", "تسجيل دخول تلقائي"), - ("Enable Direct IP Access", "تفعيل الوصول المباشر لعنوان IP"), - ("Rename", "اعادة تسمية"), - ("Space", "مساحة"), - ("Create Desktop Shortcut", "انشاء اختصار سطح مكتب"), - ("Change Path", "تغيير المسار"), - ("Create Folder", "انشاء مجلد"), - ("Please enter the folder name", "الرجاء ادخال اسم المجلد"), - ("Fix it", "اصلحه"), - ("Warning", "تحذير"), - ("Login screen using Wayland is not supported", "تسجيل الدخول باستخدام Wayland غير مدعوم"), - ("Reboot required", "يجب اعادة التشغيل"), - ("Unsupported display server", "خادم العرض غير مدعوم"), - ("x11 expected", "x11 متوقع"), - ("Port", "المنفذ"), - ("Settings", "الاعدادات"), - ("Username", "اسم المستخدم"), - ("Invalid port", "منفذ خاطئ"), - ("Closed manually by the peer", "اغلاق يدويا بواسطة القرين"), - ("Enable remote configuration modification", "تفعيل تعديل اعدادات البعيد"), - ("Run without install", "تشغيل بدون تثبيت"), - ("Connect via relay", "الاتصال عبر وسيط"), - ("Always connect via relay", "الاتصال باستخدام وسيط دائما"), - ("whitelist_tip", "فقط قائمة الـ IP البيضاء تستطيع الوصول لي"), - ("Login", "تسجيل الدخول"), - ("Verify", "تأكيد"), - ("Remember me", "تذكرني"), - ("Trust this device", "الوثوق بهذا الجهاز"), - ("Verification code", "رمز التحقق"), - ("verification_tip", "رمز التحقق ارسل الى بريدك الالكتروني المسجل. ادخل رمز التحقق للاستمرار بتسجيل الدخول."), - ("Logout", "تسجيل الخروج"), - ("Tags", "العلامات"), - ("Search ID", "البحث المعرف"), - ("whitelist_sep", "مفصولة بفاصلة او فاصلة منقوطة او سطر جديد"), - ("Add ID", "اضافة معرف"), - ("Add Tag", "اضافة علامة"), - ("Unselect all tags", "عدم تحديد كل العلامات"), - ("Network error", "خطأ شبكة"), - ("Username missed", "اسم المستخدم مفقود"), - ("Password missed", "كلمة المرور مفقودة"), - ("Wrong credentials", "اسم مستخدم او كلمة مرور خاطئة"), - ("The verification code is incorrect or has expired", "رمز التحقق غير صحيح او منتهي"), - ("Edit Tag", "تحرير علامة"), - ("Unremember Password", "عدم تذكر كلمة المرور"), - ("Favorites", "المفضلة"), - ("Add to Favorites", "اضافة للمفضلة"), - ("Remove from Favorites", "ازالة من المفضلة"), - ("Empty", "فارغ"), - ("Invalid folder name", "اسم المجلد غير صحيح"), - ("Socks5 Proxy", "وكيل Socks5"), - ("Hostname", "اسم المستضيف"), - ("Discovered", "المكتشفة"), - ("install_daemon_tip", "للبدء مع بدء تشغيل النظام. تحتاج الى تثبيت خدمة النظام."), - ("Remote ID", "المعرف البعيد"), - ("Paste", "لصق"), - ("Paste here?", "لصق هنا؟"), - ("Are you sure to close the connection?", "هل انت متاكد من انك تريد اغلاق هذا الاتصال؟"), - ("Download new version", "تنويل نسخة جديدة"), - ("Touch mode", "وضع اللمس"), - ("Mouse mode", "وضع الفأرة"), - ("One-Finger Tap", "لم اصبع واحد"), - ("Left Mouse", "الفأرة اليسرى"), - ("One-Long Tap", "لمسة واحدة طويلة"), - ("Two-Finger Tap", "لمس اصبعين"), - ("Right Mouse", "الفأرة اليمنى"), - ("One-Finger Move", "نقل الاصبع الواحد"), - ("Double Tap & Move", "لمستان ونقل"), - ("Mouse Drag", "سحب الفأرة"), - ("Three-Finger vertically", "ثلاث اصابع افقيا"), - ("Mouse Wheel", "عجلة الفارة"), - ("Two-Finger Move", "نقل الاصبعين"), - ("Canvas Move", ""), - ("Pinch to Zoom", "قرصة للتكبير"), - ("Canvas Zoom", ""), - ("Reset canvas", ""), - ("No permission of file transfer", "لا يوجد اذن نقل الملف"), - ("Note", "ملاحظة"), - ("Connection", "الاتصال"), - ("Share Screen", "مشاركة الشاشة"), - ("Chat", "محادثة"), - ("Total", "الاجمالي"), - ("items", "عناصر"), - ("Selected", "محدد"), - ("Screen Capture", "لقط الشاشة"), - ("Input Control", "تحكم الادخال"), - ("Audio Capture", "لقط الصوت"), - ("File Connection", "اتصال الملف"), - ("Screen Connection", "اتصال الشاشة"), - ("Do you accept?", "هل تقبل؟"), - ("Open System Setting", "فتح اعدادات النظام"), - ("How to get Android input permission?", "كيف تحصل على اذن الادخال في اندرويد؟"), - ("android_input_permission_tip1", "لكي يتمكن جهاز بعيد من التحكم بجهازك الـ Android عن طريق الفارة أو اللمس، يلزمك السماح لـ RustDesk باستخدام خدمة \"إمكانية الوصول\"."), - ("android_input_permission_tip2", "يرجى الانتقال إلى صفحة إعدادات النظام التالية، والعثور على [الخدمات المثبتة]، وتشغيل خدمة [RustDesk Input]."), - ("android_new_connection_tip", "تم استلام طلب تحكم جديد، حيث يريد التحكم بجهازك الحالي."), - ("android_service_will_start_tip", "تشغيل \"لقط الشاشة\" سيبدأ الخدمة تلقائيا، حيث سيسمح للاجهزة الاخرى بطلب الاتصال مع جهازك."), - ("android_stop_service_tip", "اغلاق الخدمة سيغلق جميع الاتصالات القائمة."), - ("android_version_audio_tip", "نسخة اندرويد الحالية لا تدعم خدمة لقط الصوت، الرجاء الترقية الى نسخة 10 او أحدث."), - ("android_start_service_tip", "اضغط تشغيل الخدمة او فعل صلاحية لقط الشاشة لبدء خدمة مشاركة الشاشة."), - ("android_permission_may_not_change_tip", "الاذونات الاتصالات القائمة قد لا تتغير مباشرة الا بعد اعادة الاتصال."), - ("Account", "الحساب"), - ("Overwrite", "استبدال"), - ("This file exists, skip or overwrite this file?", "الملف موجود, هل تريد التجاوز او الاستبدال؟"), - ("Quit", "خروج"), - ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), - ("Help", "مساعدة"), - ("Failed", "فشل"), - ("Succeeded", "نجاح"), - ("Someone turns on privacy mode, exit", "شخص ما فعل وضع الخصوصية, خروج"), - ("Unsupported", "غير مدعوم"), - ("Peer denied", "القرين رفض"), - ("Please install plugins", "الرجاء تثبيت الاضافات"), - ("Peer exit", "خروج القرين"), - ("Failed to turn off", "فشل ايقاف التشغيل"), - ("Turned off", "مطفئ"), - ("In privacy mode", "في وضع الخصوصية"), - ("Out privacy mode", "الخروج من وضع الخصوصية"), - ("Language", "اللغة"), - ("Keep RustDesk background service", "ابق خدمة RustDesk تعمل في الخلفية"), - ("Ignore Battery Optimizations", "تجاهل تحسينات البطارية"), - ("android_open_battery_optimizations_tip", "اذا اردت تعطيل هذه الميزة, الرجاء الذهاب الى صفحة اعدادات تطبيق RustDesk, ابحث عن البطارية, الغ تحديد غير مقيد"), - ("Start on Boot", "البدء عند تشغيل النظام"), - ("Start the screen sharing service on boot, requires special permissions", "تشغيل خدمة مشاركة الشاشة عند بدء تشغيل النظام, يحتاج الى اذونات خاصة"), - ("Connection not allowed", "الاتصال غير مسموح"), - ("Legacy mode", "الوضع التقليدي"), - ("Map mode", "وضع الخريطة"), - ("Translate mode", "وضع الترجمة"), - ("Use permanent password", "استخدام كلمة مرور دائمة"), - ("Use both passwords", "استخدام طريقتي كلمة المرور"), - ("Set permanent password", "تعيين كلمة مرور دائمة"), - ("Enable Remote Restart", "تفعيل اعداة تشغيل البعيد"), - ("Allow remote restart", "السماح باعادة تشغيل البعيد"), - ("Restart Remote Device", "اعادة تشغيل الجهاز البعيد"), - ("Are you sure you want to restart", "هل انت متاكد من انك تريد اعادة التشغيل؟"), - ("Restarting Remote Device", "جاري اعادة تشغيل البعيد"), - ("remote_restarting_tip", "الجهاز البعيد يعيد التشغيل. الرجاء اغلاق هذه الرسالة واعادة الاتصال باستخدام كلمة المرور الدائمة بعد فترة بسيطة."), - ("Copied", "منسوخ"), - ("Exit Fullscreen", "الخروج من ملئ الشاشة"), - ("Fullscreen", "ملئ الشاشة"), - ("Mobile Actions", "اجراءات الهاتف"), - ("Select Monitor", "اختر شاشة"), - ("Control Actions", "اجراءات التحكم"), - ("Display Settings", "اعدادات العرض"), - ("Ratio", "النسبة"), - ("Image Quality", "جودة الصورة"), - ("Scroll Style", "شكل التمرير"), - ("Show Toolbar", "عرض شريط الادوات"), - ("Hide Toolbar", "اخفاء شريط الادوات"), - ("Direct Connection", "اتصال مباشر"), - ("Relay Connection", "اتصال الوسيط"), - ("Secure Connection", "اتصال آمن"), - ("Insecure Connection", "اتصال غير آمن"), - ("Scale original", "المقياس الأصلي"), - ("Scale adaptive", "مقياس التكيف"), - ("General", "عام"), - ("Security", "الأمان"), - ("Theme", "السمة"), - ("Dark Theme", "سمة غامقة"), - ("Light Theme", "سمة فاتحة"), - ("Dark", "غامق"), - ("Light", "فاتح"), - ("Follow System", "نفس نظام التشغيل"), - ("Enable hardware codec", "تفعيل ترميز العتاد"), - ("Unlock Security Settings", "فتح اعدادات الامان"), - ("Enable Audio", "تفعيل الصوت"), - ("Unlock Network Settings", "فتح اعدادات الشبكة"), - ("Server", "الخادم"), - ("Direct IP Access", "وصول مباشر للـ IP"), - ("Proxy", "الوكيل"), - ("Apply", "تطبيق"), - ("Disconnect all devices?", "قطع اتصال كل الاجهزة؟"), - ("Clear", "مسح"), - ("Audio Input Device", "جهاز ادخال الصوت"), - ("Use IP Whitelisting", "استخدام قائمة الـ IP البيضاء"), - ("Network", "الشبكة"), - ("Enable RDP", "تفعيل RDP"), - ("Pin Toolbar", "تثبيت شريط الادوات"), - ("Unpin Toolbar", "الغاء تثبيت شريط الادوات"), - ("Recording", "التسجيل"), - ("Directory", "المسار"), - ("Automatically record incoming sessions", "تسجيل الجلسات القادمة تلقائيا"), - ("Change", "تغيير"), - ("Start session recording", "بدء تسجيل الجلسة"), - ("Stop session recording", "ايقاف تسجيل الجلسة"), - ("Enable Recording Session", "تفعيل تسجيل الجلسة"), - ("Allow recording session", "السماح بتسجيل الجلسة"), - ("Enable LAN Discovery", "تفعيل اكتشاف الشبكة المحلية"), - ("Deny LAN Discovery", "رفض اكتشاف الشبكة المحلية"), - ("Write a message", "اكتب رسالة"), - ("Prompt", ""), - ("Please wait for confirmation of UAC...", "الرجاء انتظار تاكيد تحكم حساب المستخدم..."), - ("elevated_foreground_window_tip", "النافذة الحالية لسطح المكتب البعيد تحتاج صلاحية اعلى لتعمل, لذلك لن تستطيع استخدام الفارة ولوحة المفاتيح مؤقتا. تستطيع انت تطلب من المستخدم البعيد تصغير النافذة الحالية, او ضفط زر الارتقاء في نافذة ادارة الاتصال. لتفادي هذة المشكلة من المستحسن تثبيت البرنامج في الجهاز البعيد."), - ("Disconnected", "مفصول"), - ("Other", "اخرى"), - ("Confirm before closing multiple tabs", "التاكيد قبل اغلاق السنة عديدة"), - ("Keyboard Settings", "اعدادات لوحة المفاتيح"), - ("Full Access", "وصول كامل"), - ("Screen Share", "مشاركة الشاشة"), - ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland يتطلب نسخة ابونتو 21.04 او اعلى."), - ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland يتطلب نسخة اعلى من توزيعة لينكس. الرجاء تجربة سطح مكتب X11 او غير نظام تشغيلك."), - ("JumpLink", "رابط القفز"), - ("Please Select the screen to be shared(Operate on the peer side).", "الرجاء اختيار شاشة لمشاركتها (تعمل على جانب القرين)."), - ("Show RustDesk", "عرض RustDesk"), - ("This PC", "هذا الحاسب"), - ("or", "او"), - ("Continue with", "متابعة مع"), - ("Elevate", "ارتقاء"), - ("Zoom cursor", "تكبير المؤشر"), - ("Accept sessions via password", "قبول الجلسات عبر كلمة المرور"), - ("Accept sessions via click", "قبول الجلسات عبر الضغط"), - ("Accept sessions via both", "قبول الجلسات عبر الاثنين"), - ("Please wait for the remote side to accept your session request...", "الرجاء الانتظار حتى يقبل الطرف البعيد طلب الجلسة..."), - ("One-time Password", "كلمة مرور لمرة واحدة"), - ("Use one-time password", "استخدام كلمة مرور لمرة واحدة"), - ("One-time password length", "طول كلمة مرور لمرة واحدة"), - ("Request access to your device", "طلب الوصول إلى جهازك"), - ("Hide connection management window", "اخفاء نافذة ادارة الاتصال"), - ("hide_cm_tip", "السماح بالاخفاء فقط في حالة قبول الجلسات عبر كلمة المرور واستخدام كلمة المرور الدائمة"), - ("wayland_experiment_tip", "دعم Wayland لازال في المرحلة التجريبية. الرجاء استخدام X11 اذا اردت وصول كامل."), - ("Right click to select tabs", "الضغط بالزر الايمن لتحديد الالسنة"), - ("Skipped", "متجاوز"), - ("Add to Address Book", "اضافة الى كتاب العناوين"), - ("Group", "مجموعة"), - ("Search", "بحث"), - ("Closed manually by web console", "اغلق يدويا عبر طرفية الويب"), - ("Local keyboard type", "توع لوحة المفاتيح المحلية"), - ("Select local keyboard type", "اختر نوع لوحة المفاتيح الملحية"), - ("software_render_tip", "اذا كنت تستخدم بطاقة رسوميات Nvidia تحت لينكس والشاشة البعيد تغلق مباشرة بعد الاتصال, قم بالتبديل الى تعريفات Nouveau مفتوحة المصدر واختيار الترميز البرمجي قد يساعد. اعادة تشغيل البرناج مطلوبة."), - ("Always use software rendering", "استخدام الترميز البرمجي دائما"), - ("config_input", "لتتمكن من التحكم بسطح المكتب البعيد. يجب من RustDesk اذونات \"مراقبة المدخلات\"."), - ("config_microphone", "لتتمكن من التحدث. يجب منح RustDesk اذونات \"تسجيل الصوت\"."), - ("request_elevation_tip", "اطلب الارتقاء في حالة وجود شخص في الطرف الاخر."), - ("Wait", "انتظر"), - ("Elevation Error", "خطأ الارتقاء"), - ("Ask the remote user for authentication", "اسأل المستخدم البعيد التوثيق"), - ("Choose this if the remote account is administrator", "اختر اذا كان الحساب البعيد مدير للنظام"), - ("Transmit the username and password of administrator", "انقل اسم المستخدم وكلمة مرور مدير النظام"), - ("still_click_uac_tip", "لازال يحتاج المستخدم البعيد للضغط على موافق في نافذة تحكم حساب المستخدم في RustDesk الذي يعمل."), - ("Request Elevation", "طلب ارتقاء"), - ("wait_accept_uac_tip", "الرجاء انتظار المستخدم البعيد حتى يوافق على طلب تحكم حساب المستخدم."), - ("Elevate successfully", "الارتقاء بنجاح"), - ("uppercase", "حرف كبير"), - ("lowercase", "حرف صغير"), - ("digit", "رقم"), - ("special character", "رمز"), - ("length>=8", "الطول 8 على الاقل"), - ("Weak", "ضعيف"), - ("Medium", "متوسط"), - ("Strong", "قوي"), - ("Switch Sides", "تبديل الاماكن"), - ("Please confirm if you want to share your desktop?", "الرجاء التاكيد على انك تريد مشاركة سطح مكتبك؟"), - ("Display", "العرض"), - ("Default View Style", "شكل العرض الافتراضي"), - ("Default Scroll Style", "شكل التمرير الافتراضي"), - ("Default Image Quality", "دقة الصورة الافتراضية"), - ("Default Codec", "الترميز الاقتراضي"), - ("Bitrate", "معدل البت"), - ("FPS", "مشهد في الثانية"), - ("Auto", "تلقائي"), - ("Other Default Options", "الخيارات الافتراضية الاخرى"), - ("Voice call", "مكالمة صوتية"), - ("Text chat", "دردشة نصية"), - ("Stop voice call", "ايقاف المكالمة الصوتية"), - ("relay_hint_tip", "قد لا يكون ممكن الاتصال مباشرة. يمكنك محاولة الاتصال عبر وسيط. ايضا اذا اردت استخدام وسيط لمحاولتك الاولى اضف لاحقة \"/r\" الى المعرف او اختر \"الاتصال باستخدام وسيط دائما\" في بطاقة الجلسات الحديثة ان وجدت."), - ("Reconnect", "اعادة الاتصال"), - ("Codec", "الترميز"), - ("Resolution", "الدقة"), - ("No transfers in progress", "لا توجد عمليات نقل حاليا"), - ("Set one-time password length", "تعيين طول كلمة مرور المرة الواحدة"), - ("install_cert_tip", "تثبيت شهادة RustDesk"), - ("confirm_install_cert_tip", "هذه شهادة RustDesk الاختبارية, يمكنك الوثوق بها. هذه الشهادة ستستخدم للوثوق وتثبيت تعاريف RustDesk عند الحاجة."), - ("RDP Settings", "اعدادات RDP"), - ("Sort by", "ترتيب حسب"), - ("New Connection", "اتصال جديد"), - ("Restore", "استعادة"), - ("Minimize", "تصغير"), - ("Maximize", "تكبير"), - ("Your Device", "جهازك"), - ("empty_recent_tip", "للاسف. لا توجد جلسات حديثة\nحان الوقت للتخطيط لواحدة جديدة."), - ("empty_favorite_tip", "لا يوجد اقران مفضلين حتى الان؟\nحسنا لنبحث عن شخص للاتصال معه ومن ثم اضافته للمفضلة."), - ("empty_lan_tip", "اه لا, يبدو انك لم تكتشف اي قرين بعد."), - ("empty_address_book_tip", "يا عزيزي, يبدو انه لايوجد حاليا اي اقران في كتاب العناوين."), - ("eg: admin", "مثلا: admin"), - ("Empty Username", "اسم مستخدم فارغ"), - ("Empty Password", "كلمة مرور فارغة"), - ("Me", "انا"), - ("identical_file_tip", "هذا الملف مطابق لملف موجود عن القرين."), - ("show_monitors_tip", "عرض الشاشات في شريط الادوات"), - ("View Mode", "وضع العرض"), - ("login_linux_tip", "تحتاج الى تسجيل الدخول حساب لينكس البعيد وتفعيل جلسة سطح مكتب X"), - ("verify_rustdesk_password_tip", "تحقق من كلمة مرور RustDesk"), - ("enter_rustdesk_passwd_tip", "ادخل كلمة مرور RustDesk"), - ("remember_rustdesk_passwd_tip", "تذكر كلمة مرور RustDesk"), - ("remember_account_tip", "تذكر هذا الحساب"), - ("os_account_desk_tip", "هذا الحساب مستخدم لتسجيل الدخول الى سطح المكتب البعيد وتفعيل الجلسة"), - ("OS Account", "حساب نظام التشغيل"), - ("another_user_login_title_tip", "مستخدم اخر مسجل دخول حاليا"), - ("another_user_login_text_tip", "قطع الاتصال"), - ("xorg_not_found_title_tip", "Xorg غير موجود"), - ("xorg_not_found_text_tip", "الرجاء تثبيت Xorg"), - ("no_desktop_title_tip", "لا يتوفر سطح مكتب"), - ("no_desktop_text_tip", "الرجاء تثبيت سطح مكتب GNOME"), - ("No need to elevate", "لا حاجة للارتقاء"), - ("System Sound", "صوت النظام"), - ("Default", "الافتراضي"), - ("New RDP", "RDP جديد"), - ("Fingerprint", "البصمة"), - ("Copy Fingerprint", "نسخ البصمة"), - ("no fingerprints", "لا توجد بصمات اصابع"), - ("Select a peer", "اختر قرين"), - ("Select peers", "اختر الاقران"), - ("Plugins", "الاضافات"), - ("Uninstall", "الغاء التثبيت"), - ("Update", "تحديث"), - ("Enable", "تفعيل"), - ("Disable", "تعطيل"), - ("Options", "الخيارات"), - ("resolution_original_tip", "الدقة الأصلية"), - ("resolution_fit_local_tip", "تناسب الدقة المحلية"), - ("resolution_custom_tip", "دقة مخصصة"), - ("Collapse toolbar", "طي شريط الادوات"), - ("Accept and Elevate", "قبول وارتقاء"), - ("accept_and_elevate_btn_tooltip", "قبول الاتصال وارتقاء صلاحيات التحكم بصلاحيات المستخدم."), - ("clipboard_wait_response_timeout_tip", "انتهى وقت الانتظار لنسخ الرد."), - ("Incoming connection", "اتصال قادم"), - ("Outgoing connection", "اتصال مغادر"), - ("Exit", "خروج"), - ("Open", "فتح"), - ("logout_tip", "هل انت متاكد من انك تريد تسجيل الخروج"), - ("Service", "الخدمة"), - ("Start", "تشغيل"), - ("Stop", "ايقاف"), - ("exceed_max_devices", "لقد وصلت الحد الأقصى لعدد الاجهزة التي يمكن دارتها."), - ("Sync with recent sessions", "المزامنة مع الجلسات الحديثة"), - ("Sort tags", "ترتيب العلامات"), - ("Open connection in new tab", "فتح اتصال في لسان جديد"), - ("Move tab to new window", "نقل اللسان الى نافذة جديدة"), - ("Can not be empty", "لا يمكن ان يكون فارغ"), - ("Already exists", "موجود مسبقا"), - ("Change Password", "تغيير كلمة المرور"), - ("Refresh Password", "تحديث كلمة المرور"), - ("ID", "المعرف"), - ("Grid View", "عرض شبكي"), - ("List View", "رعض قائمة"), - ("Select", "اختيار"), - ("Toggle Tags", "تفعيل/تعطيل العلامات"), - ("pull_ab_failed_tip", "فشل تحديث كتاب العناوين"), - ("push_ab_failed_tip", "فشل مزامنة كتاب العناوين مع الخادم"), - ("synced_peer_readded_tip", "الاجهزة الموجودة في الجلسات الحديثة سيتم مزامنتها مع كتاب العناوين"), - ].iter().cloned().collect(); - } - \ No newline at end of file +pub static ref T: std::collections::HashMap<&'static str, &'static str> = + [ + ("Status", "الحالة"), + ("Your Desktop", "سطح مكتبك"), + ("desk_tip", "يمكن الوصول لسطح مكتبك بهذا المعرف والرقم السري."), + ("Password", "كلمة المرور"), + ("Ready", "جاهز"), + ("Established", "تم الانشاء"), + ("connecting_status", "جاري الاتصال بشبكة RustDesk..."), + ("Enable Service", "تفعيل الخدمة"), + ("Start Service", "بدء الخدمة"), + ("Service is running", "الخدمة تعمل"), + ("Service is not running", "الخدمة لا تعمل"), + ("not_ready_status", "غير جاهز. الرجاء التأكد من الاتصال"), + ("Control Remote Desktop", "التحكم بسطح المكتب البعيد"), + ("Transfer File", "نقل ملف"), + ("Connect", "اتصال"), + ("Recent Sessions", "الجلسات الحديثة"), + ("Address Book", "كتاب العناوين"), + ("Confirmation", "التأكيد"), + ("TCP Tunneling", "نفق TCP"), + ("Remove", "ازالة"), + ("Refresh random password", "تحديث كلمة مرور عشوائية"), + ("Set your own password", "تعيين كلمة مرور خاصة بك"), + ("Enable Keyboard/Mouse", "تفعيل لوحة المفاتيح/الفأرة"), + ("Enable Clipboard", "تفعيل الحافظة"), + ("Enable File Transfer", "تفعيل نقل الملفات"), + ("Enable TCP Tunneling", "تفعيل نفق TCP"), + ("IP Whitelisting", "القائمة البيضاء للـ IP"), + ("ID/Relay Server", "معرف خادم الوسيط"), + ("Import Server Config", "استيراد إعدادات الخادم"), + ("Export Server Config", "تصدير إعدادات الخادم"), + ("Import server configuration successfully", "تم استيراد إعدادات الخادم بنجاح"), + ("Export server configuration successfully", "تم تصدير إعدادات الخادم بنجاح"), + ("Invalid server configuration", "إعدادات الخادم غير صحيحة"), + ("Clipboard is empty", "الحافظة فارغة"), + ("Stop service", "إيقاف الخدمة"), + ("Change ID", "تغيير المعرف"), + ("Your new ID", "معرفك الجديد"), + ("length %min% to %max%", "الطول من %min% الى %max%"), + ("starts with a letter", "يبدأ بحرف"), + ("allowed characters", "الحروف المسموح بها"), + ("id_change_tip", "فقط a-z, A-Z, 0-9 و _ مسموح بها. اول حرف يجب ان يكون a-z او A-Z. الطول بين 6 و 16."), + ("Website", "الموقع"), + ("About", "عن"), + ("Slogan_tip", "صنع بحب في هذا العالم الفوضوي!"), + ("Privacy Statement", "بيان الخصوصية"), + ("Mute", "كتم"), + ("Build Date", "تاريخ البناء"), + ("Version", "النسخة"), + ("Home", "المنزل"), + ("Audio Input", "مصدر الصوت"), + ("Enhancements", "التحسينات"), + ("Hardware Codec", "ترميز العتاد"), + ("Adaptive bitrate", "معدل بت متكيف"), + ("ID Server", "معرف الخادم"), + ("Relay Server", "خادم الوسيط"), + ("API Server", "خادم API"), + ("invalid_http", "يجب ان يبدأ بـ http:// او https://"), + ("Invalid IP", "عنوان IP غير صحيح"), + ("Invalid format", "صيغة غير صحيحة"), + ("server_not_support", "الخادم غير مدعوم"), + ("Not available", "غير متوفر"), + ("Too frequent", "متكرر جدا"), + ("Cancel", "إلغاء الأمر"), + ("Skip", "تجاوز"), + ("Close", "إغلاق"), + ("Retry", "إعادة المحاولة"), + ("OK", "موافق"), + ("Password Required", "كلمة المرور اجبارية"), + ("Please enter your password", "الرجاء كتابة كلمة المرور"), + ("Remember password", "تذكر كلمة المرور"), + ("Wrong Password", "كلمة مرور خاطئة"), + ("Do you want to enter again?", "هل تريد الادخال مرة اخرى؟"), + ("Connection Error", "خطأ غي الاتصال"), + ("Error", "خطأ"), + ("Reset by the peer", "تمت اعادة التعيين بواسطة القرين"), + ("Connecting...", "جاري الاتصال..."), + ("Connection in progress. Please wait.", "جاري الاتصال, الرجاء الانتظار..."), + ("Please try 1 minute later", "الرجاء المحاولة بعد دقيقة واحدة"), + ("Login Error", "خطأ في تسجيل الدخول"), + ("Successful", "نجاح"), + ("Connected, waiting for image...", "متصل, جاري انتظار الصورة..."), + ("Name", "الاسم"), + ("Type", "النوع"), + ("Modified", "آخر تعديل"), + ("Size", "الحجم"), + ("Show Hidden Files", "عرض الملفات المخفية"), + ("Receive", "استقبال"), + ("Send", "ارسال"), + ("Refresh File", "تحديث الملف"), + ("Local", "المحلي"), + ("Remote", "البعيد"), + ("Remote Computer", "الحاسب البعيد"), + ("Local Computer", "الحاسب المحلي"), + ("Confirm Delete", "تأكيد الحذف"), + ("Delete", "حذف"), + ("Properties", "الخصائص"), + ("Multi Select", "اختيار متعدد"), + ("Select All", "تحديد الكل"), + ("Unselect All", "الغاء تحديد الكل"), + ("Empty Directory", "مجلد فارغ"), + ("Not an empty directory", "مجلد غير فارغ"), + ("Are you sure you want to delete this file?", "هل انت متأكد من أنك تريد حذف هذا الملف؟"), + ("Are you sure you want to delete this empty directory?", "هل انت متأكد من أنك تريد حذف هذا المجلد؟"), + ("Are you sure you want to delete the file of this directory?", "هل انت متأكد من أنك تريد حذف ملفات هذا المجلد؟"), + ("Do this for all conflicts", "فعل هذا لكل التعارضات"), + ("This is irreversible!", "لا يمكن التراجع عن هذا!"), + ("Deleting", "جاري الحذف"), + ("files", "ملفات"), + ("Waiting", "انتظار"), + ("Finished", "انتهى"), + ("Speed", "السرعة"), + ("Custom Image Quality", "جودة صورة مخصصة"), + ("Privacy mode", "وضع الخصوصية"), + ("Block user input", "حجم ادخال المستخدم"), + ("Unblock user input", "الغاء حجب ادخال المستخدم"), + ("Adjust Window", "ضبط النافذة"), + ("Original", "الاصلي"), + ("Shrink", "تقليص"), + ("Stretch", "تمديد"), + ("Scrollbar", "شريط التمرير"), + ("ScrollAuto", "التمرير التلقائي"), + ("Good image quality", "دقة صورة جيدة"), + ("Balanced", "متوازن"), + ("Optimize reaction time", "تحسين وقت رد الفعل"), + ("Custom", "مخصص"), + ("Show remote cursor", "عرض مؤشر الجهاز البعيد"), + ("Show quality monitor", "عرض مراقب الجودة"), + ("Disable clipboard", "تعطيل الحافظة"), + ("Lock after session end", "القفل بعد نهاية هذه الجلسة"), + ("Insert", "ادخال"), + ("Insert Lock", "قفل الادخال"), + ("Refresh", "تحديث"), + ("ID does not exist", "المعرف غير موجود"), + ("Failed to connect to rendezvous server", "فشل الاتصال بخادم rendezvous"), + ("Please try later", "الرجاء المحاولة لاحقا"), + ("Remote desktop is offline", "سطح المكتب البعيد غير متصل"), + ("Key mismatch", "المفتاح غير متطابق"), + ("Timeout", "نفذ الوقت"), + ("Failed to connect to relay server", "فشل الاتصال بالخادم الوسيط"), + ("Failed to connect via rendezvous server", "فشل الاتصال عير خادم rendezvous"), + ("Failed to connect via relay server", "فشل الاتصال عبر الخادم الوسيط"), + ("Failed to make direct connection to remote desktop", "فشل في اجراء اتصال مباشر لسطح المكتب البعيد"), + ("Set Password", "ضبط كلمة المرور"), + ("OS Password", "كلمة مرور نظام التشغيل"), + ("install_tip", "بسبب صلاحيات تحكم حساب المستخدم. RustDesk قد لا يعمل بشكل صحيح في جهة البعيد في بعض الحالات. لتفادي ذلك. الرجاء الضغط على الزر ادناه لتثبيت RustDesk في جهازك."), + ("Click to upgrade", "اضغط للارتقاء"), + ("Click to download", "اضغط للتنزيل"), + ("Click to update", "ضغط للتحديث"), + ("Configure", "تهيئة"), + ("config_acc", "لتتمكن من التحكم بسطح مكتبك البعيد, تحتاج الى منح RustDesk اذونات \"امكانية الوصول\"."), + ("config_screen", "لتتمكن من الوصول الى سطح مكتبك البعيد, تحتاج الى منح RustDesk اذونات \"تسجيل الشاشة\"."), + ("Installing ...", "جاري التثبيت..."), + ("Install", "تثبيت"), + ("Installation", "التثبيت"), + ("Installation Path", "مسار التثبيت"), + ("Create start menu shortcuts", "انشاء اختصارات قائمة ابداء"), + ("Create desktop icon", "انشاء اختصار سطح المكتب"), + ("agreement_tip", "بمجرد البدء بالتثبيت, فانت قد قبلت اتفاقية الترخيص."), + ("Accept and Install", "الموافقة والتثبيت"), + ("End-user license agreement", "اتفاقية ترخيص المستخدم النهائي"), + ("Generating ...", "جاري الانشاء..."), + ("Your installation is lower version.", "انت تحاول تثبيت نسخة قديمة."), + ("not_close_tcp_tip", "لا تغلق هذه النافذة اثناء استخدامك للنفق"), + ("Listening ...", "جاري الاستماع..."), + ("Remote Host", "المستضيف البعيد"), + ("Remote Port", "منفذ المستضيف البعيد"), + ("Action", "فعل"), + ("Add", "اضافة"), + ("Local Port", "المنفذ المحلي"), + ("Local Address", "العنوان المحلي"), + ("Change Local Port", "تغيير المنفذ المحلي"), + ("setup_server_tip", "لاتصال اسرع, الرجاء اعداد خادم خاص بك"), + ("Too short, at least 6 characters.", "قصير جدا. يجب ان يكون على الاقل 6 خانات"), + ("The confirmation is not identical.", "التأكيد غير متطابق"), + ("Permissions", "الاذونات"), + ("Accept", "قبول"), + ("Dismiss", "صرف"), + ("Disconnect", "قطع الاتصال"), + ("Allow using keyboard and mouse", "السماح باستخدام لوحة المفاتيح والفأرة"), + ("Allow using clipboard", "السماح باستخدام الحافظة"), + ("Allow hearing sound", "السماح بسماع الصوت"), + ("Allow file copy and paste", "السماح بالنسخ واللصق"), + ("Connected", "متصل"), + ("Direct and encrypted connection", "اتصال مباشر مشفر"), + ("Relayed and encrypted connection", "اتصال غير مباشر مشفر"), + ("Direct and unencrypted connection", "اتصال مباشر غير مشفر"), + ("Relayed and unencrypted connection", "اتصال غير مباشر غير مشفر"), + ("Enter Remote ID", "ادخل المعرف البعيد"), + ("Enter your password", "ادخل كلمة المرور"), + ("Logging in...", "جاري تسجيل الدخول..."), + ("Enable RDP session sharing", "تفعيل مشاركة الجلسة باستخدام RDP"), + ("Auto Login", "تسجيل دخول تلقائي"), + ("Enable Direct IP Access", "تفعيل الوصول المباشر لعنوان IP"), + ("Rename", "اعادة تسمية"), + ("Space", "مساحة"), + ("Create Desktop Shortcut", "انشاء اختصار سطح مكتب"), + ("Change Path", "تغيير المسار"), + ("Create Folder", "انشاء مجلد"), + ("Please enter the folder name", "الرجاء ادخال اسم المجلد"), + ("Fix it", "اصلحه"), + ("Warning", "تحذير"), + ("Login screen using Wayland is not supported", "تسجيل الدخول باستخدام Wayland غير مدعوم"), + ("Reboot required", "يجب اعادة التشغيل"), + ("Unsupported display server", "خادم العرض غير مدعوم"), + ("x11 expected", "x11 متوقع"), + ("Port", "المنفذ"), + ("Settings", "الاعدادات"), + ("Username", "اسم المستخدم"), + ("Invalid port", "منفذ خاطئ"), + ("Closed manually by the peer", "اغلاق يدويا بواسطة القرين"), + ("Enable remote configuration modification", "تفعيل تعديل اعدادات البعيد"), + ("Run without install", "تشغيل بدون تثبيت"), + ("Connect via relay", "الاتصال عبر وسيط"), + ("Always connect via relay", "الاتصال باستخدام وسيط دائما"), + ("whitelist_tip", "فقط قائمة الـ IP البيضاء تستطيع الوصول لي"), + ("Login", "تسجيل الدخول"), + ("Verify", "تأكيد"), + ("Remember me", "تذكرني"), + ("Trust this device", "الوثوق بهذا الجهاز"), + ("Verification code", "رمز التحقق"), + ("verification_tip", "رمز التحقق ارسل الى بريدك الالكتروني المسجل. ادخل رمز التحقق للاستمرار بتسجيل الدخول."), + ("Logout", "تسجيل الخروج"), + ("Tags", "العلامات"), + ("Search ID", "البحث المعرف"), + ("whitelist_sep", "مفصولة بفاصلة او فاصلة منقوطة او سطر جديد"), + ("Add ID", "اضافة معرف"), + ("Add Tag", "اضافة علامة"), + ("Unselect all tags", "عدم تحديد كل العلامات"), + ("Network error", "خطأ شبكة"), + ("Username missed", "اسم المستخدم مفقود"), + ("Password missed", "كلمة المرور مفقودة"), + ("Wrong credentials", "اسم مستخدم او كلمة مرور خاطئة"), + ("The verification code is incorrect or has expired", "رمز التحقق غير صحيح او منتهي"), + ("Edit Tag", "تحرير علامة"), + ("Unremember Password", "عدم تذكر كلمة المرور"), + ("Favorites", "المفضلة"), + ("Add to Favorites", "اضافة للمفضلة"), + ("Remove from Favorites", "ازالة من المفضلة"), + ("Empty", "فارغ"), + ("Invalid folder name", "اسم المجلد غير صحيح"), + ("Socks5 Proxy", "وكيل Socks5"), + ("Hostname", "اسم المستضيف"), + ("Discovered", "المكتشفة"), + ("install_daemon_tip", "للبدء مع بدء تشغيل النظام. تحتاج الى تثبيت خدمة النظام."), + ("Remote ID", "المعرف البعيد"), + ("Paste", "لصق"), + ("Paste here?", "لصق هنا؟"), + ("Are you sure to close the connection?", "هل انت متاكد من انك تريد اغلاق هذا الاتصال؟"), + ("Download new version", "تنويل نسخة جديدة"), + ("Touch mode", "وضع اللمس"), + ("Mouse mode", "وضع الفأرة"), + ("One-Finger Tap", "لم اصبع واحد"), + ("Left Mouse", "الفأرة اليسرى"), + ("One-Long Tap", "لمسة واحدة طويلة"), + ("Two-Finger Tap", "لمس اصبعين"), + ("Right Mouse", "الفأرة اليمنى"), + ("One-Finger Move", "نقل الاصبع الواحد"), + ("Double Tap & Move", "لمستان ونقل"), + ("Mouse Drag", "سحب الفأرة"), + ("Three-Finger vertically", "ثلاث اصابع افقيا"), + ("Mouse Wheel", "عجلة الفارة"), + ("Two-Finger Move", "نقل الاصبعين"), + ("Canvas Move", ""), + ("Pinch to Zoom", "قرصة للتكبير"), + ("Canvas Zoom", ""), + ("Reset canvas", ""), + ("No permission of file transfer", "لا يوجد اذن نقل الملف"), + ("Note", "ملاحظة"), + ("Connection", "الاتصال"), + ("Share Screen", "مشاركة الشاشة"), + ("Chat", "محادثة"), + ("Total", "الاجمالي"), + ("items", "عناصر"), + ("Selected", "محدد"), + ("Screen Capture", "لقط الشاشة"), + ("Input Control", "تحكم الادخال"), + ("Audio Capture", "لقط الصوت"), + ("File Connection", "اتصال الملف"), + ("Screen Connection", "اتصال الشاشة"), + ("Do you accept?", "هل تقبل؟"), + ("Open System Setting", "فتح اعدادات النظام"), + ("How to get Android input permission?", "كيف تحصل على اذن الادخال في اندرويد؟"), + ("android_input_permission_tip1", "لكي يتمكن جهاز بعيد من التحكم بجهازك الـ Android عن طريق الفارة أو اللمس، يلزمك السماح لـ RustDesk باستخدام خدمة \"إمكانية الوصول\"."), + ("android_input_permission_tip2", "يرجى الانتقال إلى صفحة إعدادات النظام التالية، والعثور على [الخدمات المثبتة]، وتشغيل خدمة [RustDesk Input]."), + ("android_new_connection_tip", "تم استلام طلب تحكم جديد، حيث يريد التحكم بجهازك الحالي."), + ("android_service_will_start_tip", "تشغيل \"لقط الشاشة\" سيبدأ الخدمة تلقائيا، حيث سيسمح للاجهزة الاخرى بطلب الاتصال مع جهازك."), + ("android_stop_service_tip", "اغلاق الخدمة سيغلق جميع الاتصالات القائمة."), + ("android_version_audio_tip", "نسخة اندرويد الحالية لا تدعم خدمة لقط الصوت، الرجاء الترقية الى نسخة 10 او أحدث."), + ("android_start_service_tip", "اضغط تشغيل الخدمة او فعل صلاحية لقط الشاشة لبدء خدمة مشاركة الشاشة."), + ("android_permission_may_not_change_tip", "الاذونات الاتصالات القائمة قد لا تتغير مباشرة الا بعد اعادة الاتصال."), + ("Account", "الحساب"), + ("Overwrite", "استبدال"), + ("This file exists, skip or overwrite this file?", "الملف موجود, هل تريد التجاوز او الاستبدال؟"), + ("Quit", "خروج"), + ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), + ("Help", "مساعدة"), + ("Failed", "فشل"), + ("Succeeded", "نجاح"), + ("Someone turns on privacy mode, exit", "شخص ما فعل وضع الخصوصية, خروج"), + ("Unsupported", "غير مدعوم"), + ("Peer denied", "القرين رفض"), + ("Please install plugins", "الرجاء تثبيت الاضافات"), + ("Peer exit", "خروج القرين"), + ("Failed to turn off", "فشل ايقاف التشغيل"), + ("Turned off", "مطفئ"), + ("In privacy mode", "في وضع الخصوصية"), + ("Out privacy mode", "الخروج من وضع الخصوصية"), + ("Language", "اللغة"), + ("Keep RustDesk background service", "ابق خدمة RustDesk تعمل في الخلفية"), + ("Ignore Battery Optimizations", "تجاهل تحسينات البطارية"), + ("android_open_battery_optimizations_tip", "اذا اردت تعطيل هذه الميزة, الرجاء الذهاب الى صفحة اعدادات تطبيق RustDesk, ابحث عن البطارية, الغ تحديد غير مقيد"), + ("Start on Boot", "البدء عند تشغيل النظام"), + ("Start the screen sharing service on boot, requires special permissions", "تشغيل خدمة مشاركة الشاشة عند بدء تشغيل النظام, يحتاج الى اذونات خاصة"), + ("Connection not allowed", "الاتصال غير مسموح"), + ("Legacy mode", "الوضع التقليدي"), + ("Map mode", "وضع الخريطة"), + ("Translate mode", "وضع الترجمة"), + ("Use permanent password", "استخدام كلمة مرور دائمة"), + ("Use both passwords", "استخدام طريقتي كلمة المرور"), + ("Set permanent password", "تعيين كلمة مرور دائمة"), + ("Enable Remote Restart", "تفعيل اعداة تشغيل البعيد"), + ("Allow remote restart", "السماح باعادة تشغيل البعيد"), + ("Restart Remote Device", "اعادة تشغيل الجهاز البعيد"), + ("Are you sure you want to restart", "هل انت متاكد من انك تريد اعادة التشغيل؟"), + ("Restarting Remote Device", "جاري اعادة تشغيل البعيد"), + ("remote_restarting_tip", "الجهاز البعيد يعيد التشغيل. الرجاء اغلاق هذه الرسالة واعادة الاتصال باستخدام كلمة المرور الدائمة بعد فترة بسيطة."), + ("Copied", "منسوخ"), + ("Exit Fullscreen", "الخروج من ملئ الشاشة"), + ("Fullscreen", "ملئ الشاشة"), + ("Mobile Actions", "اجراءات الهاتف"), + ("Select Monitor", "اختر شاشة"), + ("Control Actions", "اجراءات التحكم"), + ("Display Settings", "اعدادات العرض"), + ("Ratio", "النسبة"), + ("Image Quality", "جودة الصورة"), + ("Scroll Style", "شكل التمرير"), + ("Show Toolbar", "عرض شريط الادوات"), + ("Hide Toolbar", "اخفاء شريط الادوات"), + ("Direct Connection", "اتصال مباشر"), + ("Relay Connection", "اتصال الوسيط"), + ("Secure Connection", "اتصال آمن"), + ("Insecure Connection", "اتصال غير آمن"), + ("Scale original", "المقياس الأصلي"), + ("Scale adaptive", "مقياس التكيف"), + ("General", "عام"), + ("Security", "الأمان"), + ("Theme", "السمة"), + ("Dark Theme", "سمة غامقة"), + ("Light Theme", "سمة فاتحة"), + ("Dark", "غامق"), + ("Light", "فاتح"), + ("Follow System", "نفس نظام التشغيل"), + ("Enable hardware codec", "تفعيل ترميز العتاد"), + ("Unlock Security Settings", "فتح اعدادات الامان"), + ("Enable Audio", "تفعيل الصوت"), + ("Unlock Network Settings", "فتح اعدادات الشبكة"), + ("Server", "الخادم"), + ("Direct IP Access", "وصول مباشر للـ IP"), + ("Proxy", "الوكيل"), + ("Apply", "تطبيق"), + ("Disconnect all devices?", "قطع اتصال كل الاجهزة؟"), + ("Clear", "مسح"), + ("Audio Input Device", "جهاز ادخال الصوت"), + ("Use IP Whitelisting", "استخدام قائمة الـ IP البيضاء"), + ("Network", "الشبكة"), + ("Enable RDP", "تفعيل RDP"), + ("Pin Toolbar", "تثبيت شريط الادوات"), + ("Unpin Toolbar", "الغاء تثبيت شريط الادوات"), + ("Recording", "التسجيل"), + ("Directory", "المسار"), + ("Automatically record incoming sessions", "تسجيل الجلسات القادمة تلقائيا"), + ("Change", "تغيير"), + ("Start session recording", "بدء تسجيل الجلسة"), + ("Stop session recording", "ايقاف تسجيل الجلسة"), + ("Enable Recording Session", "تفعيل تسجيل الجلسة"), + ("Allow recording session", "السماح بتسجيل الجلسة"), + ("Enable LAN Discovery", "تفعيل اكتشاف الشبكة المحلية"), + ("Deny LAN Discovery", "رفض اكتشاف الشبكة المحلية"), + ("Write a message", "اكتب رسالة"), + ("Prompt", ""), + ("Please wait for confirmation of UAC...", "الرجاء انتظار تاكيد تحكم حساب المستخدم..."), + ("elevated_foreground_window_tip", "النافذة الحالية لسطح المكتب البعيد تحتاج صلاحية اعلى لتعمل, لذلك لن تستطيع استخدام الفارة ولوحة المفاتيح مؤقتا. تستطيع انت تطلب من المستخدم البعيد تصغير النافذة الحالية, او ضفط زر الارتقاء في نافذة ادارة الاتصال. لتفادي هذة المشكلة من المستحسن تثبيت البرنامج في الجهاز البعيد."), + ("Disconnected", "مفصول"), + ("Other", "اخرى"), + ("Confirm before closing multiple tabs", "التاكيد قبل اغلاق السنة عديدة"), + ("Keyboard Settings", "اعدادات لوحة المفاتيح"), + ("Full Access", "وصول كامل"), + ("Screen Share", "مشاركة الشاشة"), + ("Wayland requires Ubuntu 21.04 or higher version.", "Wayland يتطلب نسخة ابونتو 21.04 او اعلى."), + ("Wayland requires higher version of linux distro. Please try X11 desktop or change your OS.", "Wayland يتطلب نسخة اعلى من توزيعة لينكس. الرجاء تجربة سطح مكتب X11 او غير نظام تشغيلك."), + ("JumpLink", "رابط القفز"), + ("Please Select the screen to be shared(Operate on the peer side).", "الرجاء اختيار شاشة لمشاركتها (تعمل على جانب القرين)."), + ("Show RustDesk", "عرض RustDesk"), + ("This PC", "هذا الحاسب"), + ("or", "او"), + ("Continue with", "متابعة مع"), + ("Elevate", "ارتقاء"), + ("Zoom cursor", "تكبير المؤشر"), + ("Accept sessions via password", "قبول الجلسات عبر كلمة المرور"), + ("Accept sessions via click", "قبول الجلسات عبر الضغط"), + ("Accept sessions via both", "قبول الجلسات عبر الاثنين"), + ("Please wait for the remote side to accept your session request...", "الرجاء الانتظار حتى يقبل الطرف البعيد طلب الجلسة..."), + ("One-time Password", "كلمة مرور لمرة واحدة"), + ("Use one-time password", "استخدام كلمة مرور لمرة واحدة"), + ("One-time password length", "طول كلمة مرور لمرة واحدة"), + ("Request access to your device", "طلب الوصول إلى جهازك"), + ("Hide connection management window", "اخفاء نافذة ادارة الاتصال"), + ("hide_cm_tip", "السماح بالاخفاء فقط في حالة قبول الجلسات عبر كلمة المرور واستخدام كلمة المرور الدائمة"), + ("wayland_experiment_tip", "دعم Wayland لازال في المرحلة التجريبية. الرجاء استخدام X11 اذا اردت وصول كامل."), + ("Right click to select tabs", "الضغط بالزر الايمن لتحديد الالسنة"), + ("Skipped", "متجاوز"), + ("Add to Address Book", "اضافة الى كتاب العناوين"), + ("Group", "مجموعة"), + ("Search", "بحث"), + ("Closed manually by web console", "اغلق يدويا عبر طرفية الويب"), + ("Local keyboard type", "توع لوحة المفاتيح المحلية"), + ("Select local keyboard type", "اختر نوع لوحة المفاتيح الملحية"), + ("software_render_tip", "اذا كنت تستخدم بطاقة رسوميات Nvidia تحت لينكس والشاشة البعيد تغلق مباشرة بعد الاتصال, قم بالتبديل الى تعريفات Nouveau مفتوحة المصدر واختيار الترميز البرمجي قد يساعد. اعادة تشغيل البرناج مطلوبة."), + ("Always use software rendering", "استخدام الترميز البرمجي دائما"), + ("config_input", "لتتمكن من التحكم بسطح المكتب البعيد. يجب من RustDesk اذونات \"مراقبة المدخلات\"."), + ("config_microphone", "لتتمكن من التحدث. يجب منح RustDesk اذونات \"تسجيل الصوت\"."), + ("request_elevation_tip", "اطلب الارتقاء في حالة وجود شخص في الطرف الاخر."), + ("Wait", "انتظر"), + ("Elevation Error", "خطأ الارتقاء"), + ("Ask the remote user for authentication", "اسأل المستخدم البعيد التوثيق"), + ("Choose this if the remote account is administrator", "اختر اذا كان الحساب البعيد مدير للنظام"), + ("Transmit the username and password of administrator", "انقل اسم المستخدم وكلمة مرور مدير النظام"), + ("still_click_uac_tip", "لازال يحتاج المستخدم البعيد للضغط على موافق في نافذة تحكم حساب المستخدم في RustDesk الذي يعمل."), + ("Request Elevation", "طلب ارتقاء"), + ("wait_accept_uac_tip", "الرجاء انتظار المستخدم البعيد حتى يوافق على طلب تحكم حساب المستخدم."), + ("Elevate successfully", "الارتقاء بنجاح"), + ("uppercase", "حرف كبير"), + ("lowercase", "حرف صغير"), + ("digit", "رقم"), + ("special character", "رمز"), + ("length>=8", "الطول 8 على الاقل"), + ("Weak", "ضعيف"), + ("Medium", "متوسط"), + ("Strong", "قوي"), + ("Switch Sides", "تبديل الاماكن"), + ("Please confirm if you want to share your desktop?", "الرجاء التاكيد على انك تريد مشاركة سطح مكتبك؟"), + ("Display", "العرض"), + ("Default View Style", "شكل العرض الافتراضي"), + ("Default Scroll Style", "شكل التمرير الافتراضي"), + ("Default Image Quality", "دقة الصورة الافتراضية"), + ("Default Codec", "الترميز الاقتراضي"), + ("Bitrate", "معدل البت"), + ("FPS", "مشهد في الثانية"), + ("Auto", "تلقائي"), + ("Other Default Options", "الخيارات الافتراضية الاخرى"), + ("Voice call", "مكالمة صوتية"), + ("Text chat", "دردشة نصية"), + ("Stop voice call", "ايقاف المكالمة الصوتية"), + ("relay_hint_tip", "قد لا يكون ممكن الاتصال مباشرة. يمكنك محاولة الاتصال عبر وسيط. ايضا اذا اردت استخدام وسيط لمحاولتك الاولى اضف لاحقة \"/r\" الى المعرف او اختر \"الاتصال باستخدام وسيط دائما\" في بطاقة الجلسات الحديثة ان وجدت."), + ("Reconnect", "اعادة الاتصال"), + ("Codec", "الترميز"), + ("Resolution", "الدقة"), + ("No transfers in progress", "لا توجد عمليات نقل حاليا"), + ("Set one-time password length", "تعيين طول كلمة مرور المرة الواحدة"), + ("install_cert_tip", "تثبيت شهادة RustDesk"), + ("confirm_install_cert_tip", "هذه شهادة RustDesk الاختبارية, يمكنك الوثوق بها. هذه الشهادة ستستخدم للوثوق وتثبيت تعاريف RustDesk عند الحاجة."), + ("RDP Settings", "اعدادات RDP"), + ("Sort by", "ترتيب حسب"), + ("New Connection", "اتصال جديد"), + ("Restore", "استعادة"), + ("Minimize", "تصغير"), + ("Maximize", "تكبير"), + ("Your Device", "جهازك"), + ("empty_recent_tip", "للاسف. لا توجد جلسات حديثة\nحان الوقت للتخطيط لواحدة جديدة."), + ("empty_favorite_tip", "لا يوجد اقران مفضلين حتى الان؟\nحسنا لنبحث عن شخص للاتصال معه ومن ثم اضافته للمفضلة."), + ("empty_lan_tip", "اه لا, يبدو انك لم تكتشف اي قرين بعد."), + ("empty_address_book_tip", "يا عزيزي, يبدو انه لايوجد حاليا اي اقران في كتاب العناوين."), + ("eg: admin", "مثلا: admin"), + ("Empty Username", "اسم مستخدم فارغ"), + ("Empty Password", "كلمة مرور فارغة"), + ("Me", "انا"), + ("identical_file_tip", "هذا الملف مطابق لملف موجود عن القرين."), + ("show_monitors_tip", "عرض الشاشات في شريط الادوات"), + ("View Mode", "وضع العرض"), + ("login_linux_tip", "تحتاج الى تسجيل الدخول حساب لينكس البعيد وتفعيل جلسة سطح مكتب X"), + ("verify_rustdesk_password_tip", "تحقق من كلمة مرور RustDesk"), + ("remember_account_tip", "تذكر هذا الحساب"), + ("os_account_desk_tip", "هذا الحساب مستخدم لتسجيل الدخول الى سطح المكتب البعيد وتفعيل الجلسة"), + ("OS Account", "حساب نظام التشغيل"), + ("another_user_login_title_tip", "مستخدم اخر مسجل دخول حاليا"), + ("another_user_login_text_tip", "قطع الاتصال"), + ("xorg_not_found_title_tip", "Xorg غير موجود"), + ("xorg_not_found_text_tip", "الرجاء تثبيت Xorg"), + ("no_desktop_title_tip", "لا يتوفر سطح مكتب"), + ("no_desktop_text_tip", "الرجاء تثبيت سطح مكتب GNOME"), + ("No need to elevate", "لا حاجة للارتقاء"), + ("System Sound", "صوت النظام"), + ("Default", "الافتراضي"), + ("New RDP", "RDP جديد"), + ("Fingerprint", "البصمة"), + ("Copy Fingerprint", "نسخ البصمة"), + ("no fingerprints", "لا توجد بصمات اصابع"), + ("Select a peer", "اختر قرين"), + ("Select peers", "اختر الاقران"), + ("Plugins", "الاضافات"), + ("Uninstall", "الغاء التثبيت"), + ("Update", "تحديث"), + ("Enable", "تفعيل"), + ("Disable", "تعطيل"), + ("Options", "الخيارات"), + ("resolution_original_tip", "الدقة الأصلية"), + ("resolution_fit_local_tip", "تناسب الدقة المحلية"), + ("resolution_custom_tip", "دقة مخصصة"), + ("Collapse toolbar", "طي شريط الادوات"), + ("Accept and Elevate", "قبول وارتقاء"), + ("accept_and_elevate_btn_tooltip", "قبول الاتصال وارتقاء صلاحيات التحكم بصلاحيات المستخدم."), + ("clipboard_wait_response_timeout_tip", "انتهى وقت الانتظار لنسخ الرد."), + ("Incoming connection", "اتصال قادم"), + ("Outgoing connection", "اتصال مغادر"), + ("Exit", "خروج"), + ("Open", "فتح"), + ("logout_tip", "هل انت متاكد من انك تريد تسجيل الخروج"), + ("Service", "الخدمة"), + ("Start", "تشغيل"), + ("Stop", "ايقاف"), + ("exceed_max_devices", "لقد وصلت الحد الأقصى لعدد الاجهزة التي يمكن دارتها."), + ("Sync with recent sessions", "المزامنة مع الجلسات الحديثة"), + ("Sort tags", "ترتيب العلامات"), + ("Open connection in new tab", "فتح اتصال في لسان جديد"), + ("Move tab to new window", "نقل اللسان الى نافذة جديدة"), + ("Can not be empty", "لا يمكن ان يكون فارغ"), + ("Already exists", "موجود مسبقا"), + ("Change Password", "تغيير كلمة المرور"), + ("Refresh Password", "تحديث كلمة المرور"), + ("ID", "المعرف"), + ("Grid View", "عرض شبكي"), + ("List View", "رعض قائمة"), + ("Select", "اختيار"), + ("Toggle Tags", "تفعيل/تعطيل العلامات"), + ("pull_ab_failed_tip", "فشل تحديث كتاب العناوين"), + ("push_ab_failed_tip", "فشل مزامنة كتاب العناوين مع الخادم"), + ("synced_peer_readded_tip", "الاجهزة الموجودة في الجلسات الحديثة سيتم مزامنتها مع كتاب العناوين"), + ("Change Color", ""), + ("Primary Color", ""), + ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), + ].iter().cloned().collect(); +} diff --git a/src/lang/ca.rs b/src/lang/ca.rs index baf6992b9..1ec5d78f3 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 8c20966c0..8e07a2965 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "更改颜色"), ("Primary Color", "基本色"), ("HSV Color", "HSV 色"), + ("Installation Successful!", "安装成功!"), + ("Installation failed!", "安装失败!"), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 0e4d4db65..5dd4dc9a3 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index c5540e75e..999875df2 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index fe1fe864f..154805fbc 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "Farbe ändern"), ("Primary Color", "Primärfarbe"), ("HSV Color", "HSV-Farbe"), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 4e065c803..4e7a83017 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index c77126729..7cb5a1b2a 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 35d776f1a..b1fc57954 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "Cambiar Color"), ("Primary Color", "Color Primario"), ("HSV Color", "Color HSV"), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 35207642a..1284ec985 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 211927293..fea4f7ffa 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "Modifier la couleur"), ("Primary Color", "Couleur primaire"), ("HSV Color", "Couleur TSL"), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); -} \ No newline at end of file +} diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 722011788..a9089de35 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 7a1eaba20..27676a420 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "Ganti warna"), ("Primary Color", "Warna utama"), ("HSV Color", "Warna HSV"), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 9c8b4fd48..9e845f840 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "Modifica colore"), ("Primary Color", "Colore primario"), ("HSV Color", "Colore HSV"), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index b1da5d94c..e6ef75815 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index a69b38e26..6f26674c5 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index ccca49561..b68caad51 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/lt.rs b/src/lang/lt.rs index 873f5909a..41caa606f 100644 --- a/src/lang/lt.rs +++ b/src/lang/lt.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index b1913d24f..6010a4132 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "Kleur Aanpassen"), ("Primary Color", "Hoofdkleur"), ("HSV Color", "HSV Kleur"), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 0391dd2f3..fe0693595 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index becb4c8ee..d0ade1088 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 704b56d1e..6dfc8f2a2 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 2f248262b..01e0402a9 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index cc5e97da8..253a48948 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "Изменить цвет"), ("Primary Color", "Основной цвет"), ("HSV Color", "HSV цвет"), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 9711586d3..615dd08f4 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index f5f4f95f2..a05b5f4c0 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index e5d310ebb..cfc2fda74 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 480964e6e..85bb6f488 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index cf94e7064..90f543617 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index c71a30342..7f58b4452 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 1ec47d26c..94251c5b2 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index f8295e2c4..57a337b1a 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -408,7 +408,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-time password length", "Tek seferlik şifre uzunluğu"), ("Request access to your device", "Cihazınıza erişim talep edin"), ("Hide connection management window", "Bağlantı yönetimi penceresini gizle"), - ("hide_cm_tip", "Oturumları yalnızca parola ile kabul edebilir ve kalıcı parola kullanıyorsanız gizlemeye izin verin"), + ("hide_cm_tip", "Oturumları yalnızca parola ile kabul edebilir ve kalıcı parola kullanıyorsanız gizlemeye izin verin"), ("wayland_experiment_tip", "Wayland desteği deneysel aşamada olduğundan, gerektiğinde X11'i kullanmanız önerilir"), ("Right click to select tabs", "Sekmeleri seçmek için sağ tıklayın"), ("Skipped", "Atlandı"), @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "Rengi Değiştir"), ("Primary Color", "Birincil Renk"), ("HSV Color", "HSV Rengi"), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index d5a6c6b83..49d1c08cf 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "更改顏色"), ("Primary Color", "基本色"), ("HSV Color", "HSV 色"), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 6be8c93b2..b398afab5 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index d83d9ef42..a6a4478e7 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -541,5 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", ""), ("Primary Color", ""), ("HSV Color", ""), + ("Installation Successful!", ""), + ("Installation failed!", ""), ].iter().cloned().collect(); } From db66ffc86800925b5873c2b96ea805c1ed1c637c Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 8 Sep 2023 09:05:07 +0800 Subject: [PATCH 609/612] not pop up cm for file log Signed-off-by: 21pages --- flutter/lib/models/chat_model.dart | 12 +----------- flutter/lib/models/cm_file_model.dart | 16 ++-------------- 2 files changed, 3 insertions(+), 25 deletions(-) diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index d28bc7d8e..ed216e500 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -73,7 +73,7 @@ class ChatModel with ChangeNotifier { Offset chatWindowPosition = Offset(20, 80); - void setChatWindowPosition(Offset position) { + void setChatWindowPosition(Offset position) { chatWindowPosition = position; notifyListeners(); } @@ -278,16 +278,6 @@ class ChatModel with ChangeNotifier { } } - showSidePage() async { - if (isDesktop) { - if (isConnManager) { - if (!_isShowCMSidePage) { - await toggleCMSidePage(); - } - } - } - } - toggleCMChatPage(MessageKey key) async { if (gFFI.chatModel.currentKey != key) { gFFI.chatModel.changeCurrentKey(key); diff --git a/flutter/lib/models/cm_file_model.dart b/flutter/lib/models/cm_file_model.dart index 064ce9d53..d372db6c3 100644 --- a/flutter/lib/models/cm_file_model.dart +++ b/flutter/lib/models/cm_file_model.dart @@ -14,8 +14,6 @@ class CmFileModel { final _jobTables = HashMap>.fromEntries([]); Stopwatch stopwatch = Stopwatch(); int _lastElapsed = 0; - bool _jobAdded = false; - bool _showing = false; CmFileModel(this.parent); @@ -44,16 +42,6 @@ class CmFileModel { _dealOneJob(d, calcSpeed); } currentJobTable.refresh(); - Future.delayed(Duration.zero, () async { - if (_jobAdded) { - _jobAdded = false; - if (!_showing) { - _showing = true; - await gFFI.chatModel.showSidePage(); - _showing = false; - } - } - }); } catch (e) { debugPrint("onFileTransferLog:$e"); } @@ -72,10 +60,10 @@ class CmFileModel { if (job == null) { job = JobProgress(); jobTable.add(job); - _jobAdded = true; final currentSelectedTab = gFFI.serverModel.tabController.state.value.selectedTabInfo; - if (currentSelectedTab.key != data.connId.toString()) { + if (!(gFFI.chatModel.isShowCMSidePage && + currentSelectedTab.key == data.connId.toString())) { client?.unreadChatMessageCount.value += 1; } } From 14bf3056de7ce0f1d7e8a78cb301b2c6752a17c6 Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 8 Sep 2023 11:29:47 +0800 Subject: [PATCH 610/612] mobile privacy statement Signed-off-by: 21pages --- flutter/lib/mobile/pages/settings_page.dart | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/flutter/lib/mobile/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart index e2120a05f..1cdfa9609 100644 --- a/flutter/lib/mobile/pages/settings_page.dart +++ b/flutter/lib/mobile/pages/settings_page.dart @@ -7,6 +7,7 @@ import 'package:get/get.dart'; import 'package:provider/provider.dart'; import 'package:settings_ui/settings_ui.dart'; import 'package:url_launcher/url_launcher.dart'; +import 'package:url_launcher/url_launcher_string.dart'; import '../../common.dart'; import '../../common/widgets/dialog.dart'; @@ -498,6 +499,12 @@ class _SettingsState extends State with WidgetsBindingObserver { child: Text(_fingerprint), ), leading: Icon(Icons.fingerprint)), + SettingsTile( + title: Text(translate("Privacy Statement")), + onPressed: (context) => + launchUrlString('https://rustdesk.com/privacy.html'), + leading: Icon(Icons.privacy_tip), + ) ], ), ], From 1ab09c65f01f5a4058bd0f0774002b266d826160 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Fri, 8 Sep 2023 09:10:28 +0200 Subject: [PATCH 611/612] Update Italian language @rustdesk Please merge. Thanks. --- src/lang/it.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 9e845f840..07234b3f4 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -541,7 +541,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Change Color", "Modifica colore"), ("Primary Color", "Colore primario"), ("HSV Color", "Colore HSV"), - ("Installation Successful!", ""), - ("Installation failed!", ""), + ("Installation Successful!", "Installazione completata"), + ("Installation failed!", "Installazione fallita"), ].iter().cloned().collect(); } From 0af6f271c661b1a1c3e7455723ceb798856143a7 Mon Sep 17 00:00:00 2001 From: solokot Date: Fri, 8 Sep 2023 11:25:14 +0300 Subject: [PATCH 612/612] Update ru.rs --- src/lang/ru.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 253a48948..2f86351cb 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -28,7 +28,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Enable File Transfer", "Включить передачу файлов"), ("Enable TCP Tunneling", "Включить туннелирование TCP"), ("IP Whitelisting", "Список разрешённых IP-адресов"), - ("ID/Relay Server", "ID/Сервер ретрансляции"), + ("ID/Relay Server", "ID/Ретранслятор"), ("Import Server Config", "Импортировать конфигурацию сервера"), ("Export Server Config", "Экспортировать конфигурацию сервера"), ("Import server configuration successfully", "Конфигурация сервера успешно импортирована"), @@ -54,9 +54,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Enhancements", "Улучшения"), ("Hardware Codec", "Аппаратный кодек"), ("Adaptive bitrate", "Адаптивная скорость потока"), - ("ID Server", "ID-сервер"), - ("Relay Server", "Сервер ретрансляции"), - ("API Server", "API-сервер"), + ("ID Server", "Сервер ID"), + ("Relay Server", "Ретранслятор"), + ("API Server", "Сервер API"), ("invalid_http", "Адрес должен начинаться с http:// или https://"), ("Invalid IP", "Неправильный IP-адрес"), ("Invalid format", "Неправильный формат"), @@ -139,9 +139,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Remote desktop is offline", "Удалённый рабочий стол не в сети"), ("Key mismatch", "Несоответствие ключей"), ("Timeout", "Истекло время ожидания"), - ("Failed to connect to relay server", "Невозможно подключиться к серверу ретрансляции"), + ("Failed to connect to relay server", "Невозможно подключиться к ретранслятору"), ("Failed to connect via rendezvous server", "Невозможно подключиться через промежуточный сервер"), - ("Failed to connect via relay server", "Невозможно подключиться через сервер ретрансляции"), + ("Failed to connect via relay server", "Невозможно подключиться через ретранслятор"), ("Failed to make direct connection to remote desktop", "Невозможно установить прямое подключение к удалённому рабочему столу"), ("Set Password", "Установить пароль"), ("OS Password", "Пароль ОС"), @@ -454,7 +454,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Voice call", "Голосовой вызов"), ("Text chat", "Текстовый чат"), ("Stop voice call", "Завершить голосовой вызов"), - ("relay_hint_tip", "Прямое подключение может оказаться невозможным. В этом случае можно попытаться подключиться через сервер ретрансляции. \nКроме того, если вы хотите сразу использовать сервер ретрансляции, можно добавить к ID суффикс \"/r\" или включить \"Всегда подключаться через ретранслятор\" в настройках удалённого узла."), + ("relay_hint_tip", "Прямое подключение может оказаться невозможным. В этом случае можно попытаться подключиться через ретранслятор. \nКроме того, если вы хотите сразу использовать ретранслятор, можно добавить к ID суффикс \"/r\" или включить \"Всегда подключаться через ретранслятор\" в настройках удалённого узла."), ("Reconnect", "Переподключить"), ("Codec", "Кодек"), ("Resolution", "Разрешение"), @@ -540,8 +540,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("synced_peer_readded_tip", "Устройства, присутствовавшие в последних сеансах, будут синхронизированы с адресной книгой."), ("Change Color", "Изменить цвет"), ("Primary Color", "Основной цвет"), - ("HSV Color", "HSV цвет"), - ("Installation Successful!", ""), - ("Installation failed!", ""), + ("HSV Color", "Цвет HSV"), + ("Installation Successful!", "Установка выполнена успешно!"), + ("Installation failed!", "Установка не выполнена!"), ].iter().cloned().collect(); }

    +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 NG7^g76=KE#{|B%Sbv^(9 literal 16113 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

  • 8^^OmfN(Ows&UqqWhSJJk3d8+S?GG8zda+ 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≥tL{(pL`1q*puayF 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�N{z@fg(ZC_utX`Sw5F9b*N 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