Files
2025-03-31 20:14:11 +02:00

93 lines
2.6 KiB
Python

from ignis.widgets import Widget
from ignis.services.network import NetworkService
from ignis.services.notifications import NotificationService
from ignis.services.recorder import RecorderService
from ignis.services.audio import AudioService
network = NetworkService.get_default()
notifications = NotificationService.get_default()
recorder = RecorderService.get_default()
audio = AudioService.get_default()
def indicator_icon(**kwargs):
return Widget.Icon(style="margin-right: 0.5rem;", css_classes=["unset"], **kwargs)
def wifi_icon():
def check_visible(*args) -> bool:
if len(network.wifi.devices) > 0:
if network.ethernet.is_connected:
if network.wifi.is_connected:
return True
else:
return False
else:
return True
else:
return False
icon = indicator_icon(image=network.wifi.bind("icon-name"))
icon.visible = network.wifi.bind("devices", check_visible)
icon.visible = network.ethernet.bind("is_connected", check_visible)
icon.visible = network.wifi.bind("is_connected", check_visible)
return icon
def ethernet_icon():
def check_visible(*args) -> bool:
if len(network.ethernet.devices) > 0:
if network.wifi.is_connected:
if network.ethernet.is_connected:
return True
else:
return False
else:
return True
else:
return False
icon = indicator_icon(image=network.ethernet.bind("icon_name"))
icon.visible = network.ethernet.bind("devices", check_visible)
icon.visible = network.wifi.bind("is_connected", check_visible)
icon.visible = network.ethernet.bind("is_connected", check_visible)
return icon
def dnd_icon():
return indicator_icon(
image="notification-disabled-symbolic",
visible=notifications.bind("dnd"),
)
def recorder_icon():
def check_state(icon: Widget.Icon) -> None:
if recorder.is_paused:
icon.remove_css_class("active")
else:
icon.add_css_class("active")
icon = indicator_icon(
image="media-record-symbolic",
visible=recorder.bind("active"),
)
icon.add_css_class("record-indicator")
recorder.connect("notify::is-paused", lambda x, y: check_state(icon))
return icon
def volume_icon():
return indicator_icon(
image=audio.speaker.bind("icon_name"),
)
def status_icons():
return Widget.Box(
child=[recorder_icon(), wifi_icon(), ethernet_icon(), volume_icon(), dnd_icon()]
)