diff options
author | Mustafa Salih <37256744+MustafaSalih1993@users.noreply.github.com> | 2021-04-29 21:59:59 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-29 21:59:59 +0300 |
commit | 6b92cecef43b824c0dbae69312fcf669a5058853 (patch) | |
tree | 3464c07cfa27376f416ee76b49602d9f92ad3f6c /src | |
parent | cc0c16a3d0179156059971303779263bfc450d35 (diff) |
getting battery percentage programmatically (#50)
* getting battery percentage programmatically
* cargo.lock edit
Diffstat (limited to 'src')
-rw-r--r-- | src/config/mod.rs | 2 | ||||
-rw-r--r-- | src/utils/battery.rs | 39 | ||||
-rw-r--r-- | src/utils/mpd.rs | 6 |
3 files changed, 19 insertions, 28 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs index 202e50b..f47a172 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -13,8 +13,8 @@ mod uptime; mod volume; mod weather; +use self::battery::Battery; use self::mpd::Mpd; -use battery::Battery; use bitcoins::BitCoins; use cputemp::CpuTemp; use disk::Disk; diff --git a/src/utils/battery.rs b/src/utils/battery.rs index 041965a..d3688e7 100644 --- a/src/utils/battery.rs +++ b/src/utils/battery.rs @@ -1,37 +1,32 @@ use crate::config::CONFIG; use crate::types::ThreadsData; -use std::fs::read_to_string; +use battery::Manager; + +// TODO: better error handeling // getting battery percentage pub fn get_battery() -> ThreadsData { - let error = ThreadsData::Battery(String::from("check your battery source name")); - - let battery_full_cap_file = format!( - "/sys/class/power_supply/{}/charge_full_design", - CONFIG.battery.source - ); - let battery_charge_now_file = format!( - "/sys/class/power_supply/{}/charge_now", - CONFIG.battery.source - ); - - let buf = match read_to_string(battery_full_cap_file) { - Ok(file) => file, - Err(_) => return error, + let battery_manager = if let Ok(manager) = Manager::new() { + manager + } else { + return ThreadsData::Battery(String::from("Cannot Create Battery Manager!")); }; - let full_design = buf.trim().parse::<u32>().unwrap(); - let buf = match read_to_string(&battery_charge_now_file) { - Ok(data) => data, - _ => return error, + let mut batteries = if let Ok(batteries) = battery_manager.batteries() { + batteries + } else { + return ThreadsData::Battery(String::from("Cannot Get Battery!")); }; - let charge_now = buf.trim().parse::<u32>().unwrap(); + let percentage = if let Some(battery) = batteries.next() { + f32::from(battery.unwrap().state_of_charge()) * 100.0 + } else { + return ThreadsData::Battery(String::from("Cannot Read Battery!")); + }; - let battery_percentage = (charge_now as f32 / full_design as f32) * 100.0; let result = format!( " {} {:.0}% {}", - CONFIG.battery.icon, battery_percentage, CONFIG.seperator + CONFIG.battery.icon, percentage, CONFIG.seperator ); ThreadsData::Battery(result) } diff --git a/src/utils/mpd.rs b/src/utils/mpd.rs index 3752387..678b59d 100644 --- a/src/utils/mpd.rs +++ b/src/utils/mpd.rs @@ -2,7 +2,6 @@ use crate::config::CONFIG; use crate::types::ThreadsData; use mpd::{Client, Song}; -// yes, error handling looks fucking sucks! // getting mpd song file pub fn get_mpd_current() -> ThreadsData { let stream_path = format!("{}:{}", CONFIG.mpd.host, CONFIG.mpd.port); @@ -12,10 +11,7 @@ pub fn get_mpd_current() -> ThreadsData { _ => return empty_data, }; let current: Song = match conn.currentsong() { - Ok(opt) => match opt { - Some(song) => song, - _ => return empty_data, - }, + Ok(Some(song)) => song, _ => return empty_data, }; |