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")
}
/>
}