aboutsummaryrefslogtreecommitdiff
path: root/src/run.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/run.rs')
-rw-r--r--src/run.rs171
1 files changed, 171 insertions, 0 deletions
diff --git a/src/run.rs b/src/run.rs
new file mode 100644
index 0000000..1131884
--- /dev/null
+++ b/src/run.rs
@@ -0,0 +1,171 @@
+use crate::types::*;
+use crate::utils::*;
+use std::sync::mpsc;
+use std::thread;
+use std::time::Duration;
+
+// FIXME: The most part i hate is this, looks really ugly, fix me you dumb fuck
+pub fn run(config: Config, mut blocks: Blocks) {
+ let (tx, rx) = mpsc::channel();
+
+ // spotify thread
+ if config.spotify.enabled {
+ let spotify_tx = tx.clone();
+ let configcp = config.clone();
+ let mut spotify_data = ThreadsData::Spotify(spotify::get_spotify(&configcp));
+ thread::spawn(move || loop {
+ spotify_tx.send(spotify_data).unwrap();
+ spotify_data = ThreadsData::Spotify(spotify::get_spotify(&configcp));
+ thread::sleep(Duration::from_secs_f64(configcp.spotify.delay))
+ });
+ }
+
+ // mpd thread
+ if config.mpd.enabled {
+ let mpd_tx = tx.clone();
+ let configcp = config.clone();
+ let mut mpd_data = ThreadsData::Mpd(mpd::get_mpd_current(&configcp));
+ thread::spawn(move || loop {
+ mpd_tx.send(mpd_data).unwrap();
+ mpd_data = ThreadsData::Mpd(mpd::get_mpd_current(&configcp));
+ thread::sleep(Duration::from_secs_f64(configcp.mpd.delay))
+ });
+ }
+
+ // volume thread
+ if config.volume.enabled {
+ let volume_tx = tx.clone();
+ let configcp = config.clone();
+ let mut vol_data = ThreadsData::Sound(volume::get_volume(&configcp));
+ thread::spawn(move || loop {
+ volume_tx.send(vol_data).unwrap();
+ vol_data = ThreadsData::Sound(volume::get_volume(&configcp));
+ thread::sleep(Duration::from_secs_f64(configcp.volume.delay))
+ });
+ }
+
+ // Disk thread
+ if config.disk.enabled {
+ let disk_tx = tx.clone();
+ let configcp = config.clone();
+ let mut disk_data = ThreadsData::Disk(disk::get_disk(&configcp));
+ thread::spawn(move || loop {
+ disk_tx.send(disk_data).unwrap();
+ disk_data = ThreadsData::Disk(disk::get_disk(&configcp));
+ thread::sleep(Duration::from_secs_f64(configcp.disk.delay))
+ });
+ }
+
+ // Memory thread
+ if config.memory.enabled {
+ let memory_tx = tx.clone();
+ let configcp = config.clone();
+ let memory_data = memory::get_memory(&configcp).unwrap();
+ let mut memory_data = ThreadsData::Memory(memory_data);
+ thread::spawn(move || loop {
+ memory_tx.send(memory_data).unwrap();
+ memory_data = ThreadsData::Memory(memory::get_memory(&configcp).unwrap());
+ thread::sleep(Duration::from_secs_f64(configcp.memory.delay))
+ });
+ }
+
+ // Weather thread
+ if config.weather.enabled {
+ let weather_tx = tx.clone();
+ let configcp = config.clone();
+ let weather_data = weather::get_weather(&configcp);
+ let mut weather_data = ThreadsData::Weather(weather_data);
+ thread::spawn(move || loop {
+ weather_tx.send(weather_data).unwrap();
+ weather_data = ThreadsData::Weather(weather::get_weather(&configcp));
+ thread::sleep(Duration::from_secs_f64(configcp.weather.delay))
+ });
+ }
+
+ // Battery thread
+ if config.battery.enabled {
+ let battery_tx = tx.clone();
+ let configcp = config.clone();
+ let battery_data = battery::get_battery(&configcp).unwrap();
+ let mut battery_data = ThreadsData::Battery(battery_data);
+ thread::spawn(move || loop {
+ battery_tx.send(battery_data).unwrap();
+ battery_data = ThreadsData::Battery(battery::get_battery(&configcp).unwrap());
+ thread::sleep(Duration::from_secs_f64(configcp.battery.delay))
+ });
+ }
+
+ // Cpu temperature thread
+ if config.cpu_temperature.enabled {
+ let cpu_temp_tx = tx.clone();
+ let configcp = config.clone();
+ let cpu_temp_data = cpu::get_cpu_temp(&configcp).unwrap();
+ let mut cpu_temp_data = ThreadsData::CpuTemp(cpu_temp_data);
+ thread::spawn(move || loop {
+ cpu_temp_tx.send(cpu_temp_data).unwrap();
+ cpu_temp_data = ThreadsData::CpuTemp(cpu::get_cpu_temp(&configcp).unwrap());
+ thread::sleep(Duration::from_secs_f64(configcp.cpu_temperature.delay))
+ });
+ }
+
+ // Uptime thread
+ if config.uptime.enabled {
+ let uptime_tx = tx.clone();
+ let configcp = config.clone();
+ let uptime_data = uptime::get_uptime(&configcp).unwrap();
+ let mut uptime_data = ThreadsData::Uptime(uptime_data);
+ thread::spawn(move || loop {
+ uptime_tx.send(uptime_data).unwrap();
+ uptime_data = ThreadsData::Uptime(uptime::get_uptime(&configcp).unwrap());
+ thread::sleep(Duration::from_secs_f64(configcp.uptime.delay))
+ });
+ }
+
+ // Time thread
+ {
+ let time_tx = tx;
+ let configcp = config;
+ let mut time_data = ThreadsData::Time(time::get_time(&configcp));
+ thread::spawn(move || loop {
+ time_tx.send(time_data).unwrap();
+ time_data = ThreadsData::Time(time::get_time(&configcp));
+ thread::sleep(Duration::from_secs_f64(configcp.time.delay))
+ });
+ }
+
+ //Main
+ {
+ // NOTE: order matters to the final format
+ let mut bar: Vec<String> = vec!["".to_string(); 10];
+ //iterating the values recieved from the threads
+ for data in rx {
+ match data {
+ ThreadsData::Spotify(x) => bar[0] = x,
+ ThreadsData::Mpd(x) => bar[1] = x,
+ ThreadsData::Sound(x) => bar[2] = x,
+ ThreadsData::Weather(x) => bar[3] = x,
+ ThreadsData::Disk(x) => bar[4] = x,
+ ThreadsData::Memory(x) => bar[5] = x,
+ ThreadsData::CpuTemp(x) => bar[6] = x,
+ ThreadsData::Battery(x) => bar[7] = x,
+ ThreadsData::Uptime(x) => bar[8] = x,
+ ThreadsData::Time(x) => bar[9] = x,
+ }
+
+ // match ends here
+ update(&bar, &mut blocks);
+ }
+ }
+}
+
+fn update(bar: &[String], blocks: &mut Blocks) {
+ let mut x = String::new();
+ for i in bar.iter() {
+ x.push_str(i.as_str());
+ }
+
+ blocks
+ .root
+ .set_title(&mut blocks.disp, &x)
+ .expect("Failed to set title of root");
+}