aboutsummaryrefslogtreecommitdiff
path: root/src/utils/battery.rs
blob: f1361ea184ea22f74db14cb86c5872476781853c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use crate::config::CONFIG;
use crate::types::ThreadsData;
use battery::Manager;
use battery::State;

// TODO: better error handeling

// getting battery percentage
pub async fn get_battery() -> ThreadsData {
    let battery_manager = if let Ok(manager) = Manager::new() {
        manager
    } else {
        return ThreadsData::Battery(String::from("Cannot Create Battery Manager!"));
    };

    let mut batteries = if let Ok(batteries) = battery_manager.batteries() {
        batteries
    } else {
        return ThreadsData::Battery(String::from("Cannot Get Battery!"));
    };

    let battery = batteries.next();
    let (icon, percentage);

    if let Some(bat) = battery {
        let b = bat.unwrap();
        percentage = f32::from(b.state_of_charge()) * 100.0;
        icon = match b.state() {
            State::Charging => &CONFIG.battery.charging_icon,
            _               => &CONFIG.battery.icon,
        };
    } else {
        return ThreadsData::Battery(String::from("Cannot Read Battery!"));
    };

    let result = format!(
        "  {}  {:.0}%  {}",
        icon, percentage, CONFIG.seperator
    );
    ThreadsData::Battery(result)
}