diff options
author | Mustafa Salih <37256744+MustafaSalih1993@users.noreply.github.com> | 2021-02-15 04:31:29 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-15 04:31:29 +0300 |
commit | f16724e986b17dd739b086a917672bb36b1d9b16 (patch) | |
tree | 508ce31128c5e2c0ea21a50acdf1901c7e0fd428 /src | |
parent | c4cd23f471fe8d6fdac7ddca436b477c16031373 (diff) |
Dev (#45)
* added bitcoins prices
* removed unwanted formating
Diffstat (limited to 'src')
-rw-r--r-- | src/config/bitcoins.rs | 21 | ||||
-rw-r--r-- | src/config/mod.rs | 6 | ||||
-rw-r--r-- | src/run.rs | 24 | ||||
-rw-r--r-- | src/types.rs | 10 | ||||
-rw-r--r-- | src/utils/bitcoins.rs | 26 | ||||
-rw-r--r-- | src/utils/mod.rs | 1 | ||||
-rw-r--r-- | src/utils/netspeed.rs | 2 | ||||
-rw-r--r-- | src/utils/pub_ip.rs | 2 |
8 files changed, 81 insertions, 11 deletions
diff --git a/src/config/bitcoins.rs b/src/config/bitcoins.rs new file mode 100644 index 0000000..f9d5976 --- /dev/null +++ b/src/config/bitcoins.rs @@ -0,0 +1,21 @@ +use serde::{Deserialize, Serialize}; +use std::default::Default; + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct BitCoins { + pub icon: String, + pub symbol: String, + pub enabled: bool, + pub delay: f64, +} + +impl Default for BitCoins { + fn default() -> Self { + BitCoins { + icon: String::from(""), + symbol: String::from("BTC-USD"), + enabled: false, + delay: 120.0, + } + } +} diff --git a/src/config/mod.rs b/src/config/mod.rs index e55465f..1fa35ba 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -1,4 +1,5 @@ mod battery; +mod bitcoins; mod cputemp; mod disk; mod loadavg; @@ -14,6 +15,7 @@ mod weather; use self::mpd::Mpd; use battery::Battery; +use bitcoins::BitCoins; use cputemp::CpuTemp; use disk::Disk; use loadavg::LoadAvg; @@ -92,6 +94,9 @@ pub struct Config { #[serde(default)] pub pub_ip: PubIp, + + #[serde(default)] + pub bitcoins: BitCoins, } impl Default for Config { @@ -111,6 +116,7 @@ impl Default for Config { loadavg: Default::default(), netspeed: Default::default(), pub_ip: Default::default(), + bitcoins: Default::default(), } } } @@ -72,6 +72,11 @@ pub fn run(mut blocks: Blocks) { spawn_thread_loop(tx.clone(), uptime::get_uptime, CONFIG.uptime.delay); } + // BTC thread + if CONFIG.bitcoins.enabled { + spawn_thread_loop(tx.clone(), bitcoins::get_price, CONFIG.bitcoins.delay); + } + // net speed thread // get_netspeed will sleep inside the function if CONFIG.netspeed.enabled { @@ -91,7 +96,7 @@ pub fn run(mut blocks: Blocks) { { // NOTE: order matters to the final format - let mut bar: Vec<String> = vec![String::from(""); 13]; + let mut bar: Vec<String> = vec![String::from(""); 14]; //iterating the values recieved from the threads for data in rx { match data { @@ -100,14 +105,15 @@ pub fn run(mut blocks: Blocks) { ThreadsData::Sound(x) => bar[2] = x, ThreadsData::Weather(x) => bar[3] = x, ThreadsData::NetSpeed(x) => bar[4] = x, - ThreadsData::PubIp(x) => bar[5] = x, - ThreadsData::Disk(x) => bar[6] = x, - ThreadsData::Memory(x) => bar[7] = x, - ThreadsData::CpuTemp(x) => bar[8] = x, - ThreadsData::LoadAvg(x) => bar[9] = x, - ThreadsData::Battery(x) => bar[10] = x, - ThreadsData::Uptime(x) => bar[11] = x, - ThreadsData::Time(x) => bar[12] = x, + ThreadsData::BitCoins(x) => bar[5] = x, + ThreadsData::PubIp(x) => bar[6] = x, + ThreadsData::Disk(x) => bar[7] = x, + ThreadsData::Memory(x) => bar[8] = x, + ThreadsData::CpuTemp(x) => bar[9] = x, + ThreadsData::LoadAvg(x) => bar[10] = x, + ThreadsData::Battery(x) => bar[11] = x, + ThreadsData::Uptime(x) => bar[12] = x, + ThreadsData::Time(x) => bar[13] = x, } // match ends here diff --git a/src/types.rs b/src/types.rs index 5def739..a7fd975 100644 --- a/src/types.rs +++ b/src/types.rs @@ -15,6 +15,7 @@ pub enum ThreadsData { LoadAvg(String), NetSpeed(String), PubIp(String), + BitCoins(String), } #[derive(Clone)] @@ -32,6 +33,7 @@ pub struct Config { pub spotify: Spotify, pub loadavg: LoadAvg, pub pub_ip: PubIp, + pub bitcoins: BitCoins, } #[derive(Clone)] @@ -131,6 +133,14 @@ pub struct PubIp { pub delay: f64, } +#[derive(Clone)] +pub struct BitCoins { + pub icon: String, + pub symbol: String, + pub enabled: bool, + pub delay: f64, +} + pub struct Blocks { pub disp: Display<name::NameConnection>, pub root: Window, diff --git a/src/utils/bitcoins.rs b/src/utils/bitcoins.rs new file mode 100644 index 0000000..465d907 --- /dev/null +++ b/src/utils/bitcoins.rs @@ -0,0 +1,26 @@ +use crate::config::CONFIG; +use crate::types::ThreadsData; +use serde::Deserialize; + +#[derive(Deserialize)] +struct Response { + price_24h: f64, +} + +pub fn get_price() -> ThreadsData { + let url = format!( + "https://api.blockchain.com/v3/exchange/tickers/{}", + CONFIG.bitcoins.symbol + ); + let _err = String::from("Error"); + let res = match minreq::get(url).send() { + Ok(resp) => match resp.json::<Response>() { + Ok(data) => data.price_24h.to_string(), + _ => _err, + }, + Err(_) => _err, + }; + + let data = format!(" {} {} {}", CONFIG.bitcoins.icon, res, CONFIG.seperator); + ThreadsData::BitCoins(data) +} diff --git a/src/utils/mod.rs b/src/utils/mod.rs index e70cf88..22b4bad 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -1,4 +1,5 @@ pub mod battery; +pub mod bitcoins; pub mod cpu; pub mod disk; pub mod load_average; diff --git a/src/utils/netspeed.rs b/src/utils/netspeed.rs index fe172a3..16caaa4 100644 --- a/src/utils/netspeed.rs +++ b/src/utils/netspeed.rs @@ -26,7 +26,7 @@ pub fn get_netspeed() -> ThreadsData { fn parse_speed_file(pth: &str) -> u64 { let base_path = format!("/sys/class/net/{}/statistics/", CONFIG.netspeed.interface); - let x: u64 = read_to_string(base_path.to_owned() + pth) + let x: u64 = read_to_string(base_path + pth) .unwrap() .trim() .parse::<u64>() diff --git a/src/utils/pub_ip.rs b/src/utils/pub_ip.rs index c0e6e4c..4f1335f 100644 --- a/src/utils/pub_ip.rs +++ b/src/utils/pub_ip.rs @@ -2,7 +2,7 @@ use crate::config::CONFIG; use crate::types::ThreadsData; pub fn get_pub_ip() -> ThreadsData { - let url = format!("http://api.ipify.org"); + let url = "http://api.ipify.org".to_string(); let _err = String::from("Error"); let res = match minreq::get(url).send() { Ok(resp) => match resp.as_str() { |