Add prechecks

This commit is contained in:
Federico Terzi 2019-09-15 15:39:18 +02:00
parent a2b3ab90f0
commit fbee38d5b8
3 changed files with 61 additions and 4 deletions

40
src/check.rs Normal file
View File

@ -0,0 +1,40 @@
// This functions are used to check if the required dependencies are satisfied
// before starting espanso
#[cfg(target_os = "linux")]
pub fn check_dependencies() -> bool {
use std::process::Command;
let mut result = true;
// Make sure notify-send is installed
let status = Command::new("notify-send")
.arg("-v")
.output();
if let Err(_) = status {
println!("Error: 'notify-send' command is needed for espanso to work correctly, please install it.");
result = false;
}
// Make sure xclip is installed
let status = Command::new("xclip")
.arg("-version")
.output();
if let Err(_) = status {
println!("Error: 'xclip' command is needed for espanso to work correctly, please install it.");
result = false;
}
result
}
#[cfg(target_os = "macos")]
pub fn check_dependencies() -> bool {
// TODO: check accessibility
}
#[cfg(target_os = "windows")]
pub fn check_dependencies() -> bool {
// Nothing needed on windows
true
}

View File

@ -1,5 +1,6 @@
use std::process::{Command, Stdio};
use std::io::{Write};
use log::error;
pub struct LinuxClipboardManager {}
@ -31,8 +32,8 @@ impl super::ClipboardManager for LinuxClipboardManager {
if let Some(output) = stdin {
let res = output.write_all(payload.as_bytes());
if let Err(_) = res {
// TODO: log error
if let Err(e) = res {
error!("Could not set clipboard: {}", e);
}
}
}
@ -41,8 +42,6 @@ impl super::ClipboardManager for LinuxClipboardManager {
impl LinuxClipboardManager {
pub fn new() -> LinuxClipboardManager {
// TODO: check if xclip is present and log an error otherwise.
LinuxClipboardManager{}
}
}

View File

@ -27,6 +27,7 @@ use std::io::{BufReader, BufRead};
mod ui;
mod event;
mod check;
mod bridge;
mod engine;
mod config;
@ -154,6 +155,9 @@ fn main() {
restart_main(config_set);
return;
}
// Defaults to start subcommand
start_main(config_set);
}
/// Daemon subcommand, start the event loop and spawn a background thread worker
@ -165,6 +169,8 @@ fn daemon_main(config_set: ConfigSet) {
exit(3);
}
precheck_guard();
// Initialize log
let log_level = match config_set.default.log_level {
0 => LevelFilter::Warn,
@ -261,6 +267,8 @@ fn start_main(config_set: ConfigSet) {
}
release_lock(lock_file.unwrap());
precheck_guard();
if cfg!(target_os = "windows") {
// TODO: start windows detached
}else{
@ -468,4 +476,14 @@ fn acquire_lock() -> Option<File> {
fn release_lock(lock_file: File) {
lock_file.unlock().unwrap()
}
/// Used to make sure all the required dependencies are present before starting espanso.
fn precheck_guard() {
let satisfied = check::check_dependencies();
if !satisfied {
println!();
println!("Pre-check was not successful, espanso could not be started.");
exit(5);
}
}