Remove dependencies and simplify CLI, also adding eww ping command

This commit is contained in:
elkowar 2021-01-03 14:52:25 +01:00 committed by ElKowar
parent 6df15379bb
commit 5fac2271b5
4 changed files with 57 additions and 778 deletions

789
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -26,24 +26,17 @@ structopt = "0.3"
serde = {version = "1.0", features = ["derive"]} serde = {version = "1.0", features = ["derive"]}
extend = "0.3.0" extend = "0.3.0"
grass = "0.10" grass = "0.10"
hotwatch = "0.4"
crossbeam-channel = "0.4"
num = "0.3" num = "0.3"
stoppable_thread = "0.2"
roxmltree = "0.13" roxmltree = "0.13"
itertools = "0.9" itertools = "0.9"
scheduled-executor = "0.4"
debug_stub_derive = "0.3" debug_stub_derive = "0.3"
log = "0.4" log = "0.4"
pretty_env_logger = "0.4" pretty_env_logger = "0.4"
lazy_static = "1.4.0" lazy_static = "1.4.0"
libc = "0.2" libc = "0.2"
popol = "0.3"
nix = "0.19" nix = "0.19"
smart-default = "0.6" smart-default = "0.6"
filedescriptor = "0.7"
simple-signal = "1.1" simple-signal = "1.1"
dashmap = "3.11"
unescape = "0.1" unescape = "0.1"
tokio = { version = "1.0", features = ["full"] } tokio = { version = "1.0", features = ["full"] }

View file

@ -53,11 +53,12 @@ fn main() {
} }
opts::Action::WithServer(action) => { opts::Action::WithServer(action) => {
log::info!("Trying to find server process"); log::info!("Trying to find server process");
if let Ok(stream) = net::UnixStream::connect(&*IPC_SOCKET_PATH) { if let Some(stream) = try_connect(&*IPC_SOCKET_PATH) {
log::info!("Connected to eww server."); log::info!("Connected to eww server.");
client::forward_command_to_server(stream, action).context("Error while forwarding command to server")?; client::forward_command_to_server(stream, action).context("Error while forwarding command to server")?;
} else if action.needs_server_running() { } else if action.needs_server_running() {
println!("No eww server running"); println!("No eww server running");
std::process::exit(1);
} else { } else {
log::info!("No server running, initializing server..."); log::info!("No server running, initializing server...");
let _ = std::fs::remove_file(&*crate::IPC_SOCKET_PATH); let _ = std::fs::remove_file(&*crate::IPC_SOCKET_PATH);
@ -71,3 +72,14 @@ fn main() {
eprintln!("{:?}", e); eprintln!("{:?}", e);
} }
} }
fn try_connect(path: &std::path::PathBuf) -> Option<net::UnixStream> {
if path.exists() {
for _ in 0..5 {
if let Ok(stream) = net::UnixStream::connect(&*IPC_SOCKET_PATH) {
return Some(stream);
}
}
}
return None;
}

View file

@ -18,20 +18,14 @@ pub struct Opt {
#[derive(StructOpt, Debug, Serialize, Deserialize, PartialEq)] #[derive(StructOpt, Debug, Serialize, Deserialize, PartialEq)]
struct RawOpt { struct RawOpt {
#[structopt(subcommand)] #[structopt(subcommand)]
action: Option<Action>, action: Action,
/// Run Eww in the background, daemonizing it.
/// When daemonized, to kill eww you can run `eww kill`. To see logs, use `eww logs`.
#[structopt(short = "-d", long = "--detach")]
should_detach: bool,
} }
#[derive(StructOpt, Debug, Serialize, Deserialize, PartialEq, smart_default::SmartDefault)] #[derive(StructOpt, Debug, Serialize, Deserialize, PartialEq)]
pub enum Action { pub enum Action {
#[structopt(flatten)] #[structopt(flatten)]
ClientOnly(ActionClientOnly), ClientOnly(ActionClientOnly),
#[default]
#[structopt(flatten)] #[structopt(flatten)]
WithServer(ActionWithServer), WithServer(ActionWithServer),
} }
@ -43,12 +37,16 @@ pub enum ActionClientOnly {
Logs, Logs,
} }
#[derive(StructOpt, Debug, Serialize, Deserialize, PartialEq, smart_default::SmartDefault)] #[derive(StructOpt, Debug, Serialize, Deserialize, PartialEq)]
pub enum ActionWithServer { pub enum ActionWithServer {
/// Start the eww daemon.
#[structopt(name = "daemon")] #[structopt(name = "daemon")]
#[default]
Daemon, Daemon,
/// Ping the eww server, checking if it is reachable.
#[structopt(name = "ping")]
Ping,
/// Update the value of a variable, in a running eww instance /// Update the value of a variable, in a running eww instance
#[structopt(name = "update")] #[structopt(name = "update")]
Update { Update {
@ -109,10 +107,9 @@ impl Opt {
impl From<RawOpt> for Opt { impl From<RawOpt> for Opt {
fn from(other: RawOpt) -> Self { fn from(other: RawOpt) -> Self {
let RawOpt { action, should_detach } = other; let RawOpt { action } = other;
let action = action.unwrap_or_default();
Opt { Opt {
should_detach: should_detach || action == Action::WithServer(ActionWithServer::Daemon), should_detach: action == Action::WithServer(ActionWithServer::Daemon),
action, action,
} }
} }
@ -128,7 +125,7 @@ fn parse_var_update_arg(s: &str) -> Result<(VarName, PrimitiveValue)> {
impl ActionWithServer { impl ActionWithServer {
pub fn into_eww_command(self) -> (app::EwwCommand, Option<tokio::sync::mpsc::UnboundedReceiver<String>>) { pub fn into_eww_command(self) -> (app::EwwCommand, Option<tokio::sync::mpsc::UnboundedReceiver<String>>) {
let command = match self { let command = match self {
ActionWithServer::Daemon => app::EwwCommand::NoOp, ActionWithServer::Daemon | ActionWithServer::Ping => app::EwwCommand::NoOp,
ActionWithServer::Update { mappings } => app::EwwCommand::UpdateVars(mappings.into_iter().collect()), ActionWithServer::Update { mappings } => app::EwwCommand::UpdateVars(mappings.into_iter().collect()),
ActionWithServer::OpenWindow { ActionWithServer::OpenWindow {
window_name, window_name,