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();
}
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 {
if !has_cmd("systemctl") {
return false;
}
log::info!("Uninstalling service...");
Config::set_option("stop-service".into(), "Y".into());
if !run_cmds_pkexec("systemctl disable rustdesk; systemctl stop rustdesk") {
let cp = switch_service(true);
if !run_cmds_pkexec(&format!(
"{cp} systemctl disable rustdesk; systemctl stop rustdesk"
)) {
Config::set_option("stop-service".into(), "".into());
return true;
}
@ -1140,13 +1152,7 @@ pub fn install_service() -> bool {
return false;
}
log::info!("Installing service...");
let home = std::env::var("HOME").unwrap_or_default();
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());
let cp = switch_service(false);
if !run_cmds_pkexec(&format!(
"{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>>>;
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! {
pub static ref CHILD_PROCESS: Childs = 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);
use hbb_common::sleep;
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 {
Ok(mut conn) => {
if !synced {
@ -508,7 +511,7 @@ async fn sync_and_watch_config_dir() {
}
loop {
sleep(0.3).await;
sleep(CONFIG_SYNC_INTERVAL_SECS).await;
let cfg = (Config::get(), Config2::get());
if cfg != cfg0 {
log::info!("config updated, sync to root");