aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/config/mod.rs6
-rw-r--r--src/config/pub_ip.rs19
-rw-r--r--src/run.rs28
-rw-r--r--src/types.rs9
-rw-r--r--src/utils/mod.rs1
-rw-r--r--src/utils/pub_ip.rs15
6 files changed, 70 insertions, 8 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs
index 5741b11..e55465f 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -5,6 +5,7 @@ mod loadavg;
mod memory;
mod mpd;
mod netspeed;
+mod pub_ip;
mod spotify;
mod time;
mod uptime;
@@ -18,6 +19,7 @@ use disk::Disk;
use loadavg::LoadAvg;
use memory::Memory;
use netspeed::NetSpeed;
+use pub_ip::PubIp;
use spotify::Spotify;
use time::Time;
use uptime::Uptime;
@@ -87,6 +89,9 @@ pub struct Config {
#[serde(default)]
pub netspeed: NetSpeed,
+
+ #[serde(default)]
+ pub pub_ip: PubIp,
}
impl Default for Config {
@@ -105,6 +110,7 @@ impl Default for Config {
spotify: Default::default(),
loadavg: Default::default(),
netspeed: Default::default(),
+ pub_ip: Default::default(),
}
}
}
diff --git a/src/config/pub_ip.rs b/src/config/pub_ip.rs
new file mode 100644
index 0000000..df27f28
--- /dev/null
+++ b/src/config/pub_ip.rs
@@ -0,0 +1,19 @@
+use serde::{Deserialize, Serialize};
+use std::default::Default;
+
+#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
+pub struct PubIp {
+ pub icon: String,
+ pub enabled: bool,
+ pub delay: f64,
+}
+
+impl Default for PubIp {
+ fn default() -> Self {
+ PubIp {
+ icon: String::from(""),
+ enabled: false,
+ delay: 120.0,
+ }
+ }
+}
diff --git a/src/run.rs b/src/run.rs
index 141e32d..12efefa 100644
--- a/src/run.rs
+++ b/src/run.rs
@@ -17,6 +17,16 @@ pub fn run(mut blocks: Blocks) {
thread::sleep(Duration::from_secs_f64(CONFIG.loadavg.delay))
});
}
+ // public ip thread
+ if CONFIG.pub_ip.enabled {
+ let pub_ip_tx = tx.clone();
+ thread::spawn(move || loop {
+ let pub_ip_data = ThreadsData::PubIp(pub_ip::get_pub_ip());
+ pub_ip_tx.send(pub_ip_data).unwrap();
+ thread::sleep(Duration::from_secs_f64(CONFIG.pub_ip.delay))
+ });
+ }
+
// spotify thread
if CONFIG.spotify.enabled {
let spotify_tx = tx.clone();
@@ -130,7 +140,8 @@ pub fn run(mut blocks: Blocks) {
//Main
{
// NOTE: order matters to the final format
- let mut bar: Vec<String> = vec![String::from(""); 12];
+
+ let mut bar: Vec<String> = vec![String::from(""); 13];
//iterating the values recieved from the threads
for data in rx {
match data {
@@ -139,13 +150,14 @@ 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::Disk(x) => bar[5] = x,
- ThreadsData::Memory(x) => bar[6] = x,
- ThreadsData::CpuTemp(x) => bar[7] = x,
- ThreadsData::LoadAvg(x) => bar[8] = x,
- ThreadsData::Battery(x) => bar[9] = x,
- ThreadsData::Uptime(x) => bar[10] = x,
- ThreadsData::Time(x) => bar[11] = 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,
}
// match ends here
diff --git a/src/types.rs b/src/types.rs
index 7184d47..5def739 100644
--- a/src/types.rs
+++ b/src/types.rs
@@ -14,6 +14,7 @@ pub enum ThreadsData {
Spotify(String),
LoadAvg(String),
NetSpeed(String),
+ PubIp(String),
}
#[derive(Clone)]
@@ -30,6 +31,7 @@ pub struct Config {
pub mpd: Mpd,
pub spotify: Spotify,
pub loadavg: LoadAvg,
+ pub pub_ip: PubIp,
}
#[derive(Clone)]
@@ -122,6 +124,13 @@ pub struct NetSpeed {
pub enabled: bool,
}
+#[derive(Clone)]
+pub struct PubIp {
+ pub icon: String,
+ pub enabled: bool,
+ pub delay: f64,
+}
+
pub struct Blocks {
pub disp: Display<name::NameConnection>,
pub root: Window,
diff --git a/src/utils/mod.rs b/src/utils/mod.rs
index 3b4eb7b..e70cf88 100644
--- a/src/utils/mod.rs
+++ b/src/utils/mod.rs
@@ -5,6 +5,7 @@ pub mod load_average;
pub mod memory;
pub mod mpd;
pub mod netspeed;
+pub mod pub_ip;
pub mod spotify;
pub mod time;
pub mod uptime;
diff --git a/src/utils/pub_ip.rs b/src/utils/pub_ip.rs
new file mode 100644
index 0000000..ce2da92
--- /dev/null
+++ b/src/utils/pub_ip.rs
@@ -0,0 +1,15 @@
+use crate::config::CONFIG;
+
+pub fn get_pub_ip() -> String {
+ let url = format!("http://api.ipify.org");
+ let err_string = String::from("Error");
+ let res = match minreq::get(url).send() {
+ Ok(resp) => match resp.as_str() {
+ Ok(res_str) => res_str.trim().to_string(),
+ Err(_) => err_string,
+ },
+ Err(_) => err_string,
+ };
+
+ format!(" {} {} {}", CONFIG.pub_ip.icon, res, CONFIG.seperator)
+}