add brightness service and slider
This commit is contained in:
52
services/brightness/__init__.py
Normal file
52
services/brightness/__init__.py
Normal file
@ -0,0 +1,52 @@
|
||||
from astal import read_file, write_file, gi
|
||||
|
||||
gi.require_version("GObject", "2.0")
|
||||
gi.require_version("GUdev", "1.0")
|
||||
from gi.repository import GObject, GUdev, GLib
|
||||
|
||||
class Brightness(GObject.Object):
|
||||
_brightness: float = 0
|
||||
|
||||
def __init__(self, device: str):
|
||||
super().__init__()
|
||||
|
||||
self._device_name = device
|
||||
self._udev_client = GUdev.Client.new(["backlight"])
|
||||
self._udev_client.connect('uevent', self.on_uevent)
|
||||
|
||||
def on_uevent(self, client, action, device):
|
||||
if device.get_name() != self._device_name:
|
||||
return
|
||||
|
||||
self._brightness = self._get_brightness()
|
||||
self.notify('brightness')
|
||||
|
||||
def _get_brightness(self):
|
||||
return self._get_current_brightness() / self._get_max_brightness()
|
||||
|
||||
def _get_current_brightness(self):
|
||||
return int(read_file(f"/sys/class/backlight/{self._device_name}/brightness"))
|
||||
|
||||
def _get_max_brightness(self):
|
||||
return int(read_file(f"/sys/class/backlight/{self._device_name}/max_brightness"))
|
||||
|
||||
@GObject.Property(type=float)
|
||||
def brightness(self):
|
||||
return self._brightness
|
||||
|
||||
@brightness.setter
|
||||
def brightness(self, value: float):
|
||||
if value < 0:
|
||||
value = 0
|
||||
|
||||
elif value > 1:
|
||||
value = 1
|
||||
|
||||
self._brightness = value
|
||||
GLib.file_set_contents_full(f"/sys/class/backlight/{self._device_name}/brightness", bytes(str(round(self._brightness * self._get_max_brightness())), 'utf-8'), GLib.FileSetContentsFlags.ONLY_EXISTING, 0o666)
|
||||
|
||||
def get_brightness(self):
|
||||
return self._brightness
|
||||
|
||||
def set_brightness(self, value):
|
||||
self.brightness = value
|
Reference in New Issue
Block a user