diff options
Diffstat (limited to 'status-battery.js')
-rw-r--r-- | status-battery.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/status-battery.js b/status-battery.js new file mode 100644 index 0000000..3a209bf --- /dev/null +++ b/status-battery.js @@ -0,0 +1,77 @@ +global.lastKnownBattery = { + name: "Unknown", + description: "Unknown", + time: "" +} + +let getBatteryRemainingTime = async () => { + let battery = await navigator.getBattery(); + + let time = 0; + if (battery.charging) { + time = battery.chargingTime; + } else { + time = battery.dischargingTime; + } + + if (time === Infinity) { + return "Calculating..."; + } else { + if (time > 60) { + if (time > 60**2) { + if (time > 60**3) { + return "About " + Math.round(time / 60**3) + " day" + (Math.round(time / 60**3) > 1 ? "s" : "") + (battery.charging ? " before charged" : " remaining"); + } else { + return "About " + Math.round(time / 60**2) + " hour" + (Math.round(time / 60**2) > 1 ? "s" : "") + (battery.charging ? " before charged" : " remaining"); + } + } else { + return "About " + Math.round(time / 60) + " minute" + (Math.round(time / 60) > 1 ? "s" : "") + (battery.charging ? " before charged" : " remaining"); + } + } else { + return "About " + Math.round(time) + " second" + (time > 1 ? "s" : "") + (battery.charging ? " before charged" : " remaining"); + } + } +} + +let updateBattery = async () => { + let battery = await navigator.getBattery(); + + global.lastKnownBattery.name = "Battery: " + Math.round(battery.level * 100) + "%"; + global.lastKnownBattery.time = await getBatteryRemainingTime(); + if (battery.level <= 0.01) { + global.lastKnownBattery.description = "Critically low" + (battery.charging ? ", charging" : ", discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-000-001" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.01 && battery.level <= 0.1) { + global.lastKnownBattery.description = "Very low" + (battery.charging ? ", charging" : ", discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-001-010" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.1 && battery.level <= 0.2) { + global.lastKnownBattery.description = "Low battery" + (battery.charging ? ", charging" : ", discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-010-020" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.2 && battery.level <= 0.35) { + global.lastKnownBattery.description = (battery.charging ? "Charging" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-020-035" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.35 && battery.level <= 0.5) { + global.lastKnownBattery.description = (battery.charging ? "Charging" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-035-050" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.5 && battery.level <= 0.6) { + global.lastKnownBattery.description = (battery.charging ? "Charging" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-050-060" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.6 && battery.level <= 0.8) { + global.lastKnownBattery.description = (battery.charging ? "Charging" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-060-080" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.8 && battery.level <= 0.95) { + global.lastKnownBattery.description = (battery.charging ? "Charging" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-080-095" + (battery.charging ? "-charging" : "") + ".svg"; + } else if (battery.level > 0.95 && battery.level <= 1) { + global.lastKnownBattery.description = (battery.charging ? "Charged" : "Discharging"); + document.getElementById("statusbar-battery-icon").src = "./icons/battery-095-100" + (battery.charging ? "-charging" : "") + ".svg"; + } else { + global.lastKnownBattery.description = "Unknown"; + document.getElementById("statusbar-battery-icon").src = "./icons/battery-unknown.svg"; + } +} + +(async () => { + setInterval(updateBattery, 10000) + await updateBattery(); +})()
\ No newline at end of file |