pragma Singleton import QtQuick import Quickshell import Quickshell.Services.UPower Item { id: root property bool available: UPower.displayDevice.isPresent 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 property int _maxHistory: 60*60 property var percentageHistory: [{time: Date.now() - _maxHistory*1000, value: 0}, {time: Date.now(), value: 0}] property var percentageHistoryExists: true property var energyHistory: [{time: Date.now() - _maxHistory*1000, value: 0}, {time: Date.now(), value: 0}] property var energyHistoryExists: true property var usageHistory: [{time: Date.now() - _maxHistory*1000, value: 0}, {time: Date.now(), value: 0}] property var usageHistoryExists: true Timer { id: statsTimer interval: 1000 repeat: true running: true onTriggered: { var now = Date.now() // Creating percentage History var pHist = root.percentageHistory pHist.push({time: now, value: percentage}) if (pHist.length > root._maxHistory) pHist.shift() percentageHistoryExists = pHist.some(item => item.value !== 0 && item.value !== undefined) root.percentageHistory = pHist // Creating percentage History var eHist = root.energyHistory eHist.push({time: now, value: energy_formated}) if (eHist.length > root._maxHistory) eHist.shift() energyHistoryExists = eHist.some(item => item.value !== 0 && item.value !== undefined) root.energyHistory = eHist // Creating percentage History var uHist = root.usageHistory uHist.push({time: now, value: energy_rate_formated}) if (uHist.length > root._maxHistory) uHist.shift() usageHistoryExists = uHist.some(item => item.value !== 0 && item.value !== undefined) root.usageHistory = uHist } } }