diff options
| author | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2026-05-13 22:31:13 -0700 |
|---|---|---|
| committer | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2026-05-13 22:31:13 -0700 |
| commit | bd6fc1e936ae42f1940db1c9894ff9528419710e (patch) | |
| tree | 8aeaf2d0ee24d675856fa0c3c35d38b7d7304cdb | |
| parent | 14bffc1a908856d91e514dcca3e1899a3d03b8b2 (diff) | |
| download | panel-bd6fc1e936ae42f1940db1c9894ff9528419710e.tar.gz panel-bd6fc1e936ae42f1940db1c9894ff9528419710e.tar.xz | |
| -rwxr-xr-x | panel.py | 86 |
1 files changed, 32 insertions, 54 deletions
@@ -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: |
