import QtQuick import QtQuick.Layouts import org.kde.plasma.plasmoid import org.kde.kirigami as Kirigami import org.kde.plasma.plasma5support as Plasma5Support import org.kde.notification import "./lib/helper.js" as Helper PlasmoidItem { id: main readonly property int pollingrate: Plasmoid.configuration.pollingrate readonly property int batteryheight: Plasmoid.configuration.batteryheight readonly property string colorEmpty: Plasmoid.configuration.colorEmpty readonly property string colorHalf: Plasmoid.configuration.colorHalf readonly property string colorFull: Plasmoid.configuration.colorFull readonly property bool notifications: Plasmoid.configuration.notifications readonly property int batteryThreshold: Plasmoid.configuration.batteryThreshold readonly property bool debug_active: Plasmoid.configuration.debug_active readonly property int debug_charge: Plasmoid.configuration.debug_charge property string batteryStatus: "BATTERY_UNAVAILABLE" property int batteryPercent: 0 property bool notification_sent: false Plasma5Support.DataSource { id: hsSource engine: "executable" connectedSources: ["headsetcontrol -o json"] interval: pollingrate * 1e3 onNewData: (_, data) => { const res = JSON.parse(data.stdout); batteryStatus = res.devices[0].battery.status; batteryPercent = res.devices[0].battery.level; if(debug_active) { batteryStatus = "BATTERY_AVAILABLE"; batteryPercent = debug_charge; } // send notification if necessary if(batteryPercent <= batteryThreshold && batteryPercent >= 0 && !notification_sent && notifications) { notification_sent = true; notification.text = "Battery Level is low (" + batteryPercent + "%)"; notification.title = "Headset Battery Level Alert"; notification.iconName = "notification-battery-low"; notification.sendEvent(); } // reset notifications if battery level is over batteryThreshold if((batteryPercent > batteryThreshold || batteryPercent < 0) && notification_sent && notifications) { notification_sent = false; } return; } } toolTipMainText: "battery level: " + Helper.batteryLevel(batteryStatus, batteryPercent) toolTipSubText: "polling rate: " + pollingrate + " seconds" preferredRepresentation: compactRepresentation fullRepresentation: FullRepresentation{} compactRepresentation: CompactRepresentation{} Notification { id: notification componentName: "plasma_workspace" eventId: "notification" flags: Notification.DefaultEvent urgency: Notification.CriticalUrgency } }