* added bitcoins prices

* removed unwanted formating
This commit is contained in:
Mustafa Salih 2021-02-15 04:31:29 +03:00 committed by GitHub
parent c4cd23f471
commit f16724e986
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 282 additions and 20 deletions

187
Cargo.lock generated
View File

@ -89,6 +89,12 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]]
name = "base64"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.2.1" version = "1.2.1"
@ -136,6 +142,12 @@ version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8"
[[package]]
name = "bumpalo"
version = "3.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "099e596ef14349721d9016f6b80dd3419ea1bf289ab9b44df8e4dfd3a005d5d9"
[[package]] [[package]]
name = "bytemuck" name = "bytemuck"
version = "1.5.0" version = "1.5.0"
@ -270,6 +282,21 @@ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
] ]
[[package]]
name = "itoa"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
[[package]]
name = "js-sys"
version = "0.3.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65"
dependencies = [
"wasm-bindgen",
]
[[package]] [[package]]
name = "lazy_static" name = "lazy_static"
version = "1.4.0" version = "1.4.0"
@ -317,6 +344,14 @@ name = "minreq"
version = "2.3.0" version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85b112458b07e0864c7415847c423fe758c7189a28e72347e95d92c4bfd33f5d" checksum = "85b112458b07e0864c7415847c423fe758c7189a28e72347e95d92c4bfd33f5d"
dependencies = [
"lazy_static",
"rustls",
"serde",
"serde_json",
"webpki",
"webpki-roots",
]
[[package]] [[package]]
name = "mpd" name = "mpd"
@ -444,9 +479,24 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e1b7878800220a76a08f32c057829511440f65528b63b940f2f2bc145d7ac68" checksum = "4e1b7878800220a76a08f32c057829511440f65528b63b940f2f2bc145d7ac68"
[[package]]
name = "ring"
version = "0.16.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
dependencies = [
"cc",
"libc",
"once_cell",
"spin",
"untrusted",
"web-sys",
"winapi",
]
[[package]] [[package]]
name = "rsblocks" name = "rsblocks"
version = "0.1.12" version = "0.1.13"
dependencies = [ dependencies = [
"alsa", "alsa",
"breadx", "breadx",
@ -466,6 +516,35 @@ version = "0.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
[[package]]
name = "rustls"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b"
dependencies = [
"base64",
"log",
"ring",
"sct",
"webpki",
]
[[package]]
name = "ryu"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
[[package]]
name = "sct"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c"
dependencies = [
"ring",
"untrusted",
]
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.123" version = "1.0.123"
@ -486,6 +565,17 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "serde_json"
version = "1.0.62"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]] [[package]]
name = "serde_yaml" name = "serde_yaml"
version = "0.8.15" version = "0.8.15"
@ -498,6 +588,12 @@ dependencies = [
"yaml-rust", "yaml-rust",
] ]
[[package]]
name = "spin"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.60" version = "1.0.60"
@ -541,6 +637,12 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
[[package]]
name = "untrusted"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
[[package]] [[package]]
name = "vec-arena" name = "vec-arena"
version = "1.0.0" version = "1.0.0"
@ -565,6 +667,89 @@ version = "0.10.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
[[package]]
name = "wasm-bindgen"
version = "0.2.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be"
dependencies = [
"cfg-if 1.0.0",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7"
dependencies = [
"bumpalo",
"lazy_static",
"log",
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385"
dependencies = [
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64"
[[package]]
name = "web-sys"
version = "0.3.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "webpki"
version = "0.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
dependencies = [
"ring",
"untrusted",
]
[[package]]
name = "webpki-roots"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91cd5736df7f12a964a5067a12c62fa38e1bd8080aff1f80bc29be7c80d19ab4"
dependencies = [
"webpki",
]
[[package]] [[package]]
name = "wepoll-sys" name = "wepoll-sys"
version = "3.0.1" version = "3.0.1"

View File

@ -1,6 +1,6 @@
[package] [package]
name = "rsblocks" name = "rsblocks"
version = "0.1.12" version = "0.1.13"
authors = ["mustafa salih <mustafasalih1991@gmail.com>"] authors = ["mustafa salih <mustafasalih1991@gmail.com>"]
edition = "2018" edition = "2018"
readme = "README.md" readme = "README.md"
@ -11,15 +11,15 @@ description = "a multi threaded status bar for dwm window manager for linux"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
chrono = "0.4"
minreq = "2.2.1"
alsa = "0.4.3" alsa = "0.4.3"
nix = "0.19.1" chrono = "0.4"
mpd = "0.0.12"
dbus = "0.9.1" dbus = "0.9.1"
lazy_static = "1.4.0"
minreq = {version = "2.2.1", features = ["https","json-using-serde"]}
mpd = "0.0.12"
nix = "0.19.1"
serde = {version = "1.0.120", features = ["derive"]} serde = {version = "1.0.120", features = ["derive"]}
serde_yaml = "0.8.15" serde_yaml = "0.8.15"
lazy_static = "1.4.0"
[dependencies.breadx] [dependencies.breadx]

View File

@ -55,7 +55,7 @@ battery:
cpu_temperature: cpu_temperature:
delay: 120.0 delay: 120.0
enabled: true enabled: false
icon: '' icon: ''
@ -64,6 +64,13 @@ loadavg:
delay: 2.0 delay: 2.0
enabled: false enabled: false
icon: '' icon: ''
# bitcoin price
bitcoins:
delay: 7200.0 # 2 hours
enabled: false
icon: ''
symbol: 'BTC-USD'
mpd: mpd:
@ -77,7 +84,7 @@ mpd:
volume: volume:
card: 'PULSE' card: 'PULSE'
delay: 0.18 delay: 0.18
enabled: true enabled: false
icon: '' icon: ''

21
src/config/bitcoins.rs Normal file
View File

@ -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,
}
}
}

