espanso/src/sysdaemon.rs

124 lines
4.0 KiB
Rust
Raw Normal View History

/*
* This file is part of espanso.
*
* Copyright (C) 2019 Federico Terzi
*
* espanso is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* espanso is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with espanso. If not, see <https://www.gnu.org/licenses/>.
*/
// This functions are used to register/unregister espanso from the system daemon manager.
use crate::config::ConfigSet;
// INSTALLATION
#[cfg(target_os = "macos")]
const MAC_PLIST_CONTENT : &str = include_str!("res/mac/com.federicoterzi.espanso.plist");
#[cfg(target_os = "macos")]
const MAC_PLIST_FILENAME : &str = "com.federicoterzi.espanso.plist";
#[cfg(target_os = "macos")]
pub fn register(_config_set: ConfigSet) {
use std::fs::create_dir_all;
use std::process::{Command, ExitStatus};
let home_dir = dirs::home_dir().expect("Could not get user home directory");
let library_dir = home_dir.join("Library");
let agents_dir = library_dir.join("LaunchAgents");
// Make sure agents directory exists
if !agents_dir.exists() {
create_dir_all(agents_dir.clone()).expect("Could not create LaunchAgents directory");
}
let plist_file = agents_dir.join(MAC_PLIST_FILENAME);
if !plist_file.exists() {
println!("Creating LaunchAgents entry: {}", plist_file.to_str().unwrap_or_default());
let espanso_path = std::env::current_exe().expect("Could not get espanso executable path");
println!("Entry will point to: {}", espanso_path.to_str().unwrap_or_default());
let plist_content = String::from(MAC_PLIST_CONTENT)
.replace("{{{espanso_path}}}", espanso_path.to_str().unwrap_or_default());
std::fs::write(plist_file.clone(), plist_content).expect("Unable to write plist file");
println!("Entry created correctly!")
}
println!("Reloading entry...");
let res = Command::new("launchctl")
.args(&["unload", "-w", plist_file.to_str().unwrap_or_default()])
.output();
let res = Command::new("launchctl")
.args(&["load", "-w", plist_file.to_str().unwrap_or_default()])
.status();
if let Ok(status) = res {
if status.success() {
println!("Entry loaded correctly!")
}
}else{
println!("Error loading new entry");
}
}
#[cfg(target_os = "macos")]
pub fn unregister(_config_set: ConfigSet) {
use std::fs::create_dir_all;
use std::process::{Command, ExitStatus};
let home_dir = dirs::home_dir().expect("Could not get user home directory");
let library_dir = home_dir.join("Library");
let agents_dir = library_dir.join("LaunchAgents");
let plist_file = agents_dir.join(MAC_PLIST_FILENAME);
if plist_file.exists() {
let _res = Command::new("launchctl")
.args(&["unload", "-w", plist_file.to_str().unwrap_or_default()])
.output();
std::fs::remove_file(&plist_file).expect("Could not remove espanso entry");
println!("Entry removed correctly!")
}else{
println!("espanso is not installed");
}
}
// LINUX
#[cfg(target_os = "linux")]
2019-09-22 13:08:47 +00:00
pub fn register(_config_set: ConfigSet) {
println!("Linux does not support automatic system daemon integration.");
}
#[cfg(target_os = "linux")]
2019-09-22 13:08:47 +00:00
pub fn unregister(_config_set: ConfigSet) {
println!("Linux does not support automatic system daemon integration.");
}
// WINDOWS
#[cfg(target_os = "windows")]
pub fn register(_config_set: ConfigSet) {
println!("Windows does not support automatic system daemon integration.")
}
#[cfg(target_os = "windows")]
pub fn unregister(_config_set: ConfigSet) {
println!("Windows does not support automatic system daemon integration.")
}