Using Quickshell Build in stuff for battery
This commit is contained in:
@@ -1,85 +1,21 @@
|
||||
pragma Singleton
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import Quickshell.Services.UPower
|
||||
|
||||
Item {
|
||||
property bool available: false
|
||||
property real percentage: 0
|
||||
property bool charging: false
|
||||
property real energy: 0
|
||||
property real voltage: 0
|
||||
property int charge_cycle: 0
|
||||
property real time_to_empty: 0
|
||||
property real energy_rate: 0
|
||||
|
||||
function parseUpower(line) {
|
||||
line = line.trim()
|
||||
if (line.startsWith("percentage:")) {
|
||||
percentage = parseInt(line.split(":")[1])
|
||||
// console.log("percentage =", percentage)
|
||||
}
|
||||
else if (line.startsWith("state:")) {
|
||||
charging = !line.includes("discharging")
|
||||
// console.log("charging =", charging)
|
||||
}
|
||||
else if (line.startsWith("energy:")) {
|
||||
energy = parseFloat(line.split(":")[1])
|
||||
// console.log("energy =", energy)
|
||||
}
|
||||
else if (line.startsWith("voltage:")) {
|
||||
voltage = parseFloat(line.split(":")[1])
|
||||
// console.log("voltage =", voltage)
|
||||
}
|
||||
else if (line.startsWith("energy-rate:")) {
|
||||
energy_rate = parseFloat(line.split(":")[1])
|
||||
// console.log("energy_rate =", energy_rate)
|
||||
}
|
||||
else if (line.startsWith("charge-cycles:")) {
|
||||
charge_cycle = parseInt(line.split(":")[1])
|
||||
// console.log("charge_cycle =", charge_cycle)
|
||||
}
|
||||
else if (line.startsWith("time to empty:")) {
|
||||
time_to_empty = parseFloat(line.split(":")[1])
|
||||
// console.log("time_to_empty =", time_to_empty)
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: upowerProc
|
||||
command: ["bash", "-c", "upower -i $(upower -e | grep '^/org/freedesktop/UPower/devices/battery')"]
|
||||
stdout: SplitParser {
|
||||
onRead: function(data) {
|
||||
parseUpower(data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Process {
|
||||
id: batteryAvailable
|
||||
command: ["sh", "-c", "upower -e | grep -q '^/org/freedesktop/UPower/devices/battery' && echo '1' || echo '0'"]
|
||||
|
||||
stdout: StdioCollector {
|
||||
onStreamFinished: {
|
||||
const hasBattery = this.text.trim() === "1"
|
||||
available = hasBattery
|
||||
if (hasBattery) {
|
||||
pollTimer.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: pollTimer
|
||||
interval: 1000
|
||||
running: false
|
||||
repeat: true
|
||||
triggeredOnStart: false
|
||||
onTriggered: upowerProc.running = true
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
batteryAvailable.running = true
|
||||
}
|
||||
}
|
||||
property bool available: UPower.displayDevice.isLaptopBattery
|
||||
property real percentage: UPower.displayDevice.percentage*100
|
||||
property string state: UPowerDeviceState.toString(UPower.displayDevice.state)
|
||||
property bool charging: state == "Charging"
|
||||
property bool full: state == "FullyCharged"
|
||||
property real energy: UPower.displayDevice.energy
|
||||
property real energy_formated: Math.round(energy*10)/10
|
||||
property real time_to_empty: UPower.displayDevice.timeToEmpty
|
||||
property real hour_to_empty: Math.floor(time_to_empty/3600)
|
||||
property real min_to_empty: Math.floor((time_to_empty%3600)/60)
|
||||
property real energy_rate: UPower.displayDevice.changeRate
|
||||
property real energy_rate_formated: Math.round(energy_rate*10)/10
|
||||
property bool healthSupported: UPower.displayDevice.healthSupported
|
||||
property real health: healthSupported ? UPower.displayDevice.healthPercentage : NaN
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user