From 17bee0e3854163c9ce142b502d8dad30caa52c5d Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sun, 13 Apr 2025 22:15:25 +1000 Subject: feat: add music visualiser --- src/modules/mediadisplay/index.tsx | 188 ++++++++++++++++++++++++++++++++ src/modules/mediadisplay/visualiser.tsx | 76 +++++++++++++ src/modules/sidebar/dashboard.tsx | 6 +- src/modules/sidebar/modules/media.tsx | 6 +- 4 files changed, 266 insertions(+), 10 deletions(-) create mode 100644 src/modules/mediadisplay/index.tsx create mode 100644 src/modules/mediadisplay/visualiser.tsx (limited to 'src/modules') diff --git a/src/modules/mediadisplay/index.tsx b/src/modules/mediadisplay/index.tsx new file mode 100644 index 0000000..307087c --- /dev/null +++ b/src/modules/mediadisplay/index.tsx @@ -0,0 +1,188 @@ +import type { Monitor } from "@/services/monitors"; +import Players from "@/services/players"; +import { lengthStr } from "@/utils/strings"; +import { bind, Variable } from "astal"; +import { App, Astal, Gtk } from "astal/gtk3"; +import AstalMpris from "gi://AstalMpris"; +import Visualiser from "./visualiser"; + +type Selected = Variable; + +const bindIcon = (player: AstalMpris.Player) => + bind(player, "identity").as(i => { + const icon = `caelestia-${i?.toLowerCase().replaceAll(" ", "-")}-symbolic`; + return Astal.Icon.lookup_icon(icon) ? icon : "caelestia-media-generic-symbolic"; + }); + +const PlayerButton = ({ + player, + selected, + showDropdown, +}: { + player: AstalMpris.Player; + selected: Selected; + showDropdown: Variable; +}) => ( + +); + +const Selector = ({ player, selected }: { player?: AstalMpris.Player; selected: Selected }) => { + const showDropdown = Variable(false); + + return ( + + + + + {bind(Players.get_default(), "list").as(ps => + ps + .filter(p => p !== player) + .map(p => ) + )} + + + + ); +}; + +const NoMedia = ({ selected }: { selected: Selected }) => ( + + + + + +