aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config/bitcoins.rs21
-rw-r--r--src/config/mod.rs6
-rw-r--r--src/run.rs24
-rw-r--r--src/types.rs10
-rw-r--r--src/utils/bitcoins.rs26
-rw-r--r--src/utils/mod.rs1
-rw-r--r--src/utils/netspeed.rs2
-rw-r--r--src/utils/pub_ip.rs2
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(),
}
}
}
diff --git a/src/run.rs b/src/run.rs
index 3f7405d..201c337 100644
--- a/src/run.rs
+++ b/src/run.rs
@@ -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() {