From 33a9787b2f6e4435b87cd8afcb7ddb43c0d61697 Mon Sep 17 00:00:00 2001 From: Pi-Yueh Chuang Date: Wed, 18 Dec 2019 23:43:10 -0500 Subject: [PATCH] improve battery-upower module: charging remaing time - fix the documentation of parameters - now also show the remaining time to fully charged when charging - modify the code to reduce the frequency of making requests to D-Bus --- bumblebee/modules/battery-upower.py | 31 +++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/bumblebee/modules/battery-upower.py b/bumblebee/modules/battery-upower.py index 2e9aa13..24efecf 100644 --- a/bumblebee/modules/battery-upower.py +++ b/bumblebee/modules/battery-upower.py @@ -3,9 +3,9 @@ """Displays battery status, remaining percentage and charging information. Parameters: - * battery.warning : Warning threshold in % of remaining charge (defaults to 20) - * battery.critical : Critical threshold in % of remaining charge (defaults to 10) - * battery.showremaining : If set to true (default) shows the remaining time until the batteries are completely discharged + * battery-upower.warning : Warning threshold in % of remaining charge (defaults to 20) + * battery-upower.critical : Critical threshold in % of remaining charge (defaults to 10) + * battery-upower.showremaining : If set to true (default) shows the remaining time until the batteries are completely discharged """ import dbus @@ -204,9 +204,8 @@ class Module(bumblebee.engine.Module): engine.input.register_callback(self, button=bumblebee.input.LEFT_MOUSE, cmd="gnome-power-statistics") - def remaining(self): - estimate = int(self.power.get_full_device_information(self.device)['TimeToEmpty']) - return bumblebee.util.durationfmt(estimate, shorten=True, suffix=True) # estimate is in minutes + self._showremaining = bumblebee.util.asbool( + self.parameter("showremaining", True)) def capacity(self, widget): widget.set("capacity", -1) @@ -218,13 +217,25 @@ class Module(bumblebee.engine.Module): widget.set("capacity", capacity) output = "{}%".format(capacity) widget.set("theme.minwidth", "100%") - - if bumblebee.util.asbool(self.parameter("showremaining", True)) \ - and self.power.get_state(self.device) == "Discharging": - output = "{} {}".format(output, self.remaining()) except Exception as e: logging.exception("unable to get battery capacity: {}".format(str(e))) + if self._showremaining: + try: + p = self.power # an alias to make each line of code shorter + proxy = p.bus.get_object(p.UPOWER_NAME, self.device) + interface = dbus.Interface(proxy, p.DBUS_PROPERTIES) + state = int(interface.Get(p.UPOWER_NAME+".Device", "State")) + # state: 1 => charging, 2 => discharging, other => don't care + remain = int(interface.Get( + p.UPOWER_NAME+".Device", ["TimeToFull", "TimeToEmpty"][state-1])) + remain = bumblebee.util.durationfmt(remain, shorten=True, suffix=True) + output = "{} {}".format(output, remain) + except IndexError: + pass + except Exception as e: + logging.exception("unable to get battery remaining time: {}".format(str(e))) + return output def state(self, widget):