# pylint: disable=C0111,R0903 """Displays battery status, remaining percentage and charging information. Parameters: * battery.device : The device to read information from (defaults to BAT0) * battery.warning : Warning threshold in % of remaining charge (defaults to 20) * battery.critical: Critical threshold in % of remaining charge (defaults to 10) """ import os import bumblebee.input import bumblebee.output import bumblebee.engine class Module(bumblebee.engine.Module): def __init__(self, engine, config): super(Module, self).__init__(engine, config, bumblebee.output.Widget(full_text=self.capacity) ) battery = self.parameter("device", "BAT0") self._path = "/sys/class/power_supply/{}".format(battery) self._capacity = 100 self._ac = False def capacity(self, widget): if self._ac: return "ac" if self._capacity == -1: return "n/a" return "{:03d}%".format(self._capacity) def update(self, widgets): self._ac = False if not os.path.exists(self._path): self._ac = True self._capacity = 100 return try: with open(self._path + "/capacity") as f: self._capacity = int(f.read()) except IOError: self._capacity = -1 self._capacity = self._capacity if self._capacity < 100 else 100 def state(self, widget): state = [] if self._capacity < 0: return ["critical", "unknown"] if self._capacity < int(self.parameter("critical", 10)): state.append("critical") elif self._capacity < int(self.parameter("warning", 20)): state.append("warning") if self._ac: state.append("AC") else: charge = "" with open(self._path + "/status") as f: charge = f.read().strip() if charge == "Discharging": state.append("discharging-{}".format(min([10, 25, 50, 80, 100] , key=lambda i:abs(i-self._capacity)))) else: if self._capacity > 95: state.append("charged") else: state.append("charging") return state # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4