mirror of
https://github.com/elkowar/eww.git
synced 2024-09-11 19:57:16 +03:00
Cleanup EWW_TIME API and code
This commit is contained in:
parent
4d63f6deec
commit
b31e397e97
@ -1,4 +1,4 @@
|
|||||||
use std::{collections::HashMap, time::Duration};
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use simplexpr::{dynval::DynVal, SimplExpr};
|
use simplexpr::{dynval::DynVal, SimplExpr};
|
||||||
use yuck::config::{
|
use yuck::config::{
|
||||||
@ -10,7 +10,7 @@ use crate::{config::system_stats::*, paths::EwwPaths};
|
|||||||
use eww_shared_util::VarName;
|
use eww_shared_util::VarName;
|
||||||
|
|
||||||
macro_rules! define_builtin_vars {
|
macro_rules! define_builtin_vars {
|
||||||
($($name:literal => $fun:expr => $interval:expr),*$(,)?) => {
|
($($name:literal [$interval:literal] => $fun:expr),*$(,)?) => {
|
||||||
pub static INBUILT_VAR_NAMES: &[&'static str] = &[$($name),*];
|
pub static INBUILT_VAR_NAMES: &[&'static str] = &[$($name),*];
|
||||||
pub fn get_inbuilt_vars() -> HashMap<VarName, ScriptVarDefinition> {
|
pub fn get_inbuilt_vars() -> HashMap<VarName, ScriptVarDefinition> {
|
||||||
maplit::hashmap! {
|
maplit::hashmap! {
|
||||||
@ -20,7 +20,7 @@ macro_rules! define_builtin_vars {
|
|||||||
run_while_expr: SimplExpr::Literal(DynVal::from(true)),
|
run_while_expr: SimplExpr::Literal(DynVal::from(true)),
|
||||||
command: VarSource::Function($fun),
|
command: VarSource::Function($fun),
|
||||||
initial_value: None,
|
initial_value: None,
|
||||||
interval: $interval,
|
interval: std::time::Duration::from_secs($interval),
|
||||||
name_span: eww_shared_util::span::Span::DUMMY,
|
name_span: eww_shared_util::span::Span::DUMMY,
|
||||||
})
|
})
|
||||||
),*
|
),*
|
||||||
@ -32,19 +32,19 @@ macro_rules! define_builtin_vars {
|
|||||||
define_builtin_vars! {
|
define_builtin_vars! {
|
||||||
// @desc EWW_TEMPS - Heat of the components in Celcius
|
// @desc EWW_TEMPS - Heat of the components in Celcius
|
||||||
// @prop { <name>: temperature }
|
// @prop { <name>: temperature }
|
||||||
"EWW_TEMPS" => || Ok(DynVal::from(get_temperatures())) => Duration::new(2, 0),
|
"EWW_TEMPS" [2] => || Ok(DynVal::from(get_temperatures())),
|
||||||
|
|
||||||
// @desc EWW_RAM - Information on ram and swap usage in kB.
|
// @desc EWW_RAM - Information on ram and swap usage in kB.
|
||||||
// @prop { total_mem, free_mem, total_swap, free_swap, available_mem, used_mem, used_mem_perc }
|
// @prop { total_mem, free_mem, total_swap, free_swap, available_mem, used_mem, used_mem_perc }
|
||||||
"EWW_RAM" => || Ok(DynVal::from(get_ram())) => Duration::new(2, 0),
|
"EWW_RAM" [2] => || Ok(DynVal::from(get_ram())),
|
||||||
|
|
||||||
// @desc EWW_DISK - Information on on all mounted partitions (Might report inaccurately on some filesystems, like btrfs and zfs) Example: `{EWW_DISK["/"]}`
|
// @desc EWW_DISK - Information on on all mounted partitions (Might report inaccurately on some filesystems, like btrfs and zfs) Example: `{EWW_DISK["/"]}`
|
||||||
// @prop { <mount_point>: { name, total, free, used, used_perc } }
|
// @prop { <mount_point>: { name, total, free, used, used_perc } }
|
||||||
"EWW_DISK" => || Ok(DynVal::from(get_disks())) => Duration::new(2, 0),
|
"EWW_DISK" [2] => || Ok(DynVal::from(get_disks())),
|
||||||
|
|
||||||
// @desc EWW_BATTERY - Battery capacity in procent of the main battery
|
// @desc EWW_BATTERY - Battery capacity in procent of the main battery
|
||||||
// @prop { <name>: { capacity, status } }
|
// @prop { <name>: { capacity, status } }
|
||||||
"EWW_BATTERY" => || Ok(DynVal::from(
|
"EWW_BATTERY" [2] => || Ok(DynVal::from(
|
||||||
match get_battery_capacity() {
|
match get_battery_capacity() {
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!("Couldn't get the battery capacity: {:?}", e);
|
log::error!("Couldn't get the battery capacity: {:?}", e);
|
||||||
@ -52,18 +52,18 @@ define_builtin_vars! {
|
|||||||
}
|
}
|
||||||
Ok(o) => o,
|
Ok(o) => o,
|
||||||
}
|
}
|
||||||
)) => Duration::new(2, 0),
|
)),
|
||||||
|
|
||||||
// @desc EWW_CPU - Information on the CPU cores: frequency and usage (No MacOS support)
|
// @desc EWW_CPU - Information on the CPU cores: frequency and usage (No MacOS support)
|
||||||
// @prop { cores: [{ core, freq, usage }], avg }
|
// @prop { cores: [{ core, freq, usage }], avg }
|
||||||
"EWW_CPU" => || Ok(DynVal::from(get_cpus())) => Duration::new(2, 0),
|
"EWW_CPU" [2] => || Ok(DynVal::from(get_cpus())) ,
|
||||||
|
|
||||||
// @desc EWW_NET - Bytes up/down on all interfaces
|
// @desc EWW_NET - Bytes up/down on all interfaces
|
||||||
// @prop { <name>: { up, down } }
|
// @prop { <name>: { up, down } }
|
||||||
"EWW_NET" => || Ok(DynVal::from(net())) => Duration::new(2, 0),
|
"EWW_NET" [2] => || Ok(DynVal::from(net())) ,
|
||||||
|
|
||||||
// @desc EWW_TIME - Information on current time in UNIX timestamp
|
// @desc EWW_TIME - the current UNIX timestamp
|
||||||
"EWW_TIME" => || Ok(DynVal::from(get_time())) => Duration::new(1, 0),
|
"EWW_TIME" [1] => || Ok(DynVal::from(get_time())) ,
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! define_magic_constants {
|
macro_rules! define_magic_constants {
|
||||||
|
@ -179,5 +179,5 @@ pub fn net() -> String {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_time() -> String {
|
pub fn get_time() -> String {
|
||||||
format!("{}", chrono::offset::Utc::now().format("%s"))
|
chrono::offset::Utc::now().timestamp().to_string()
|
||||||
}
|
}
|
||||||
|
@ -57,11 +57,11 @@ pub enum EvalError {
|
|||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
JaqParseError(JaqParseError),
|
JaqParseError(JaqParseError),
|
||||||
|
|
||||||
#[error("{1}")]
|
|
||||||
Spanned(Span, Box<EvalError>),
|
|
||||||
|
|
||||||
#[error("Error parsing date: {0}")]
|
#[error("Error parsing date: {0}")]
|
||||||
ChronoError(String),
|
ChronoError(String),
|
||||||
|
|
||||||
|
#[error("{1}")]
|
||||||
|
Spanned(Span, Box<EvalError>),
|
||||||
}
|
}
|
||||||
|
|
||||||
static_assertions::assert_impl_all!(EvalError: Send, Sync);
|
static_assertions::assert_impl_all!(EvalError: Send, Sync);
|
||||||
@ -382,7 +382,7 @@ fn call_expr_function(name: &str, args: Vec<DynVal>) -> Result<DynVal, EvalError
|
|||||||
_ => Err(EvalError::WrongArgCount(name.to_string())),
|
_ => Err(EvalError::WrongArgCount(name.to_string())),
|
||||||
},
|
},
|
||||||
"formattime" => match args.as_slice() {
|
"formattime" => match args.as_slice() {
|
||||||
[timestamp, timezone, format] => {
|
[timestamp, format, timezone] => {
|
||||||
let timezone = match chrono_tz::Tz::from_str(&timezone.as_string()?) {
|
let timezone = match chrono_tz::Tz::from_str(&timezone.as_string()?) {
|
||||||
Ok(x) => x,
|
Ok(x) => x,
|
||||||
Err(_) => return Err(EvalError::ChronoError("Invalid timezone".to_string())),
|
Err(_) => return Err(EvalError::ChronoError("Invalid timezone".to_string())),
|
||||||
|
@ -47,7 +47,7 @@ Supported currently are the following features:
|
|||||||
- `arraylength(value)`: Gets the length of the array
|
- `arraylength(value)`: Gets the length of the array
|
||||||
- `objectlength(value)`: Gets the amount of entries in the object
|
- `objectlength(value)`: Gets the amount of entries in the object
|
||||||
- `jq(value, jq_filter_string)`: run a [jq](https://stedolan.github.io/jq/manual/) style command on a json value. (Uses [jaq](https://crates.io/crates/jaq) internally).
|
- `jq(value, jq_filter_string)`: run a [jq](https://stedolan.github.io/jq/manual/) style command on a json value. (Uses [jaq](https://crates.io/crates/jaq) internally).
|
||||||
- `formattime(unix_timestamp, timezone, format_str)`: Gets the time in a given format from UNIX timestamp.
|
- `formattime(unix_timestamp, format_str, timezone)`: Gets the time in a given format from UNIX timestamp.
|
||||||
Check [chrono's documentation](https://docs.rs/chrono/latest/chrono/format/strftime/index.html) for more
|
Check [chrono's documentation](https://docs.rs/chrono/latest/chrono/format/strftime/index.html) for more
|
||||||
information about format string and [chrono-tz's documentation](https://docs.rs/chrono-tz/latest/chrono_tz/enum.Tz.html)
|
information about format string and [chrono-tz's documentation](https://docs.rs/chrono-tz/latest/chrono_tz/enum.Tz.html)
|
||||||
for available time zones.
|
for available time zones.
|
||||||
|
Loading…
Reference in New Issue
Block a user