View File

@ -1,4 +1,5 @@
mod battery; mod battery;
mod bitcoins;
mod cputemp; mod cputemp;
mod disk; mod disk;
mod loadavg; mod loadavg;
@ -14,6 +15,7 @@ mod weather;
use self::mpd::Mpd; use self::mpd::Mpd;
use battery::Battery; use battery::Battery;
use bitcoins::BitCoins;
use cputemp::CpuTemp; use cputemp::CpuTemp;
use disk::Disk; use disk::Disk;
use loadavg::LoadAvg; use loadavg::LoadAvg;
@ -92,6 +94,9 @@ pub struct Config {
#[serde(default)] #[serde(default)]
pub pub_ip: PubIp, pub pub_ip: PubIp,
#[serde(default)]
pub bitcoins: BitCoins,
} }
impl Default for Config { impl Default for Config {
@ -111,6 +116,7 @@ impl Default for Config {
loadavg: Default::default(), loadavg: Default::default(),
netspeed: Default::default(), netspeed: Default::default(),
pub_ip: Default::default(), pub_ip: Default::default(),
bitcoins: Default::default(),
} }
} }
} }

View File

@ -72,6 +72,11 @@ pub fn run(mut blocks: Blocks) {
spawn_thread_loop(tx.clone(), uptime::get_uptime, CONFIG.uptime.delay); 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 // net speed thread
// get_netspeed will sleep inside the function // get_netspeed will sleep inside the function
if CONFIG.netspeed.enabled { if CONFIG.netspeed.enabled {
@ -91,7 +96,7 @@ pub fn run(mut blocks: Blocks) {
{ {
// NOTE: order matters to the final format // 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 //iterating the values recieved from the threads
for data in rx { for data in rx {
match data { match data {
@ -100,14 +105,15 @@ pub fn run(mut blocks: Blocks) {
ThreadsData::Sound(x) => bar[2] = x, ThreadsData::Sound(x) => bar[2] = x,
ThreadsData::Weather(x) => bar[3] = x, ThreadsData::Weather(x) => bar[3] = x,
ThreadsData::NetSpeed(x) => bar[4] = x, ThreadsData::NetSpeed(x) => bar[4] = x,
ThreadsData::PubIp(x) => bar[5] = x, ThreadsData::BitCoins(x) => bar[5] = x,
ThreadsData::Disk(x) => bar[6] = x, ThreadsData::PubIp(x) => bar[6] = x,
ThreadsData::Memory(x) => bar[7] = x, ThreadsData::Disk(x) => bar[7] = x,
ThreadsData::CpuTemp(x) => bar[8] = x, ThreadsData::Memory(x) => bar[8] = x,
ThreadsData::LoadAvg(x) => bar[9] = x, ThreadsData::CpuTemp(x) => bar[9] = x,
ThreadsData::Battery(x) => bar[10] = x, ThreadsData::LoadAvg(x) => bar[10] = x,
ThreadsData::Uptime(x) => bar[11] = x, ThreadsData::Battery(x) => bar[11] = x,
ThreadsData::Time(x) => bar[12] = x, ThreadsData::Uptime(x) => bar[12] = x,
ThreadsData::Time(x) => bar[13] = x,
} }
// match ends here // match ends here

View File

@ -15,6 +15,7 @@ pub enum ThreadsData {
LoadAvg(String), LoadAvg(String),
NetSpeed(String), NetSpeed(String),
PubIp(String), PubIp(String),
BitCoins(String),
} }
#[derive(Clone)] #[derive(Clone)]
@ -32,6 +33,7 @@ pub struct Config {
pub spotify: Spotify, pub spotify: Spotify,
pub loadavg: LoadAvg, pub loadavg: LoadAvg,
pub pub_ip: PubIp, pub pub_ip: PubIp,
pub bitcoins: BitCoins,
} }
#[derive(Clone)] #[derive(Clone)]
@ -131,6 +133,14 @@ pub struct PubIp {
pub delay: f64, pub delay: f64,
} }
#[derive(Clone)]
pub struct BitCoins {
pub icon: String,
pub symbol: String,
pub enabled: bool,
pub delay: f64,
}
pub struct Blocks { pub struct Blocks {
pub disp: Display<name::NameConnection>, pub disp: Display<name::NameConnection>,
pub root: Window, pub root: Window,

26
src/utils/bitcoins.rs Normal file
View File

@ -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)
}

View File

@ -1,4 +1,5 @@
pub mod battery; pub mod battery;
pub mod bitcoins;
pub mod cpu; pub mod cpu;
pub mod disk; pub mod disk;
pub mod load_average; pub mod load_average;

View File

@ -26,7 +26,7 @@ pub fn get_netspeed() -> ThreadsData {
fn parse_speed_file(pth: &str) -> u64 { fn parse_speed_file(pth: &str) -> u64 {
let base_path = format!("/sys/class/net/{}/statistics/", CONFIG.netspeed.interface); 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() .unwrap()
.trim() .trim()
.parse::<u64>() .parse::<u64>()

View File

@ -2,7 +2,7 @@ use crate::config::CONFIG;
use crate::types::ThreadsData; use crate::types::ThreadsData;
pub fn get_pub_ip() -> 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 _err = String::from("Error");
let res = match minreq::get(url).send() { let res = match minreq::get(url).send() {
Ok(resp) => match resp.as_str() { Ok(resp) => match resp.as_str() {