77 lines
2.1 KiB
Python
77 lines
2.1 KiB
Python
import os
|
|
from ignis.widgets import Widget
|
|
from ignis.utils import Utils
|
|
from ignis.app import IgnisApp
|
|
from ignis.services.fetch import FetchService
|
|
from ..settings import settings_window
|
|
from options import avatar_opt
|
|
|
|
fetch = FetchService.get_default()
|
|
app = IgnisApp.get_default()
|
|
|
|
|
|
def format_uptime(value):
|
|
days, hours, minutes, seconds = value
|
|
if days:
|
|
return f"up {days:02}:{hours:02}:{minutes:02}"
|
|
else:
|
|
return f"up {hours:02}:{minutes:02}"
|
|
|
|
|
|
def user_image() -> Widget.Picture:
|
|
return Widget.Picture(
|
|
image=avatar_opt.bind(
|
|
"value",
|
|
lambda value: "user-info" if not os.path.exists(value) else value,
|
|
),
|
|
width=44,
|
|
height=44,
|
|
content_fit="cover",
|
|
style="border-radius: 10rem;",
|
|
)
|
|
|
|
|
|
def username() -> Widget.Box:
|
|
return Widget.Box(
|
|
child=[
|
|
Widget.Label(
|
|
label=os.getenv("USER"), css_classes=["user-name"], halign="start"
|
|
),
|
|
Widget.Label(
|
|
label=Utils.Poll(
|
|
timeout=60 * 1000, callback=lambda x: fetch.uptime
|
|
).bind("output", lambda value: format_uptime(value)),
|
|
halign="start",
|
|
css_classes=["user-name-secondary"],
|
|
),
|
|
],
|
|
vertical=True,
|
|
css_classes=["user-name-box"],
|
|
)
|
|
|
|
|
|
def settings_button() -> Widget.Button:
|
|
return Widget.Button(
|
|
child=Widget.Icon(image="emblem-system-symbolic", pixel_size=20),
|
|
halign="end",
|
|
hexpand=True,
|
|
css_classes=["user-settings", "unset"],
|
|
on_click=lambda x: settings_window(),
|
|
)
|
|
|
|
|
|
def power_button() -> Widget.Button:
|
|
return Widget.Button(
|
|
child=Widget.Icon(image="system-shutdown-symbolic", pixel_size=20),
|
|
halign="end",
|
|
css_classes=["user-power", "unset"],
|
|
on_click=lambda x: app.toggle_window("ignis_POWERMENU"),
|
|
)
|
|
|
|
|
|
def user() -> Widget.Box:
|
|
return Widget.Box(
|
|
child=[user_image(), username(), settings_button(), power_button()],
|
|
css_classes=["user"],
|
|
)
|