Add prechecks
This commit is contained in:
parent
a2b3ab90f0
commit
fbee38d5b8
40
src/check.rs
Normal file
40
src/check.rs
Normal 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
|
||||
}
|
|
@ -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{}
|
||||
}
|
||||
}
|
18
src/main.rs
18
src/main.rs
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user