import { Gtk } from "ags/gtk4"; import { Wireplumber } from "../../scripts/volume"; import { Notifications } from "../../scripts/notifications"; import { Windows } from "../../windows"; import { Recording } from "../../scripts/recording"; import { Accessor, createBinding, createComputed } from "ags"; import { time, variableToBoolean } from "../../scripts/utils"; import AstalBluetooth from "gi://AstalBluetooth"; import AstalNetwork from "gi://AstalNetwork"; import AstalWp from "gi://AstalWp"; import GObject from "gi://GObject?version=2.0"; export const Status = () => Object.hasOwn(openWins, "control-center") ? "open status" : "status")} onClicked={() => Windows.getDefault().toggle("control-center")}> !Wireplumber.getDefault().isMutedSink() && Wireplumber.getDefault().getSinkVolume() > 0 ? icon : "audio-volume-muted-symbolic") } /> !Wireplumber.getDefault().isMutedSource() && Wireplumber.getDefault().getSourceVolume() > 0 ? icon : "audio-volume-muted-symbolic") } /> { if(!recording || !Recording.getDefault().startedAt) return "..."; const startedAtSeconds = dateTime.to_unix() - Recording.getDefault().startedAt!; if(startedAtSeconds <= 0) return "00:00"; const minutes = Math.floor(startedAtSeconds / 60); const seconds = Math.floor(startedAtSeconds % 60); return `${ minutes < 10 ? `0${minutes}` : minutes }:${ seconds < 10 ? `0${seconds}` : seconds }`; })} /> as Gtk.Button; function VolumeStatus(props: { class?: string, endpoint: AstalWp.Endpoint, icon?: (string|Accessor) }) { return { const conns: Map = new Map(); const controllerScroll = Gtk.EventControllerScroll.new( Gtk.EventControllerScrollFlags.VERTICAL); conns.set(controllerScroll, controllerScroll.connect("scroll", (_, _dx, dy) => { (dy > 0) ? Wireplumber.getDefault().decreaseEndpointVolume(props.endpoint, 5) : Wireplumber.getDefault().increaseEndpointVolume(props.endpoint, 5); })); conns.set(self, self.connect("destroy", () => conns.forEach((id, obj) => obj.disconnect(id)))); }}> {props.icon && } `${Math.floor(vol * 100)}%`)} /> as Gtk.Box; } function StatusIcons() { return { return powered ? ( connected ? "bluetooth-active-symbolic" : "bluetooth-symbolic" ) : "bluetooth-disabled-symbolic" })} class={"bluetooth state"} visible={ createBinding(AstalBluetooth.get_default(), "adapter").as(Boolean) } /> { switch(primary) { case AstalNetwork.Primary.WIRED: return AstalNetwork.get_default().wired.get_icon_name(); case AstalNetwork.Primary.WIFI: return AstalNetwork.get_default().wifi.get_icon_name(); } return "network-no-route-symbolic"; })} class={"network state"} visible={createBinding(AstalNetwork.get_default(), "primary").as(primary => primary !== AstalNetwork.Primary.UNKNOWN)} /> dnd ? "minus-circle-filled-symbolic" : "preferences-system-notifications-symbolic") } /> }