Add Internet Time for some reason
This commit is contained in:
parent
ecf78a4264
commit
8e968f13e6
|
@ -62,6 +62,7 @@ pub enum TileConfigType {
|
|||
UtcTime(UtcTimeConfig),
|
||||
SystemTime(SystemTimeConfig),
|
||||
LocalTime(LocalTimeConfig),
|
||||
InternetTime(InternetTimeConfig),
|
||||
Iwd(IwdConfig),
|
||||
}
|
||||
|
||||
|
@ -112,6 +113,13 @@ pub struct LocalTimeConfig {
|
|||
pub ip_addr_api: Box<str>,
|
||||
}
|
||||
|
||||
#[derive(SmartDefault, Deserialize, Clone, Debug)]
|
||||
#[serde(default)]
|
||||
pub struct InternetTimeConfig {
|
||||
#[default(2)]
|
||||
pub precision: u8,
|
||||
}
|
||||
|
||||
#[derive(Debug, StructOpt)]
|
||||
#[structopt(
|
||||
name = "rustybar",
|
||||
|
@ -175,6 +183,9 @@ pub fn process_tile(
|
|||
),
|
||||
TileConfigType::SystemTime(c) => wrap(tiles::system_time_stream(c.clone()), tile.update),
|
||||
TileConfigType::LocalTime(c) => wrap(tiles::local_time_stream(c.clone()), tile.update),
|
||||
TileConfigType::InternetTime(c) => {
|
||||
wrap(tiles::internet_time_stream(c.clone()), tile.update)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
40
src/tiles/internet_time.rs
Normal file
40
src/tiles/internet_time.rs
Normal file
|
@ -0,0 +1,40 @@
|
|||
use super::TileResult;
|
||||
use crate::config::InternetTimeConfig;
|
||||
use crate::tile::Block;
|
||||
use chrono::prelude::*;
|
||||
use futures_async_stream::stream;
|
||||
use tokio::time::sleep;
|
||||
|
||||
#[stream(item = TileResult)]
|
||||
pub async fn internet_time_stream(config: InternetTimeConfig) {
|
||||
// "BMT" is actually just UTC+1
|
||||
let offset = FixedOffset::east_opt(60 * 60).unwrap();
|
||||
let factor = 10f64.powi(config.precision.into());
|
||||
loop {
|
||||
let now = Utc::now().with_timezone(&offset);
|
||||
// If we have a leap second this could be 83_640.999_999_999, giving us a time of 1000.01
|
||||
// I don't care.
|
||||
let seconds =
|
||||
now.num_seconds_from_midnight() as f64 + (now.nanosecond() as f64) / 1_000_000_000f64;
|
||||
let internet_time = seconds / 86.4;
|
||||
yield Ok(Block {
|
||||
full_text: format!(
|
||||
"@{time:03.prec$}",
|
||||
time = internet_time,
|
||||
prec = config.precision as usize
|
||||
)
|
||||
.into_boxed_str(),
|
||||
short_text: Some(format!("@{:03.0}", internet_time).into_boxed_str()),
|
||||
name: "internet_time".into(),
|
||||
..Default::default()
|
||||
});
|
||||
|
||||
// In normal (non-metric) seconds
|
||||
let difference = (1f64 - (internet_time * factor).fract()) / factor * 86.4;
|
||||
|
||||
sleep(std::time::Duration::from_nanos(
|
||||
(difference * 1_000_000_000f64) as u64,
|
||||
))
|
||||
.await;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
pub mod battery;
|
||||
pub mod hostname;
|
||||
pub mod internet_time;
|
||||
pub mod iwd;
|
||||
pub mod load;
|
||||
pub mod local_time;
|
||||
|
@ -8,6 +9,7 @@ pub mod system_time;
|
|||
pub mod utc_time;
|
||||
pub use battery::battery_stream;
|
||||
pub use hostname::hostname_stream;
|
||||
pub use internet_time::internet_time_stream;
|
||||
pub use iwd::iwd_stream;
|
||||
pub use load::load_stream;
|
||||
pub use local_time::local_time_stream;
|
||||
|
|
Loading…
Reference in a new issue