summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xpanel.py86
1 files changed, 32 insertions, 54 deletions
diff --git a/panel.py b/panel.py
index f2c346f..a707128 100755
--- a/panel.py
+++ b/panel.py
@@ -361,52 +361,6 @@ class ModInputAvail(Mod):
self.refreshing = False
self.repaint()
-class ModBattery(Mod):
- udev_client = UdevClient()
-
- def __init__(self, battery, adapter=None, **kwargs):
- super().__init__(**kwargs)
- self.battery = battery
- self.adapter = adapter
-
- self._percent = None
- self._charging = None
-
- self.udev_client.register('power_supply', self._process_event)
-
- def run(self):
- self.udev_client.run()
-
- self._process_event(
- self.udev_client.device_from_name('power_supply', self.battery),
- True)
- self._process_event(
- self.udev_client.device_from_name('power_supply', self.adapter),
- True)
-
- def _process_event(self, e, force=False):
- if ((force or e.action == 'change') and
- (name := e.get('POWER_SUPPLY_NAME'))):
- if (name == self.battery and
- (cap := e.get('POWER_SUPPLY_CAPACITY'))):
- self._update_state(percent=cap)
- elif (name == self.adapter and
- (online := e.get('POWER_SUPPLY_ONLINE'))):
- self._update_state(charging=(online == '1'))
-
- def _update_state(self, percent=None, charging=None):
- self.refreshing = True
- if percent is not None:
- self._percent = percent
- if charging is not None:
- self._charging = charging
- buf = f'{self._percent}%%'
- if self._charging:
- buf += ' (charging)'
- self.out = Fmt.labelled('BAT', buf)
- self.refreshing = False
- self.repaint()
-
class IntervalTimer():
def __init__(self):
self.t = None
@@ -453,7 +407,9 @@ class ModInterval(Mod):
def set_error(self):
self.out = Fmt.labelled(self.label, Fmt.bg('#a03000', ' error '))
-class ModBatteryPoll(ModInterval):
+class ModBattery(ModInterval):
+ udev_client = UdevClient()
+
def __init__(self, battery, adapter=None, **kwargs):
kwargs.setdefault('label', 'BAT')
super().__init__(**kwargs)
@@ -463,14 +419,36 @@ class ModBatteryPoll(ModInterval):
self._percent = None
self._charging = None
+ self.udev_client.register('power_supply', self._process_event)
+
+ def run(self):
+ self.udev_client.run()
+
+ self.refresh()
+
def refresh(self):
- with open(f'/sys/class/power_supply/{self.battery}/capacity') as f:
- percent = f.read().rstrip('\n')
- charging = None
- if self.adapter:
- with open(f'/sys/class/power_supply/{self.adapter}/online') as f:
- charging = (f.read().rstrip('\n') == '1')
- self._update_state(percent, charging)
+ self._process_device(
+ self.udev_client.device_from_name('power_supply', self.battery))
+ self._process_device(
+ self.udev_client.device_from_name('power_supply', self.adapter))
+
+ def _process_event(self, e):
+ if e.action != 'change':
+ return
+
+ self.refreshing = True
+ self._process_device(e)
+ self.refreshing = False
+ self.repaint()
+
+ def _process_device(self, e):
+ if not (name := e.get('POWER_SUPPLY_NAME')):
+ return
+
+ if name == self.battery and (cap := e.get('POWER_SUPPLY_CAPACITY')):
+ self._update_state(percent=cap)
+ elif name == self.adapter and (online := e.get('POWER_SUPPLY_ONLINE')):
+ self._update_state(charging=(online == '1'))
def _update_state(self, percent=None, charging=None):
if percent is not None: