diff --git a/Cargo.lock b/Cargo.lock index f1265da90..e846ef10a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -233,7 +233,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854" dependencies = [ "clipboard-win", - "core-graphics", + "core-graphics 0.22.3", "image", "log", "objc", @@ -560,6 +560,16 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitmask-enum" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49fb8528abca6895a5ada33d62aedd538a5c33e77068256483b44a3230270163" +dependencies = [ + "quote 1.0.27", + "syn 2.0.15", +] + [[package]] name = "bitvec" version = "1.0.1" @@ -587,6 +597,25 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-sys" +version = "0.1.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.2.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +dependencies = [ + "block-sys", + "objc2-encode", +] + [[package]] name = "blocking" version = "1.3.1" @@ -677,6 +706,23 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "cacao" +version = "0.4.0-beta2" +source = "git+https://github.com/clslaid/cacao?branch=feat/set-file-urls#f4940678214705214be9e0e800d566651c32fd20" +dependencies = [ + "bitmask-enum", + "block2", + "core-foundation 0.9.3 (git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd)", + "core-graphics 0.23.1", + "dispatch", + "lazy_static", + "libc", + "objc2", + "os_info", + "url", +] + [[package]] name = "cairo-rs" version = "0.16.7" @@ -931,6 +977,7 @@ checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" name = "clipboard" version = "0.1.0" dependencies = [ + "cacao", "cc", "dashmap", "fuser", @@ -987,9 +1034,9 @@ dependencies = [ "bitflags", "block", "cocoa-foundation", - "core-foundation", - "core-graphics", - "foreign-types", + "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.22.3", + "foreign-types 0.3.2", "libc", "objc", ] @@ -1002,9 +1049,9 @@ checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" dependencies = [ "bitflags", "block", - "core-foundation", - "core-graphics-types", - "foreign-types", + "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics-types 0.1.1", + "foreign-types 0.3.2", "libc", "objc", ] @@ -1136,6 +1183,15 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd#7d593d016175755e492a92ef89edca68ac3bd5cd" +dependencies = [ + "core-foundation-sys 0.8.6", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.6.2" @@ -1148,6 +1204,14 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd#7d593d016175755e492a92ef89edca68ac3bd5cd" +dependencies = [ + "objc2-encode", +] + [[package]] name = "core-graphics" version = "0.22.3" @@ -1155,12 +1219,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" dependencies = [ "bitflags", - "core-foundation", - "core-graphics-types", - "foreign-types", + "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics-types 0.1.1", + "foreign-types 0.3.2", "libc", ] +[[package]] +name = "core-graphics" +version = "0.23.1" +source = "git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd#7d593d016175755e492a92ef89edca68ac3bd5cd" +dependencies = [ + "bitflags", + "core-foundation 0.9.3 (git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd)", + "core-graphics-types 0.1.2", + "foreign-types 0.5.0", + "libc", + "objc2-encode", +] + [[package]] name = "core-graphics-types" version = "0.1.1" @@ -1168,11 +1245,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" dependencies = [ "bitflags", - "core-foundation", - "foreign-types", + "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types 0.3.2", "libc", ] +[[package]] +name = "core-graphics-types" +version = "0.1.2" +source = "git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd#7d593d016175755e492a92ef89edca68ac3bd5cd" +dependencies = [ + "bitflags", + "core-foundation 0.9.3 (git+https://github.com/madsmtm/core-foundation-rs.git?rev=7d593d016175755e492a92ef89edca68ac3bd5cd)", + "libc", + "objc2-encode", +] + [[package]] name = "coreaudio-rs" version = "0.11.2" @@ -1829,7 +1917,7 @@ dependencies = [ name = "enigo" version = "0.0.14" dependencies = [ - "core-graphics", + "core-graphics 0.22.3", "hbb_common", "log", "objc", @@ -2201,7 +2289,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2 1.0.63", + "quote 1.0.27", + "syn 2.0.15", ] [[package]] @@ -2210,6 +2319,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.1.0" @@ -3367,7 +3482,7 @@ dependencies = [ "anyhow", "apple-sys", "cfg-if 1.0.0", - "core-foundation", + "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", "shadow-rs", "windows 0.48.0", "winres", @@ -4123,6 +4238,32 @@ dependencies = [ "objc_id", ] +[[package]] +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + +[[package]] +name = "objc2" +version = "0.3.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a49f420f16c8814efdcd6b4258664de9d9920cbc26b6f95d034a1ca9850ccc2c" +dependencies = [ + "block2", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys", +] + [[package]] name = "objc_exception" version = "0.1.2" @@ -4229,6 +4370,17 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "os_info" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e" +dependencies = [ + "log", + "serde 1.0.163", + "winapi 0.3.9", +] + [[package]] name = "os_str_bytes" version = "6.5.0" @@ -4957,9 +5109,9 @@ version = "0.5.0-2" source = "git+https://github.com/fufesou/rdev#2e8221d653f4995c831ad52966e79a514516b1fa" dependencies = [ "cocoa", - "core-foundation", + "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation-sys 0.8.4", - "core-graphics", + "core-graphics 0.22.3", "dispatch", "enum-map", "epoll", @@ -5221,8 +5373,8 @@ dependencies = [ "clap 4.2.7", "clipboard", "cocoa", - "core-foundation", - "core-graphics", + "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.22.3", "cpal", "crossbeam-queue", "ctrlc", @@ -5511,7 +5663,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ "bitflags", - "core-foundation", + "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation-sys 0.8.4", "libc", "security-framework-sys", @@ -5927,7 +6079,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" dependencies = [ "bitflags", - "core-foundation", + "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", "system-configuration-sys", ] @@ -5988,8 +6140,8 @@ dependencies = [ "cairo-rs", "cc", "cocoa", - "core-foundation", - "core-graphics", + "core-foundation 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.22.3", "crossbeam-channel", "dispatch", "gdk", @@ -6121,7 +6273,7 @@ version = "0.6.1" source = "git+https://github.com/fufesou/The-Fat-Controller#9dd86151525fd010dc93f6bc9b6aedd1a75cc342" dependencies = [ "anyhow", - "core-graphics", + "core-graphics 0.22.3", "unicode-segmentation", "winapi 0.3.9", "x11 2.19.0", @@ -6433,7 +6585,7 @@ version = "0.5.1" source = "git+https://github.com/rustdesk-org/tray-icon#ef98e7b98abed2e3da614277eced12a85bfb717c" dependencies = [ "cocoa", - "core-graphics", + "core-graphics 0.22.3", "crossbeam-channel", "dirs-next", "libappindicator", diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index c4ca8dfa4..a4816d819 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -7,14 +7,14 @@ use std::{ }, }; -#[cfg(any(target_os = "windows", target_os = "linux"))] +#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] use clipboard::ContextSend; use crossbeam_queue::ArrayQueue; #[cfg(not(any(target_os = "android", target_os = "ios")))] use hbb_common::sleep; #[cfg(not(target_os = "ios"))] use hbb_common::tokio::sync::mpsc::error::TryRecvError; -#[cfg(any(target_os = "windows", target_os = "linux"))] +#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] use hbb_common::tokio::sync::Mutex as TokioMutex; use hbb_common::{ allow_err, @@ -66,7 +66,7 @@ pub struct Remote { last_update_jobs_status: (Instant, HashMap), is_connected: bool, first_frame: bool, - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] client_conn_id: i32, // used for file clipboard data_count: Arc, frame_count_map: Arc>>, @@ -101,7 +101,7 @@ impl Remote { last_update_jobs_status: (Instant::now(), Default::default()), is_connected: false, first_frame: false, - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] client_conn_id: 0, data_count: Arc::new(AtomicUsize::new(0)), frame_count_map, @@ -146,14 +146,14 @@ impl Remote { } // just build for now - #[cfg(not(any(target_os = "windows", target_os = "linux")))] + #[cfg(not(any(target_os = "windows", target_os = "linux", target_os = "macos")))] let (_tx_holder, mut rx_clip_client) = mpsc::unbounded_channel::(); - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] let (_tx_holder, rx) = mpsc::unbounded_channel(); - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] let mut rx_clip_client_lock = Arc::new(TokioMutex::new(rx)); - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] { let is_conn_not_default = self.handler.is_file_transfer() || self.handler.is_port_forward() @@ -164,7 +164,7 @@ impl Remote { clipboard::get_rx_cliprdr_client(&self.handler.id); }; } - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] let mut rx_clip_client = rx_clip_client_lock.lock().await; let mut status_timer = time::interval(Duration::new(1, 0)); @@ -210,7 +210,7 @@ impl Remote { } } _msg = rx_clip_client.recv() => { - #[cfg(any(target_os="windows", target_os="linux"))] + #[cfg(any(target_os="windows", target_os="linux", target_os = "macos"))] self.handle_local_clipboard_msg(&mut peer, _msg).await; } _ = self.timer.tick() => { @@ -278,7 +278,7 @@ impl Remote { Client::try_stop_clipboard(&self.handler.id); } - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] if _set_disconnected_ok { let conn_id = self.client_conn_id; log::debug!("try empty cliprdr for conn_id {}", conn_id); @@ -289,7 +289,7 @@ impl Remote { } } - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] async fn handle_local_clipboard_msg( &self, peer: &mut crate::client::FramedStream, @@ -1143,7 +1143,7 @@ impl Remote { } } } - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] Some(message::Union::Cliprdr(clip)) => { self.handle_cliprdr_msg(clip); } @@ -1704,7 +1704,7 @@ impl Remote { } fn check_clipboard_file_context(&self) { - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] { let enabled = *self.handler.server_file_transfer_enabled.read().unwrap() && self.handler.lc.read().unwrap().enable_file_transfer.v; diff --git a/src/lib.rs b/src/lib.rs index 631766a2d..8aa520579 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -58,7 +58,7 @@ mod ui_session_interface; mod hbbs_http; -#[cfg(any(target_os = "windows", target_os = "linux"))] +#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] pub mod clipboard_file; #[cfg(windows)] diff --git a/src/server/connection.rs b/src/server/connection.rs index d74f4815e..64e3e4d05 100644 --- a/src/server/connection.rs +++ b/src/server/connection.rs @@ -1,5 +1,5 @@ use super::{input_service::*, *}; -#[cfg(any(target_os = "windows", target_os = "linux"))] +#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] use crate::clipboard_file::*; #[cfg(not(any(target_os = "android", target_os = "ios")))] use crate::common::update_clipboard; @@ -192,7 +192,7 @@ pub struct Connection { // by peer disable_audio: bool, // by peer - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] enable_file_transfer: bool, // by peer audio_sender: Option, @@ -330,7 +330,7 @@ impl Connection { show_remote_cursor: false, ip: "".to_owned(), disable_audio: false, - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] enable_file_transfer: false, disable_clipboard: false, disable_keyboard: false, @@ -1236,7 +1236,7 @@ impl Connection { self.audio && !self.disable_audio } - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] fn file_transfer_enabled(&self) -> bool { self.file && self.enable_file_transfer } @@ -1806,7 +1806,7 @@ impl Connection { } Some(message::Union::Cliprdr(_clip)) => { - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] if let Some(clip) = msg_2_clip(_clip) { log::debug!("got clipfile from client peer"); self.send_to_cm(ipc::Data::ClipboardFile(clip)) @@ -2390,7 +2390,7 @@ impl Connection { } } } - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] if let Ok(q) = o.enable_file_transfer.enum_value() { if q != BoolOption::NotSet { self.enable_file_transfer = q == BoolOption::Yes; diff --git a/src/ui/header.tis b/src/ui/header.tis index e0af9eed7..d4b826728 100644 --- a/src/ui/header.tis +++ b/src/ui/header.tis @@ -196,7 +196,7 @@ class Header: Reactor.Component { {!cursor_embedded &&
  • {svg_checkmark}{translate('Show remote cursor')}
  • }
  • {svg_checkmark}{translate('Show quality monitor')}
  • {audio_enabled ?
  • {svg_checkmark}{translate('Mute')}
  • : ""} - {((is_win && pi.platform == "Windows")||(is_linux && pi.platform == "Linux")) && file_enabled ?
  • {svg_checkmark}{translate('Allow file copy and paste')}
  • : ""} + {((is_win && pi.platform == "Windows")||(is_linux && pi.platform == "Linux"))||(is_osx && pi.platform == "Mac OS") && file_enabled ?
  • {svg_checkmark}{translate('Allow file copy and paste')}
  • : ""} {keyboard_enabled && clipboard_enabled ?
  • {svg_checkmark}{translate('Disable clipboard')}
  • : ""} {keyboard_enabled ?
  • {svg_checkmark}{translate('Lock after session end')}
  • : ""} {keyboard_enabled && pi.platform == "Windows" ?
  • {svg_checkmark}{translate('Privacy mode')}
  • : ""} diff --git a/src/ui_cm_interface.rs b/src/ui_cm_interface.rs index 5baa852c3..6c5735bd9 100644 --- a/src/ui_cm_interface.rs +++ b/src/ui_cm_interface.rs @@ -1,6 +1,6 @@ #[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))] use std::iter::FromIterator; -#[cfg(any(target_os = "windows", target_os = "linux"))] +#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] use std::sync::Arc; use std::{ collections::HashMap, @@ -15,11 +15,11 @@ use std::{ use crate::ipc::Connection; #[cfg(not(any(target_os = "ios")))] use crate::ipc::{self, Data}; -#[cfg(any(target_os = "windows", target_os = "linux"))] +#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] use clipboard::ContextSend; #[cfg(not(any(target_os = "android", target_os = "ios")))] use hbb_common::tokio::sync::mpsc::unbounded_channel; -#[cfg(any(target_os = "windows", target_os = "linux"))] +#[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] use hbb_common::tokio::sync::Mutex as TokioMutex; use hbb_common::{ allow_err, @@ -70,9 +70,9 @@ struct IpcTaskRunner { close: bool, running: bool, conn_id: i32, - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] file_transfer_enabled: bool, - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] file_transfer_enabled_peer: bool, } @@ -165,7 +165,7 @@ impl ConnectionManager { } #[inline] - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] fn is_authorized(&self, id: i32) -> bool { CLIENTS .read() @@ -186,7 +186,7 @@ impl ConnectionManager { .map(|c| c.disconnected = true); } - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] { let _ = ContextSend::proc(|context| -> ResultType<()> { context.empty_clipboard(id)?; @@ -330,14 +330,14 @@ impl IpcTaskRunner { // for tmp use, without real conn id let mut write_jobs: Vec = Vec::new(); - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux"), target_os = "macos")] let is_authorized = self.cm.is_authorized(self.conn_id); - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] let rx_clip1; let mut rx_clip; let _tx_clip; - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] if self.conn_id > 0 && is_authorized { log::debug!("Clipboard is enabled from client peer: type 1"); rx_clip1 = clipboard::get_rx_cliprdr_server(self.conn_id); @@ -349,12 +349,12 @@ impl IpcTaskRunner { rx_clip1 = Arc::new(TokioMutex::new(rx_clip2)); rx_clip = rx_clip1.lock().await; } - #[cfg(not(any(target_os = "windows", target_os = "linux")))] + #[cfg(not(any(target_os = "windows", target_os = "linux", target_os = "macos")))] { (_tx_clip, rx_clip) = unbounded_channel::(); } - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] { if ContextSend::is_enabled() { log::debug!("Clipboard is enabled"); @@ -382,7 +382,7 @@ impl IpcTaskRunner { 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.conn_id = id; - #[cfg(any(target_os = "linux", target_os = "windows"))] + #[cfg(any(target_os = "linux", target_os = "windows", target_os = "macos"))] { self.file_transfer_enabled = _file_transfer_enabled; } @@ -425,7 +425,7 @@ impl IpcTaskRunner { } #[cfg(not(any(target_os = "android", target_os = "ios")))] Data::ClipboardFile(_clip) => { - #[cfg(any(target_os = "windows", target_os="linux"))] + #[cfg(any(target_os = "windows", target_os="linux", target_os = "macos"))] { let is_stopping_allowed = _clip.is_stopping_allowed_from_peer(); let is_clipboard_enabled = ContextSend::is_enabled(); @@ -450,7 +450,7 @@ impl IpcTaskRunner { } } Data::ClipboardFileEnabled(_enabled) => { - #[cfg(any(target_os= "windows",target_os ="linux"))] + #[cfg(any(target_os= "windows",target_os ="linux", target_os = "macos"))] { self.file_transfer_enabled_peer = _enabled; } @@ -489,7 +489,7 @@ impl IpcTaskRunner { } match &data { Data::SwitchPermission{name: _name, enabled: _enabled} => { - #[cfg(any(target_os="linux", target_os="windows"))] + #[cfg(any(target_os="linux", target_os="windows", target_os = "macos"))] if _name == "file" { self.file_transfer_enabled = *_enabled; } @@ -504,7 +504,7 @@ impl IpcTaskRunner { }, clip_file = rx_clip.recv() => match clip_file { Some(_clip) => { - #[cfg(any(target_os = "windows", target_os ="linux"))] + #[cfg(any(target_os = "windows", target_os ="linux", target_os = "macos"))] { let is_stopping_allowed = _clip.is_stopping_allowed(); let is_clipboard_enabled = ContextSend::is_enabled(); @@ -543,9 +543,9 @@ impl IpcTaskRunner { close: true, running: true, conn_id: 0, - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] file_transfer_enabled: false, - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] file_transfer_enabled_peer: false, }; @@ -580,7 +580,7 @@ pub async fn start_ipc(cm: ConnectionManager) { Config::get_option("enable-file-transfer").is_empty() ); - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] ContextSend::enable(Config::get_option("enable-file-transfer").is_empty()); match ipc::new_listener("_cm").await { diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 3e0de80db..de0baec0b 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -1007,7 +1007,7 @@ async fn check_connect_status_(reconnect: bool, rx: mpsc::UnboundedReceiver Session { #[tokio::main(flavor = "current_thread")] pub async fn io_loop(handler: Session, round: u32) { // It is ok to call this function multiple times. - #[cfg(any(target_os = "windows", target_os = "linux"))] + #[cfg(any(target_os = "windows", target_os = "linux", target_os = "macos"))] if !handler.is_file_transfer() && !handler.is_port_forward() { clipboard::ContextSend::enable(true); }