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; }
}