fix config sync when uninstall service

This commit is contained in:
rustdesk 2023-06-09 13:35:03 +08:00
parent 896b233f87
commit 22a5399588
2 changed files with 20 additions and 11 deletions

View File

@ -1119,13 +1119,25 @@ pub fn run_me_with(secs: u32) {
.ok(); .ok();
} }
fn switch_service(stop: bool) -> String {
let home = std::env::var("HOME").unwrap_or_default();
Config::set_option("stop-service".into(), if stop { "Y" } else { "" }.into());
if home != "/root" && !Config::get().is_empty() {
format!("cp -f {home}/.config/rustdesk/RustDesk.toml /root/.config/rustdesk/; cp -f {home}/.config/rustdesk/RustDesk2.toml /root/.config/rustdesk/;")
} else {
"".to_owned()
}
}
pub fn uninstall_service(show_new_window: bool) -> bool { pub fn uninstall_service(show_new_window: bool) -> bool {
if !has_cmd("systemctl") { if !has_cmd("systemctl") {
return false; return false;
} }
log::info!("Uninstalling service..."); log::info!("Uninstalling service...");
Config::set_option("stop-service".into(), "Y".into()); let cp = switch_service(true);
if !run_cmds_pkexec("systemctl disable rustdesk; systemctl stop rustdesk") { if !run_cmds_pkexec(&format!(
"{cp} systemctl disable rustdesk; systemctl stop rustdesk"
)) {
Config::set_option("stop-service".into(), "".into()); Config::set_option("stop-service".into(), "".into());
return true; return true;
} }
@ -1140,13 +1152,7 @@ pub fn install_service() -> bool {
return false; return false;
} }
log::info!("Installing service..."); log::info!("Installing service...");
let home = std::env::var("HOME").unwrap_or_default(); let cp = switch_service(false);
let cp = if home != "/root" && !Config::get().is_empty() {
format!("cp -f {home}/.config/rustdesk/RustDesk.toml /root/.config/rustdesk/; cp -f {home}/.config/rustdesk/RustDesk2.toml /root/.config/rustdesk/;")
} else {
"".to_owned()
};
Config::set_option("stop-service".into(), "".into());
if !run_cmds_pkexec(&format!( if !run_cmds_pkexec(&format!(
"{cp}systemctl enable rustdesk; systemctl start rustdesk" "{cp}systemctl enable rustdesk; systemctl start rustdesk"
)) { )) {

View File

@ -62,6 +62,9 @@ pub mod video_service;
pub type Childs = Arc<Mutex<Vec<std::process::Child>>>; pub type Childs = Arc<Mutex<Vec<std::process::Child>>>;
type ConnMap = HashMap<i32, ConnInner>; type ConnMap = HashMap<i32, ConnInner>;
#[cfg(any(target_os = "macos", target_os = "linux"))]
const CONFIG_SYNC_INTERVAL_SECS: f32 = 0.3;
lazy_static::lazy_static! { lazy_static::lazy_static! {
pub static ref CHILD_PROCESS: Childs = Default::default(); pub static ref CHILD_PROCESS: Childs = Default::default();
pub static ref CONN_COUNT: Arc<Mutex<usize>> = Default::default(); pub static ref CONN_COUNT: Arc<Mutex<usize>> = Default::default();
@ -477,7 +480,7 @@ async fn sync_and_watch_config_dir() {
log::debug!("#tries of ipc service connection: {}", tries); log::debug!("#tries of ipc service connection: {}", tries);
use hbb_common::sleep; use hbb_common::sleep;
for i in 1..=tries { for i in 1..=tries {
sleep(i as f32 * 0.3).await; sleep(i as f32 * CONFIG_SYNC_INTERVAL_SECS).await;
match crate::ipc::connect(1000, "_service").await { match crate::ipc::connect(1000, "_service").await {
Ok(mut conn) => { Ok(mut conn) => {
if !synced { if !synced {
@ -508,7 +511,7 @@ async fn sync_and_watch_config_dir() {
} }
loop { loop {
sleep(0.3).await; sleep(CONFIG_SYNC_INTERVAL_SECS).await;
let cfg = (Config::get(), Config2::get()); let cfg = (Config::get(), Config2::get());
if cfg != cfg0 { if cfg != cfg0 {
log::info!("config updated, sync to root"); log::info!("config updated, sync to root");