From 5158079d16c68044cfebd82e391379451c079b29 Mon Sep 17 00:00:00 2001 From: Mykyta Onipchenko <44075969+nenikitov@users.noreply.github.com> Date: Thu, 5 Oct 2023 18:16:48 -0400 Subject: [PATCH] Add more props to battery service (#119) --- src/dbus/org.freedesktop.UPower.Device.xml | 5 +++ src/dbus/types.ts | 5 +++ src/service/battery.ts | 37 ++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/src/dbus/org.freedesktop.UPower.Device.xml b/src/dbus/org.freedesktop.UPower.Device.xml index ac1a856..18fc41d 100644 --- a/src/dbus/org.freedesktop.UPower.Device.xml +++ b/src/dbus/org.freedesktop.UPower.Device.xml @@ -3,5 +3,10 @@ + + + + + diff --git a/src/dbus/types.ts b/src/dbus/types.ts index db1fd07..ce18e0f 100644 --- a/src/dbus/types.ts +++ b/src/dbus/types.ts @@ -43,6 +43,11 @@ export interface BatteryProxy extends Gio.DBusProxy { State: number Percentage: number IsPresent: boolean + TimeToEmpty: number + TimeToFull: number + Energy: number + EnergyFull: number + EnergyRate: number } export interface StatusNotifierItemProxy extends Gio.DBusProxy { diff --git a/src/service/battery.ts b/src/service/battery.ts index 6bc17b8..e1a7d3d 100644 --- a/src/service/battery.ts +++ b/src/service/battery.ts @@ -23,6 +23,10 @@ class BatteryService extends Service { 'charging': ['boolean'], 'charged': ['boolean'], 'icon-name': ['string'], + 'time-remaining': ['float'], + 'energy': ['float'], + 'energy-full': ['float'], + 'energy-rate': ['float'], }); } @@ -33,12 +37,20 @@ class BatteryService extends Service { private _charging = false; private _charged = false; private _iconName = 'battery-missing-symbolic'; + private _timeRemaining = 0; + private _energy = 0.0; + private _energyFull = 0.0; + private _energyRate = 0.0; get available() { return this._available; } get percent() { return this._percent; } get charging() { return this._charging; } get charged() { return this._charged; } get icon_name() { return this._iconName; } + get time_remaining() { return this._timeRemaining; } + get energy() { return this._energy; } + get energy_full() { return this._energyFull; } + get energy_rate() { return this._energyRate; } constructor() { super(); @@ -71,11 +83,23 @@ class BatteryService extends Service { ? 'battery-level-100-charged-symbolic' : `battery-level-${level}${state}-symbolic`; + const timeRemaining = charging ? this._proxy.TimeToFull : this._proxy.TimeToEmpty; + + const energy = this._proxy.Energy; + + const energyFull = this._proxy.EnergyFull; + + const energyRate = this._proxy.EnergyRate; + this.updateProperty('available', true); this.updateProperty('icon-name', iconName); this.updateProperty('percent', percent); this.updateProperty('charging', charging); this.updateProperty('charged', charged); + this.updateProperty('time-remaining', timeRemaining); + this.updateProperty('energy', energy); + this.updateProperty('energy-full', energyFull); + this.updateProperty('energy-rate', energyRate); this.emit('changed'); } } @@ -92,8 +116,21 @@ export default class Battery { static get percent() { return Battery.instance.percent; } static get charging() { return Battery.instance.charging; } static get charged() { return Battery.instance.charged; } + static get energy() { return Battery.instance.energy; } static get iconName() { return Battery.instance.icon_name; } static get icon_name() { return Battery.instance.icon_name; } static get ['icon-name']() { return Battery.instance.icon_name; } + + static get timeRemaining() { return Battery.instance.time_remaining; } + static get time_remaining() { return Battery.instance.time_remaining; } + static get ['time-remaining']() { return Battery.instance.time_remaining; } + + static get energyFull() { return Battery.instance.energy_full; } + static get energy_full() { return Battery.instance.energy_full; } + static get ['energy-full']() { return Battery.instance.energy_full; } + + static get energyRate() { return Battery.instance.energy_rate; } + static get energy_rate() { return Battery.instance.energy_rate; } + static get ['energy-rate']() { return Battery.instance.energy_rate; } }