Files
noctalia-shell/Services/BatteryService.qml
T

85 lines
2.1 KiB
QML

pragma Singleton
import Quickshell
import Quickshell.Io
import Quickshell.Services.UPower
import qs.Commons
import qs.Services
Singleton {
id: root
enum ChargingMode {
Full,
Balanced,
Conservative
}
property int chargingMode: BatteryService.ChargingMode.Balanced
readonly property string batteryTresholdScript: Quickshell.shellDir + '/Bin/battery-manager/set-battery-treshold.sh'
// Choose icon based on charge and charging state
function getIcon(percent, charging, isReady) {
if (!isReady) {
return "battery-exclamation"
}
if (charging) {
return "battery-charging"
} else {
if (percent >= 90)
return "battery-4"
if (percent >= 50)
return "battery-3"
if (percent >= 25)
return "battery-2"
if (percent >= 0)
return "battery-1"
return "battery"
}
}
function setChargingMode(newMode) {
if (newMode !== BatteryService.ChargingMode.Full && newMode !== BatteryService.ChargingMode.Balanced && newMode !== BatteryService.ChargingMode.Conservative) {
return
}
BatteryService.chargingMode = newMode
BatteryService.applyChargingMode()
}
function applyChargingMode() {
switch (BatteryService.chargingMode) {
case BatteryService.ChargingMode.Full:
chargeLimitProcess.command = [batteryTresholdScript, "100"]
break
case BatteryService.ChargingMode.Balanced:
chargeLimitProcess.command = [batteryTresholdScript, "80"]
break
case BatteryService.ChargingMode.Conservative:
chargeLimitProcess.command = [batteryTresholdScript, "60"]
break
}
chargeLimitProcess.running = true
}
Process {
id: chargeLimitProcess
workingDirectory: Quickshell.shellDir
running: false
stderr: StdioCollector {
onStreamFinished: {
if (this.text) {
Logger.warn("BatteryService", "ChargeLimitProcess stderr:", this.text)
}
}
}
stdout: StdioCollector {
onStreamFinished: {
if (this.text) {
Logger.log("BatteryService", "ChargeLimitProcess stdout:", this.text)
}
}
}
}
}