94 lines
3.2 KiB
Python
Executable File
94 lines
3.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import dbus
|
|
import dbus.mainloop.glib
|
|
from gi.repository import AppIndicator3, Gtk, GLib
|
|
|
|
|
|
class BatteryIndicator:
|
|
def __init__(self):
|
|
self.app = 'battery-indicator'
|
|
self.indicator = AppIndicator3.Indicator.new(
|
|
self.app,
|
|
"/home/teraflops/Icons/dest.png",
|
|
AppIndicator3.IndicatorCategory.SYSTEM_SERVICES
|
|
)
|
|
self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
|
|
|
|
# Cargar el menú
|
|
self.menu = Gtk.Menu()
|
|
self.build_menu()
|
|
self.indicator.set_menu(self.menu)
|
|
|
|
# Inicializar D-Bus
|
|
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
|
|
self.bus = dbus.SystemBus()
|
|
|
|
# Conectar con la batería
|
|
self.battery = self.bus.get_object(
|
|
"org.freedesktop.UPower", "/org/freedesktop/UPower/devices/battery_BAT1")
|
|
self.bus.add_signal_receiver(
|
|
self.on_battery_properties_changed,
|
|
dbus_interface="org.freedesktop.DBus.Properties",
|
|
signal_name="PropertiesChanged",
|
|
path="/org/freedesktop/UPower/devices/battery_BAT1"
|
|
)
|
|
|
|
# Actualizar el estado inicial
|
|
self.update_battery_status()
|
|
|
|
def build_menu(self):
|
|
item_quit = Gtk.MenuItem(label="Salir")
|
|
item_quit.connect("activate", self.quit)
|
|
self.menu.append(item_quit)
|
|
self.menu.show_all()
|
|
|
|
def quit(self, _):
|
|
Gtk.main_quit()
|
|
|
|
def on_battery_properties_changed(self, interface, changed_properties, _):
|
|
if "Percentage" in changed_properties or "State" in changed_properties:
|
|
self.update_battery_status()
|
|
|
|
def update_battery_status(self):
|
|
battery_interface = dbus.Interface(
|
|
self.battery, dbus_interface="org.freedesktop.DBus.Properties")
|
|
percentage = battery_interface.Get(
|
|
"org.freedesktop.UPower.Device", "Percentage")
|
|
state = battery_interface.Get("org.freedesktop.UPower.Device", "State")
|
|
|
|
# Determinar icono y tooltip basado en el porcentaje y el estado
|
|
if state == 1: # Cargando
|
|
icon = "/home/teraflops/Icons/battery_icon_1.png"
|
|
tooltip = f"Batería cargando: {percentage}%"
|
|
elif state == 2: # Descargando
|
|
if percentage > 80:
|
|
icon = "/home/teraflops/Icons/dest.png"
|
|
elif percentage > 60:
|
|
icon = "/home/teraflops/Icons/dest.png"
|
|
elif percentage > 40:
|
|
icon = "/home/teraflops/Icons/dest.png"
|
|
elif percentage > 20:
|
|
icon = "/home/teraflops/Icons/dest.png"
|
|
else:
|
|
icon = "/home/teraflops/Icons/dest.png"
|
|
tooltip = f"Batería: {percentage}% (Descargando)"
|
|
elif state == 4: # Totalmente cargada
|
|
icon = "/home/teraflops/Icons/dest.png"
|
|
tooltip = "Batería completamente cargada"
|
|
else:
|
|
icon = "/home/teraflops/Icons/dest.png"
|
|
tooltip = "Estado de batería desconocido"
|
|
|
|
# Actualizar el icono y el tooltip
|
|
self.indicator.set_icon_full(icon, tooltip)
|
|
print(f"Icono actualizado a {icon} con tooltip: {tooltip}")
|
|
|
|
|
|
def main():
|
|
BatteryIndicator()
|
|
Gtk.main()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|