mirror of
https://github.com/weyne85/rustdesk.git
synced 2025-10-29 17:00:05 +00:00
@@ -825,7 +825,7 @@ impl VideoHandler {
|
||||
/// Handle a new video frame.
|
||||
pub fn handle_frame(&mut self, vf: VideoFrame) -> ResultType<bool> {
|
||||
if vf.timestamp != 0 {
|
||||
// Update the lantency controller with the latest timestamp.
|
||||
// Update the latency controller with the latest timestamp.
|
||||
self.latency_controller
|
||||
.lock()
|
||||
.unwrap()
|
||||
@@ -1662,7 +1662,7 @@ pub fn send_mouse(
|
||||
interface.send(Data::Message(msg_out));
|
||||
}
|
||||
|
||||
/// Avtivate OS by sending mouse movement.
|
||||
/// Activate OS by sending mouse movement.
|
||||
///
|
||||
/// # Arguments
|
||||
///
|
||||
@@ -1690,7 +1690,7 @@ fn activate_os(interface: &impl Interface) {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `p` - The password.
|
||||
/// * `avtivate` - Whether to activate OS.
|
||||
/// * `activate` - Whether to activate OS.
|
||||
/// * `interface` - The interface for sending data.
|
||||
pub fn input_os_password(p: String, activate: bool, interface: impl Interface) {
|
||||
std::thread::spawn(move || {
|
||||
@@ -1703,7 +1703,7 @@ pub fn input_os_password(p: String, activate: bool, interface: impl Interface) {
|
||||
/// # Arguments
|
||||
///
|
||||
/// * `p` - The password.
|
||||
/// * `avtivate` - Whether to activate OS.
|
||||
/// * `activate` - Whether to activate OS.
|
||||
/// * `interface` - The interface for sending data.
|
||||
fn _input_os_password(p: String, activate: bool, interface: impl Interface) {
|
||||
if activate {
|
||||
|
||||
@@ -15,7 +15,7 @@ const MIN_LATENCY: i64 = 100;
|
||||
/// Only sync the audio to video, not the other way around.
|
||||
#[derive(Debug)]
|
||||
pub struct LatencyController {
|
||||
last_video_remote_ts: i64, // generated on remote deivce
|
||||
last_video_remote_ts: i64, // generated on remote device
|
||||
update_time: Instant,
|
||||
allow_audio: bool,
|
||||
}
|
||||
|
||||
@@ -728,11 +728,11 @@ impl<T: InvokeUiSession> Remote<T> {
|
||||
self.handler.adapt_size();
|
||||
self.send_opts_after_login(peer).await;
|
||||
}
|
||||
let incomming_format = CodecFormat::from(&vf);
|
||||
if self.video_format != incomming_format {
|
||||
self.video_format = incomming_format.clone();
|
||||
let incoming_format = CodecFormat::from(&vf);
|
||||
if self.video_format != incoming_format {
|
||||
self.video_format = incoming_format.clone();
|
||||
self.handler.update_quality_status(QualityStatus {
|
||||
codec_format: Some(incomming_format),
|
||||
codec_format: Some(incoming_format),
|
||||
..Default::default()
|
||||
})
|
||||
};
|
||||
@@ -915,7 +915,7 @@ impl<T: InvokeUiSession> Remote<T> {
|
||||
}
|
||||
},
|
||||
Err(err) => {
|
||||
println!("error recving digest: {}", err);
|
||||
println!("error receiving digest: {}", err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
use clipboard::ClipbaordFile;
|
||||
use clipboard::ClipboardFile;
|
||||
use hbb_common::message_proto::*;
|
||||
|
||||
pub fn clip_2_msg(clip: ClipbaordFile) -> Message {
|
||||
pub fn clip_2_msg(clip: ClipboardFile) -> Message {
|
||||
match clip {
|
||||
ClipbaordFile::MonitorReady => Message {
|
||||
ClipboardFile::MonitorReady => Message {
|
||||
union: Some(message::Union::Cliprdr(Cliprdr {
|
||||
union: Some(cliprdr::Union::Ready(CliprdrMonitorReady {
|
||||
..Default::default()
|
||||
@@ -12,7 +12,7 @@ pub fn clip_2_msg(clip: ClipbaordFile) -> Message {
|
||||
})),
|
||||
..Default::default()
|
||||
},
|
||||
ClipbaordFile::FormatList { format_list } => {
|
||||
ClipboardFile::FormatList { format_list } => {
|
||||
let mut formats: Vec<CliprdrFormat> = Vec::new();
|
||||
for v in format_list.iter() {
|
||||
formats.push(CliprdrFormat {
|
||||
@@ -32,7 +32,7 @@ pub fn clip_2_msg(clip: ClipbaordFile) -> Message {
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
ClipbaordFile::FormatListResponse { msg_flags } => Message {
|
||||
ClipboardFile::FormatListResponse { msg_flags } => Message {
|
||||
union: Some(message::Union::Cliprdr(Cliprdr {
|
||||
union: Some(cliprdr::Union::FormatListResponse(
|
||||
CliprdrServerFormatListResponse {
|
||||
@@ -44,7 +44,7 @@ pub fn clip_2_msg(clip: ClipbaordFile) -> Message {
|
||||
})),
|
||||
..Default::default()
|
||||
},
|
||||
ClipbaordFile::FormatDataRequest {
|
||||
ClipboardFile::FormatDataRequest {
|
||||
requested_format_id,
|
||||
} => Message {
|
||||
union: Some(message::Union::Cliprdr(Cliprdr {
|
||||
@@ -58,7 +58,7 @@ pub fn clip_2_msg(clip: ClipbaordFile) -> Message {
|
||||
})),
|
||||
..Default::default()
|
||||
},
|
||||
ClipbaordFile::FormatDataResponse {
|
||||
ClipboardFile::FormatDataResponse {
|
||||
msg_flags,
|
||||
format_data,
|
||||
} => Message {
|
||||
@@ -74,7 +74,7 @@ pub fn clip_2_msg(clip: ClipbaordFile) -> Message {
|
||||
})),
|
||||
..Default::default()
|
||||
},
|
||||
ClipbaordFile::FileContentsRequest {
|
||||
ClipboardFile::FileContentsRequest {
|
||||
stream_id,
|
||||
list_index,
|
||||
dw_flags,
|
||||
@@ -102,7 +102,7 @@ pub fn clip_2_msg(clip: ClipbaordFile) -> Message {
|
||||
})),
|
||||
..Default::default()
|
||||
},
|
||||
ClipbaordFile::FileContentsResponse {
|
||||
ClipboardFile::FileContentsResponse {
|
||||
msg_flags,
|
||||
stream_id,
|
||||
requested_data,
|
||||
@@ -123,28 +123,28 @@ pub fn clip_2_msg(clip: ClipbaordFile) -> Message {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn msg_2_clip(msg: Cliprdr) -> Option<ClipbaordFile> {
|
||||
pub fn msg_2_clip(msg: Cliprdr) -> Option<ClipboardFile> {
|
||||
match msg.union {
|
||||
Some(cliprdr::Union::Ready(_)) => Some(ClipbaordFile::MonitorReady),
|
||||
Some(cliprdr::Union::Ready(_)) => Some(ClipboardFile::MonitorReady),
|
||||
Some(cliprdr::Union::FormatList(data)) => {
|
||||
let mut format_list: Vec<(i32, String)> = Vec::new();
|
||||
for v in data.formats.iter() {
|
||||
format_list.push((v.id, v.format.clone()));
|
||||
}
|
||||
Some(ClipbaordFile::FormatList { format_list })
|
||||
Some(ClipboardFile::FormatList { format_list })
|
||||
}
|
||||
Some(cliprdr::Union::FormatListResponse(data)) => Some(ClipbaordFile::FormatListResponse {
|
||||
Some(cliprdr::Union::FormatListResponse(data)) => Some(ClipboardFile::FormatListResponse {
|
||||
msg_flags: data.msg_flags,
|
||||
}),
|
||||
Some(cliprdr::Union::FormatDataRequest(data)) => Some(ClipbaordFile::FormatDataRequest {
|
||||
Some(cliprdr::Union::FormatDataRequest(data)) => Some(ClipboardFile::FormatDataRequest {
|
||||
requested_format_id: data.requested_format_id,
|
||||
}),
|
||||
Some(cliprdr::Union::FormatDataResponse(data)) => Some(ClipbaordFile::FormatDataResponse {
|
||||
Some(cliprdr::Union::FormatDataResponse(data)) => Some(ClipboardFile::FormatDataResponse {
|
||||
msg_flags: data.msg_flags,
|
||||
format_data: data.format_data.into(),
|
||||
}),
|
||||
Some(cliprdr::Union::FileContentsRequest(data)) => {
|
||||
Some(ClipbaordFile::FileContentsRequest {
|
||||
Some(ClipboardFile::FileContentsRequest {
|
||||
stream_id: data.stream_id,
|
||||
list_index: data.list_index,
|
||||
dw_flags: data.dw_flags,
|
||||
@@ -156,7 +156,7 @@ pub fn msg_2_clip(msg: Cliprdr) -> Option<ClipbaordFile> {
|
||||
})
|
||||
}
|
||||
Some(cliprdr::Union::FileContentsResponse(data)) => {
|
||||
Some(ClipbaordFile::FileContentsResponse {
|
||||
Some(ClipboardFile::FileContentsResponse {
|
||||
msg_flags: data.msg_flags,
|
||||
stream_id: data.stream_id,
|
||||
requested_data: data.requested_data.into(),
|
||||
|
||||
@@ -9,7 +9,7 @@ use parity_tokio_ipc::{
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
|
||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||
pub use clipboard::ClipbaordFile;
|
||||
pub use clipboard::ClipboardFile;
|
||||
use hbb_common::{
|
||||
allow_err, bail, bytes,
|
||||
bytes_codec::BytesCodec,
|
||||
@@ -191,7 +191,7 @@ pub enum Data {
|
||||
Test,
|
||||
SyncConfig(Option<(Config, Config2)>),
|
||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||
ClipbaordFile(ClipbaordFile),
|
||||
ClipboardFile(ClipboardFile),
|
||||
ClipboardFileEnabled(bool),
|
||||
PrivacyModeState((i32, PrivacyModeState)),
|
||||
TestRendezvousServer,
|
||||
|
||||
@@ -13,7 +13,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("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\")"),
|
||||
("whitelist_tip", "Only whitelisted IP can access me"),
|
||||
("whitelist_sep", "Seperated by comma, semicolon, spaces or new line"),
|
||||
("whitelist_sep", "Separated by comma, semicolon, spaces or new line"),
|
||||
("Wrong credentials", "Wrong username or password"),
|
||||
("invalid_http", "must start with http:// or https://"),
|
||||
("install_daemon_tip", "For starting on boot, you need to install system service."),
|
||||
|
||||
@@ -707,9 +707,9 @@ pub fn get_double_click_time() -> u32 {
|
||||
unsafe {
|
||||
let mut double_click_time = 0u32;
|
||||
let property = std::ffi::CString::new("gtk-double-click-time").unwrap();
|
||||
let setings = gtk_settings_get_default();
|
||||
let settings = gtk_settings_get_default();
|
||||
g_object_get(
|
||||
setings,
|
||||
settings,
|
||||
property.as_ptr(),
|
||||
&mut double_click_time as *mut u32,
|
||||
0 as *const libc::c_void,
|
||||
|
||||
@@ -331,7 +331,7 @@ pub fn get_cursor_data(hcursor: u64) -> ResultType<CursorData> {
|
||||
*/
|
||||
let mut colors: Vec<u8> = Vec::new();
|
||||
colors.reserve((size.height * size.width) as usize * 4);
|
||||
// TIFF is rgb colrspace, no need to convert
|
||||
// TIFF is rgb colorspace, no need to convert
|
||||
// let cs: id = msg_send![class!(NSColorSpace), sRGBColorSpace];
|
||||
for y in 0..(size.height as _) {
|
||||
for x in 0..(size.width as _) {
|
||||
@@ -440,7 +440,7 @@ pub fn start_os_service() {
|
||||
.status()
|
||||
.ok();
|
||||
println!("The others killed");
|
||||
// launchctl load/unload/start agent not work in daemon, show not priviledged.
|
||||
// launchctl load/unload/start agent not work in daemon, show not privileged.
|
||||
// sudo launchctl asuser 501 open -n also not allowed.
|
||||
std::process::Command::new("launchctl")
|
||||
.args(&[
|
||||
|
||||
@@ -469,10 +469,10 @@ impl RendezvousMediator {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn get_relay_server(&self, provided_by_rendzvous_server: String) -> String {
|
||||
fn get_relay_server(&self, provided_by_rendezvous_server: String) -> String {
|
||||
let mut relay_server = Config::get_option("relay-server");
|
||||
if relay_server.is_empty() {
|
||||
relay_server = provided_by_rendzvous_server;
|
||||
relay_server = provided_by_rendezvous_server;
|
||||
}
|
||||
if relay_server.is_empty() {
|
||||
relay_server = crate::increase_port(&self.host, 1);
|
||||
|
||||
@@ -148,7 +148,7 @@ impl Connection {
|
||||
..Default::default()
|
||||
};
|
||||
let (tx_from_cm_holder, mut rx_from_cm) = mpsc::unbounded_channel::<ipc::Data>();
|
||||
// holding tx_from_cm_holde to avoid cpu burning of rx_from_cm.recv when all sender closed
|
||||
// holding tx_from_cm_holder to avoid cpu burning of rx_from_cm.recv when all sender closed
|
||||
let tx_from_cm = tx_from_cm_holder.clone();
|
||||
let (tx_to_cm, rx_to_cm) = mpsc::unbounded_channel::<ipc::Data>();
|
||||
let (tx, mut rx) = mpsc::unbounded_channel::<(Instant, Arc<Message>)>();
|
||||
@@ -319,7 +319,7 @@ impl Connection {
|
||||
allow_err!(conn.stream.send_raw(bytes).await);
|
||||
}
|
||||
#[cfg(windows)]
|
||||
ipc::Data::ClipbaordFile(_clip) => {
|
||||
ipc::Data::ClipboardFile(_clip) => {
|
||||
if conn.file_transfer_enabled() {
|
||||
allow_err!(conn.stream.send(&clip_2_msg(_clip)).await);
|
||||
}
|
||||
@@ -593,7 +593,7 @@ impl Connection {
|
||||
Some(data) = rx_from_cm.recv() => {
|
||||
match data {
|
||||
ipc::Data::Close => {
|
||||
bail!("Close requested from selfection manager");
|
||||
bail!("Close requested from selection manager");
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
@@ -663,7 +663,7 @@ impl Connection {
|
||||
self.send_login_error("Your ip is blocked by the peer")
|
||||
.await;
|
||||
Self::post_alarm_audit(
|
||||
AlarmAuditType::IpWhiltelist, //"ip whiltelist",
|
||||
AlarmAuditType::IpWhitelist, //"ip whitelist",
|
||||
true,
|
||||
json!({
|
||||
"ip":addr.ip(),
|
||||
@@ -1309,7 +1309,7 @@ impl Connection {
|
||||
if self.file_transfer_enabled() {
|
||||
#[cfg(windows)]
|
||||
if let Some(clip) = msg_2_clip(_clip) {
|
||||
self.send_to_cm(ipc::Data::ClipbaordFile(clip))
|
||||
self.send_to_cm(ipc::Data::ClipboardFile(clip))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1857,8 +1857,8 @@ mod privacy_mode {
|
||||
pub(super) fn turn_on_privacy(_conn_id: i32) -> ResultType<bool> {
|
||||
#[cfg(windows)]
|
||||
{
|
||||
let plugin_exitst = crate::ui::win_privacy::turn_on_privacy(_conn_id)?;
|
||||
Ok(plugin_exitst)
|
||||
let plugin_exist = crate::ui::win_privacy::turn_on_privacy(_conn_id)?;
|
||||
Ok(plugin_exist)
|
||||
}
|
||||
#[cfg(not(windows))]
|
||||
{
|
||||
@@ -1875,7 +1875,7 @@ struct ConnAuditResponse {
|
||||
}
|
||||
|
||||
pub enum AlarmAuditType {
|
||||
IpWhiltelist = 0,
|
||||
IpWhitelist = 0,
|
||||
ManyWrongPassword = 1,
|
||||
FrequentAttempt = 2,
|
||||
}
|
||||
|
||||
@@ -487,7 +487,7 @@ fn active_mouse_(conn: i32) -> bool {
|
||||
return false;
|
||||
}
|
||||
|
||||
let in_actived_dist = |a: i32, b: i32| -> bool { (a - b).abs() < MOUSE_ACTIVE_DISTANCE };
|
||||
let in_active_dist = |a: i32, b: i32| -> bool { (a - b).abs() < MOUSE_ACTIVE_DISTANCE };
|
||||
|
||||
// Check if input is in valid range
|
||||
match crate::get_cursor_pos() {
|
||||
@@ -496,7 +496,7 @@ fn active_mouse_(conn: i32) -> bool {
|
||||
let lock = LATEST_PEER_INPUT_CURSOR.lock().unwrap();
|
||||
(lock.x, lock.y)
|
||||
};
|
||||
let mut can_active = in_actived_dist(last_in_x, x) && in_actived_dist(last_in_y, y);
|
||||
let mut can_active = in_active_dist(last_in_x, x) && in_active_dist(last_in_y, y);
|
||||
// The cursor may not have been moved to last input position if system is busy now.
|
||||
// While this is not a common case, we check it again after some time later.
|
||||
if !can_active {
|
||||
@@ -505,7 +505,7 @@ fn active_mouse_(conn: i32) -> bool {
|
||||
std::thread::sleep(std::time::Duration::from_micros(10));
|
||||
// Sleep here can also somehow suppress delay accumulation.
|
||||
if let Some((x2, y2)) = crate::get_cursor_pos() {
|
||||
can_active = in_actived_dist(last_in_x, x2) && in_actived_dist(last_in_y, y2);
|
||||
can_active = in_active_dist(last_in_x, x2) && in_active_dist(last_in_y, y2);
|
||||
}
|
||||
}
|
||||
if !can_active {
|
||||
|
||||
@@ -203,7 +203,7 @@ mod utils {
|
||||
}
|
||||
}
|
||||
|
||||
// functions called in seperate SYSTEM user process.
|
||||
// functions called in separate SYSTEM user process.
|
||||
pub mod server {
|
||||
use super::*;
|
||||
|
||||
@@ -407,7 +407,7 @@ pub mod server {
|
||||
}
|
||||
ConnCount(Some(n)) => {
|
||||
if n == 0 {
|
||||
log::info!("Connnection count equals 0, exit");
|
||||
log::info!("Connection count equals 0, exit");
|
||||
stream.send(&Data::DataPortableService(WillClose)).await.ok();
|
||||
break;
|
||||
}
|
||||
@@ -756,7 +756,7 @@ pub mod client {
|
||||
log::info!("portable service status mismatch");
|
||||
}
|
||||
if portable_service_running {
|
||||
log::info!("Create shared memeory capturer");
|
||||
log::info!("Create shared memory capturer");
|
||||
return Ok(Box::new(CapturerPortable::new(current_display, use_yuv)));
|
||||
} else {
|
||||
log::debug!("Create capturer dxgi|gdi");
|
||||
|
||||
@@ -309,9 +309,9 @@ pub fn test_create_capturer(privacy_mode_id: i32, timeout_millis: u64) -> bool {
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
fn check_uac_switch(privacy_mode_id: i32, captuerer_privacy_mode_id: i32) -> ResultType<()> {
|
||||
if captuerer_privacy_mode_id != 0 {
|
||||
if privacy_mode_id != captuerer_privacy_mode_id {
|
||||
fn check_uac_switch(privacy_mode_id: i32, capturer_privacy_mode_id: i32) -> ResultType<()> {
|
||||
if capturer_privacy_mode_id != 0 {
|
||||
if privacy_mode_id != capturer_privacy_mode_id {
|
||||
if !crate::ui::win_privacy::is_process_consent_running()? {
|
||||
bail!("consent.exe is running");
|
||||
}
|
||||
@@ -330,7 +330,7 @@ pub(super) struct CapturerInfo {
|
||||
pub ndisplay: usize,
|
||||
pub current: usize,
|
||||
pub privacy_mode_id: i32,
|
||||
pub _captuerer_privacy_mode_id: i32,
|
||||
pub _capturer_privacy_mode_id: i32,
|
||||
pub capturer: Box<dyn TraitCapturer>,
|
||||
}
|
||||
|
||||
@@ -371,29 +371,29 @@ fn get_capturer(use_yuv: bool, portable_service_running: bool) -> ResultType<Cap
|
||||
|
||||
let privacy_mode_id = *PRIVACY_MODE_CONN_ID.lock().unwrap();
|
||||
#[cfg(not(windows))]
|
||||
let captuerer_privacy_mode_id = privacy_mode_id;
|
||||
let capturer_privacy_mode_id = privacy_mode_id;
|
||||
#[cfg(windows)]
|
||||
let mut captuerer_privacy_mode_id = privacy_mode_id;
|
||||
let mut capturer_privacy_mode_id = privacy_mode_id;
|
||||
#[cfg(windows)]
|
||||
if captuerer_privacy_mode_id != 0 {
|
||||
if capturer_privacy_mode_id != 0 {
|
||||
if crate::ui::win_privacy::is_process_consent_running()? {
|
||||
captuerer_privacy_mode_id = 0;
|
||||
capturer_privacy_mode_id = 0;
|
||||
}
|
||||
}
|
||||
log::debug!(
|
||||
"Try create capturer with captuerer privacy mode id {}",
|
||||
captuerer_privacy_mode_id,
|
||||
"Try create capturer with capturer privacy mode id {}",
|
||||
capturer_privacy_mode_id,
|
||||
);
|
||||
|
||||
if privacy_mode_id != 0 {
|
||||
if privacy_mode_id != captuerer_privacy_mode_id {
|
||||
if privacy_mode_id != capturer_privacy_mode_id {
|
||||
log::info!("In privacy mode, but show UAC prompt window for now");
|
||||
} else {
|
||||
log::info!("In privacy mode, the peer side cannot watch the screen");
|
||||
}
|
||||
}
|
||||
let capturer = create_capturer(
|
||||
captuerer_privacy_mode_id,
|
||||
capturer_privacy_mode_id,
|
||||
display,
|
||||
use_yuv,
|
||||
current,
|
||||
@@ -406,7 +406,7 @@ fn get_capturer(use_yuv: bool, portable_service_running: bool) -> ResultType<Cap
|
||||
ndisplay,
|
||||
current,
|
||||
privacy_mode_id,
|
||||
_captuerer_privacy_mode_id: captuerer_privacy_mode_id,
|
||||
_capturer_privacy_mode_id: capturer_privacy_mode_id,
|
||||
capturer,
|
||||
})
|
||||
}
|
||||
@@ -493,7 +493,7 @@ fn run(sp: GenericService) -> ResultType<()> {
|
||||
|
||||
while sp.ok() {
|
||||
#[cfg(windows)]
|
||||
check_uac_switch(c.privacy_mode_id, c._captuerer_privacy_mode_id)?;
|
||||
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() {
|
||||
@@ -602,7 +602,7 @@ fn run(sp: GenericService) -> ResultType<()> {
|
||||
if !scrap::is_x11() {
|
||||
if would_block_count >= 100 {
|
||||
super::wayland::release_resource();
|
||||
bail!("Wayland capturer none 100 times, try restart captuere");
|
||||
bail!("Wayland capturer none 100 times, try restart capture");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -637,7 +637,7 @@ fn run(sp: GenericService) -> ResultType<()> {
|
||||
while wait_begin.elapsed().as_millis() < timeout_millis as _ {
|
||||
check_privacy_mode_changed(&sp, c.privacy_mode_id)?;
|
||||
#[cfg(windows)]
|
||||
check_uac_switch(c.privacy_mode_id, c._captuerer_privacy_mode_id)?;
|
||||
check_uac_switch(c.privacy_mode_id, c._capturer_privacy_mode_id)?;
|
||||
frame_controller.try_wait_next(&mut fetched_conn_ids, 300);
|
||||
// break if all connections have received current frame
|
||||
if fetched_conn_ids.len() >= frame_controller.send_conn_ids.len() {
|
||||
|
||||
@@ -276,7 +276,7 @@ pub(super) fn get_capturer() -> ResultType<super::video_service::CapturerInfo> {
|
||||
ndisplay: cap_display_info.num,
|
||||
current: cap_display_info.current,
|
||||
privacy_mode_id: 0,
|
||||
_captuerer_privacy_mode_id: 0,
|
||||
_capturer_privacy_mode_id: 0,
|
||||
capturer: Box::new(cap_display_info.capturer.clone()),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class Body: Reactor.Component
|
||||
var disconnected = c.disconnected;
|
||||
var show_elevation_btn = handler.can_elevate() && show_elevation && !c.is_file_transfer && c.port_forward.length == 0;
|
||||
var show_accept_btn = handler.get_option('approve-mode') != 'password';
|
||||
// below size:* is work around for Linux, it already set in css, but not work, shit sciter
|
||||
// below size:* is a workaround for Linux, it already set in css, but not work, shit sciter
|
||||
return <div .content style="size:*">
|
||||
<div .left-panel>
|
||||
<div .icon-and-id>
|
||||
@@ -42,7 +42,7 @@ class Body: Reactor.Component
|
||||
<div .id style="font-weight: bold; font-size: 1.2em;">{c.name}</div>
|
||||
<div .id>({c.peer_id})</div>
|
||||
<div style="margin-top: 1.2em">{auth
|
||||
? <span>{disconnected ? translate('Disconnected') : translate('Connected')}{" "}<span #time>{getElaspsed(c.time, c.now)}</span></span>
|
||||
? <span>{disconnected ? translate('Disconnected') : translate('Connected')}{" "}<span #time>{getElapsed(c.time, c.now)}</span></span>
|
||||
: <span>{translate('Request access to your device')}{"..."}</span>}
|
||||
</div>
|
||||
</div>
|
||||
@@ -442,7 +442,7 @@ function self.ready() {
|
||||
view.move(sw - w, 0, w, h);
|
||||
}
|
||||
|
||||
function getElaspsed(time, now) {
|
||||
function getElapsed(time, now) {
|
||||
var seconds = Date.diff(time, now, #seconds);
|
||||
var hours = seconds / 3600;
|
||||
var days = hours / 24;
|
||||
@@ -482,7 +482,7 @@ function updateTime() {
|
||||
if (el) {
|
||||
var c = connections[body.cur];
|
||||
if (c && c.authorized && !c.disconnected) {
|
||||
el.text = getElaspsed(c.time, c.now);
|
||||
el.text = getElapsed(c.time, c.now);
|
||||
}
|
||||
}
|
||||
updateTime();
|
||||
|
||||
@@ -13,7 +13,7 @@ class Install: Reactor.Component {
|
||||
</div>
|
||||
<div><button|checkbox #startmenu checked>{translate('Create start menu shortcuts')}</button></div>
|
||||
<div><button|checkbox #desktopicon checked>{translate('Create desktop icon')}</button></div>
|
||||
<div #aggrement .link style="margin-top: 2em;">{translate('End-user license agreement')}</div>
|
||||
<div #agreement .link style="margin-top: 2em;">{translate('End-user license agreement')}</div>
|
||||
<div>{translate('agreement_tip')}</div>
|
||||
<div style="height: 1px; background: gray; margin-top: 1em" />
|
||||
<div style="text-align: right;">
|
||||
@@ -46,7 +46,7 @@ class Install: Reactor.Component {
|
||||
}
|
||||
}
|
||||
|
||||
event click $(#aggrement) {
|
||||
event click $(#agreement) {
|
||||
view.open_url("http://rustdesk.com/privacy");
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ impl DelegateState {
|
||||
}
|
||||
}
|
||||
|
||||
static mut LAUCHED: bool = false;
|
||||
static mut LAUNCHED: bool = false;
|
||||
|
||||
impl AppHandler for Rc<Host> {
|
||||
fn command(&mut self, cmd: u32) {
|
||||
@@ -109,7 +109,7 @@ unsafe fn set_delegate(handler: Option<Box<dyn AppHandler>>) {
|
||||
|
||||
extern "C" fn application_did_finish_launching(_this: &mut Object, _: Sel, _notification: id) {
|
||||
unsafe {
|
||||
LAUCHED = true;
|
||||
LAUNCHED = true;
|
||||
}
|
||||
unsafe {
|
||||
let () = msg_send![NSApp(), activateIgnoringOtherApps: YES];
|
||||
@@ -122,7 +122,7 @@ extern "C" fn application_should_handle_open_untitled_file(
|
||||
_sender: id,
|
||||
) -> BOOL {
|
||||
unsafe {
|
||||
if !LAUCHED {
|
||||
if !LAUNCHED {
|
||||
return YES;
|
||||
}
|
||||
hbb_common::log::debug!("icon clicked on finder");
|
||||
|
||||
@@ -120,7 +120,7 @@ function resetWheel() {
|
||||
|
||||
var INERTIA_ACCELERATION = 30;
|
||||
|
||||
// not good, precision not enough to simulate accelation effect,
|
||||
// not good, precision not enough to simulate acceleration effect,
|
||||
// seems have to use pixel based rather line based delta
|
||||
function accWheel(v, is_x) {
|
||||
if (wheeling) return;
|
||||
|
||||
@@ -253,7 +253,7 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
|
||||
if !pre_enabled && ContextSend::is_enabled() {
|
||||
allow_err!(
|
||||
self.stream
|
||||
.send(&Data::ClipbaordFile(clipboard::ClipbaordFile::MonitorReady))
|
||||
.send(&Data::ClipboardFile(clipboard::ClipboardFile::MonitorReady))
|
||||
.await
|
||||
);
|
||||
}
|
||||
@@ -288,7 +288,7 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
|
||||
rx_clip = rx_clip1.lock().await;
|
||||
} else {
|
||||
let rx_clip2;
|
||||
(_tx_clip, rx_clip2) = unbounded_channel::<clipboard::ClipbaordFile>();
|
||||
(_tx_clip, rx_clip2) = unbounded_channel::<clipboard::ClipboardFile>();
|
||||
rx_clip1 = Arc::new(TokioMutex::new(rx_clip2));
|
||||
rx_clip = rx_clip1.lock().await;
|
||||
}
|
||||
@@ -354,7 +354,7 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
|
||||
}
|
||||
}
|
||||
#[cfg(windows)]
|
||||
Data::ClipbaordFile(_clip) => {
|
||||
Data::ClipboardFile(_clip) => {
|
||||
#[cfg(windows)]
|
||||
{
|
||||
let conn_id = self.conn_id;
|
||||
@@ -394,7 +394,7 @@ impl<T: InvokeUiCM> IpcTaskRunner<T> {
|
||||
clip_file = rx_clip.recv() => match clip_file {
|
||||
Some(_clip) => {
|
||||
#[cfg(windows)]
|
||||
allow_err!(self.tx.send(Data::ClipbaordFile(_clip)));
|
||||
allow_err!(self.tx.send(Data::ClipboardFile(_clip)));
|
||||
}
|
||||
None => {
|
||||
//
|
||||
|
||||
@@ -936,7 +936,7 @@ pub fn account_auth_result() -> String {
|
||||
serde_json::to_string(&account::OidcSession::get_result()).unwrap_or_default()
|
||||
}
|
||||
|
||||
// notice: avoiding create ipc connecton repeatly,
|
||||
// notice: avoiding create ipc connection repeatedly,
|
||||
// because windows named pipe has serious memory leak issue.
|
||||
#[tokio::main(flavor = "current_thread")]
|
||||
async fn check_connect_status_(reconnect: bool, rx: mpsc::UnboundedReceiver<ipc::Data>) {
|
||||
|
||||
Reference in New Issue
Block a user