[SCRIPT] Updated
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
import datetime
|
||||
from ignis.widgets import Widget
|
||||
from ignis.app import IgnisApp
|
||||
from ignis.utils import Utils
|
||||
from ignis.variable import Variable
|
||||
from ignis.services.network import NetworkService
|
||||
from ignis.services.notifications import NotificationService
|
||||
from ignis.services.recorder import RecorderService
|
||||
from ignis.services.audio import AudioService
|
||||
from ..indicator_icon import IndicatorIcon, NetworkIndicatorIcon
|
||||
from ignis.options import options
|
||||
|
||||
network = NetworkService.get_default()
|
||||
notifications = NotificationService.get_default()
|
||||
recorder = RecorderService.get_default()
|
||||
audio = AudioService.get_default()
|
||||
|
||||
app = IgnisApp.get_default()
|
||||
|
||||
current_time = Variable(
|
||||
value=Utils.Poll(1000, lambda x: datetime.datetime.now().strftime("%H:%M:%S")).bind(
|
||||
"output"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class WifiIcon(NetworkIndicatorIcon):
|
||||
def __init__(self):
|
||||
super().__init__(device_type=network.wifi, other_device_type=network.ethernet)
|
||||
|
||||
|
||||
class EthernetIcon(NetworkIndicatorIcon):
|
||||
def __init__(self):
|
||||
super().__init__(device_type=network.ethernet, other_device_type=network.wifi)
|
||||
|
||||
|
||||
class VpnIcon(IndicatorIcon):
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
image=network.vpn.bind("icon_name"),
|
||||
visible=network.vpn.bind("is_connected"),
|
||||
)
|
||||
|
||||
|
||||
class DNDIcon(IndicatorIcon):
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
image="notification-disabled-symbolic",
|
||||
visible=options.notifications.bind("dnd"),
|
||||
)
|
||||
|
||||
|
||||
class RecorderIcon(IndicatorIcon):
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
image="media-record-symbolic",
|
||||
css_classes=["record-indicator"],
|
||||
setup=lambda self: recorder.connect(
|
||||
"notify::is-paused", self.__update_css_class
|
||||
),
|
||||
visible=recorder.bind("active"),
|
||||
)
|
||||
|
||||
def __update_css_class(self, *args) -> None:
|
||||
if recorder.is_paused:
|
||||
self.remove_css_class("active")
|
||||
else:
|
||||
self.add_css_class("active")
|
||||
|
||||
|
||||
class VolumeIcon(IndicatorIcon):
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
image=audio.speaker.bind("icon_name"),
|
||||
)
|
||||
|
||||
|
||||
class StatusPill(Widget.Button):
|
||||
def __init__(self, monitor: int):
|
||||
self._monitor = monitor
|
||||
self._window: Widget.Window = app.get_window("ignis_CONTROL_CENTER") # type: ignore
|
||||
|
||||
super().__init__(
|
||||
child=Widget.Box(
|
||||
child=[
|
||||
RecorderIcon(),
|
||||
WifiIcon(),
|
||||
EthernetIcon(),
|
||||
VpnIcon(),
|
||||
VolumeIcon(),
|
||||
DNDIcon(),
|
||||
Widget.Label(
|
||||
label=current_time.bind("value"),
|
||||
),
|
||||
]
|
||||
),
|
||||
css_classes=self._window.bind(
|
||||
"visible",
|
||||
lambda value: ["clock", "unset", "active"]
|
||||
if value
|
||||
else ["clock", "unset"],
|
||||
),
|
||||
on_click=self.__on_click,
|
||||
)
|
||||
|
||||
def __on_click(self, x) -> None:
|
||||
if self._window.monitor == self._monitor:
|
||||
self._window.visible = not self._window.visible
|
||||
else:
|
||||
self._window.set_monitor(self._monitor)
|
||||
self._window.visible = True
|
||||
Reference in New Issue
Block a user