mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-09 15:05:39 -05:00
Improve brightness device detection
This commit is contained in:
@@ -9,16 +9,30 @@ Singleton {
|
||||
|
||||
property bool brightnessAvailable: devices.length > 0
|
||||
property var devices: []
|
||||
property var deviceBrightness: ({})
|
||||
property string currentDevice: ""
|
||||
property int brightnessLevel: 50
|
||||
property string lastIpcDevice: ""
|
||||
property int brightnessLevel: {
|
||||
const deviceToUse = lastIpcDevice === "" ? getDefaultDevice() : (lastIpcDevice || currentDevice);
|
||||
return deviceToUse ? (deviceBrightness[deviceToUse] || 50) : 50;
|
||||
}
|
||||
property int maxBrightness: 100
|
||||
property bool brightnessInitialized: false
|
||||
|
||||
signal brightnessChanged()
|
||||
signal deviceSwitched()
|
||||
|
||||
function setBrightnessInternal(percentage, device) {
|
||||
const clampedValue = Math.max(1, Math.min(100, percentage));
|
||||
brightnessLevel = clampedValue;
|
||||
const actualDevice = device === "" ? getDefaultDevice() : (device || currentDevice || getDefaultDevice());
|
||||
|
||||
// Update the device brightness cache
|
||||
if (actualDevice) {
|
||||
var newBrightness = deviceBrightness;
|
||||
newBrightness[actualDevice] = clampedValue;
|
||||
deviceBrightness = newBrightness;
|
||||
}
|
||||
|
||||
if (device)
|
||||
brightnessSetProcess.command = ["brightnessctl", "-d", device, "set", clampedValue + "%"];
|
||||
else
|
||||
@@ -36,6 +50,8 @@ Singleton {
|
||||
return ;
|
||||
|
||||
currentDevice = deviceName;
|
||||
lastIpcDevice = deviceName;
|
||||
deviceSwitched();
|
||||
brightnessGetProcess.command = ["brightnessctl", "-m", "-d", deviceName, "get"];
|
||||
brightnessGetProcess.running = true;
|
||||
}
|
||||
@@ -44,6 +60,33 @@ Singleton {
|
||||
deviceListProcess.running = true;
|
||||
}
|
||||
|
||||
function getDeviceBrightness(deviceName) {
|
||||
return deviceBrightness[deviceName] || 50;
|
||||
}
|
||||
|
||||
function getDefaultDevice() {
|
||||
// Find first backlight device
|
||||
for (const device of devices) {
|
||||
if (device.class === "backlight") {
|
||||
return device.name;
|
||||
}
|
||||
}
|
||||
// Fallback to first device if no backlight found
|
||||
return devices.length > 0 ? devices[0].name : "";
|
||||
}
|
||||
|
||||
function getCurrentDeviceInfo() {
|
||||
const deviceToUse = lastIpcDevice === "" ? getDefaultDevice() : (lastIpcDevice || currentDevice);
|
||||
if (!deviceToUse) return null;
|
||||
|
||||
for (const device of devices) {
|
||||
if (device.name === deviceToUse) {
|
||||
return device;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
refreshDevices();
|
||||
}
|
||||
@@ -128,9 +171,18 @@ Singleton {
|
||||
const current = parseInt(parts[2]);
|
||||
const max = parseInt(parts[4]);
|
||||
maxBrightness = max;
|
||||
brightnessLevel = Math.round((current / max) * 100);
|
||||
const brightness = Math.round((current / max) * 100);
|
||||
|
||||
// Update the device brightness cache
|
||||
if (currentDevice) {
|
||||
var newBrightness = deviceBrightness;
|
||||
newBrightness[currentDevice] = brightness;
|
||||
deviceBrightness = newBrightness;
|
||||
}
|
||||
|
||||
brightnessInitialized = true;
|
||||
console.log("BrightnessService: Device", currentDevice, "brightness:", brightnessLevel + "%");
|
||||
console.log("BrightnessService: Device", currentDevice, "brightness:", brightness + "%");
|
||||
brightnessChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -146,6 +198,10 @@ Singleton {
|
||||
const value = parseInt(percentage);
|
||||
const clampedValue = Math.max(1, Math.min(100, value));
|
||||
const targetDevice = device || "";
|
||||
root.lastIpcDevice = targetDevice;
|
||||
if (targetDevice && targetDevice !== root.currentDevice) {
|
||||
root.setCurrentDevice(targetDevice);
|
||||
}
|
||||
root.setBrightness(clampedValue, targetDevice);
|
||||
if (targetDevice)
|
||||
return "Brightness set to " + clampedValue + "% on " + targetDevice;
|
||||
@@ -157,10 +213,15 @@ Singleton {
|
||||
if (!root.brightnessAvailable)
|
||||
return "Brightness control not available";
|
||||
|
||||
const currentLevel = root.brightnessLevel;
|
||||
const targetDevice = device || "";
|
||||
const actualDevice = targetDevice === "" ? root.getDefaultDevice() : targetDevice;
|
||||
const currentLevel = actualDevice ? root.getDeviceBrightness(actualDevice) : root.brightnessLevel;
|
||||
const stepValue = parseInt(step || "10");
|
||||
const newLevel = Math.max(1, Math.min(100, currentLevel + stepValue));
|
||||
const targetDevice = device || "";
|
||||
root.lastIpcDevice = targetDevice;
|
||||
if (targetDevice && targetDevice !== root.currentDevice) {
|
||||
root.setCurrentDevice(targetDevice);
|
||||
}
|
||||
root.setBrightness(newLevel, targetDevice);
|
||||
if (targetDevice)
|
||||
return "Brightness increased to " + newLevel + "% on " + targetDevice;
|
||||
@@ -172,10 +233,15 @@ Singleton {
|
||||
if (!root.brightnessAvailable)
|
||||
return "Brightness control not available";
|
||||
|
||||
const currentLevel = root.brightnessLevel;
|
||||
const targetDevice = device || "";
|
||||
const actualDevice = targetDevice === "" ? root.getDefaultDevice() : targetDevice;
|
||||
const currentLevel = actualDevice ? root.getDeviceBrightness(actualDevice) : root.brightnessLevel;
|
||||
const stepValue = parseInt(step || "10");
|
||||
const newLevel = Math.max(1, Math.min(100, currentLevel - stepValue));
|
||||
const targetDevice = device || "";
|
||||
root.lastIpcDevice = targetDevice;
|
||||
if (targetDevice && targetDevice !== root.currentDevice) {
|
||||
root.setCurrentDevice(targetDevice);
|
||||
}
|
||||
root.setBrightness(newLevel, targetDevice);
|
||||
if (targetDevice)
|
||||
return "Brightness decreased to " + newLevel + "% on " + targetDevice;
|
||||
|
||||
Reference in New Issue
Block a user