feat: add initial eww config
This commit is contained in:
Executable
+46
@@ -0,0 +1,46 @@
|
||||
import dbus
|
||||
from dbus.mainloop.glib import DBusGMainLoop
|
||||
from gi.repository import GLib
|
||||
import sys
|
||||
|
||||
class TrayMonitor:
|
||||
def __init__(self):
|
||||
# настраиваем dbus и вешаем слушателей
|
||||
DBusGMainLoop(set_as_default=True)
|
||||
self.bus = dbus.SessionBus()
|
||||
self.interface = "org.kde.StatusNotifierWatcher"
|
||||
self.path = "/StatusNotifierWatcher"
|
||||
|
||||
# подписываемся на регистрацию и удаление иконок
|
||||
self.bus.add_signal_receiver(self.push_update, "StatusNotifierItemRegistered", self.interface)
|
||||
self.bus.add_signal_receiver(self.push_update, "StatusNotifierItemUnregistered", self.interface)
|
||||
|
||||
# выводим начальное состояние
|
||||
self.push_update()
|
||||
|
||||
def get_count(self):
|
||||
# опрашиваем шину на количество активных элементов
|
||||
try:
|
||||
obj = self.bus.get_object(self.interface, self.path)
|
||||
props = dbus.Interface(obj, "org.freedesktop.DBus.Properties")
|
||||
items = props.Get(self.interface, "RegisteredStatusNotifierItems")
|
||||
return len(items)
|
||||
except:
|
||||
return 0
|
||||
|
||||
def push_update(self, *args):
|
||||
# шлем цифру в stdout
|
||||
count = self.get_count()
|
||||
sys.stdout.write(f"{count}\n")
|
||||
sys.stdout.flush()
|
||||
|
||||
def run(self):
|
||||
# цикл glib, чтобы слушал сигналы
|
||||
self.loop = GLib.MainLoop()
|
||||
try:
|
||||
self.loop.run()
|
||||
except KeyboardInterrupt:
|
||||
sys.exit(0)
|
||||
|
||||
if __name__ == "__main__":
|
||||
TrayMonitor().run()
|
||||
Reference in New Issue
Block a user