From 0eacbc0ea2b50868d1127bc9a5265d4352632e58 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sat, 25 Jan 2025 16:54:43 +1100 Subject: media: make popdown window --- src/modules/bar.tsx | 4 +- src/modules/popdowns/index.tsx | 2 + src/modules/popdowns/media.tsx | 140 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 src/modules/popdowns/media.tsx (limited to 'src') diff --git a/src/modules/bar.tsx b/src/modules/bar.tsx index 60471ca..c7f168e 100644 --- a/src/modules/bar.tsx +++ b/src/modules/bar.tsx @@ -87,9 +87,9 @@ const MediaPlaying = () => { players.lastPlayer ? `${players.lastPlayer.title} - ${players.lastPlayer.artist}` : fallback; return ( + + + + + + player.set_position(self.value * player.length)} + setup={self => { + const update = () => { + self.set_tooltip_text(`${lengthStr(player.position)}/${lengthStr(player.length)}`); + self.set_value(player.position / player.length); + }; + self.hook(player, "notify::position", update); + self.hook(player, "notify::length", update); + update(); + }} + /> + , + ]} + > + {background} + + ); +}; + +export default () => { + const shown = Variable("none"); + return ( + + + { + if (event.button === Astal.MouseButton.SECONDARY) { + const current = Players.get_default().list.find(p => p.busName === shown.get()); + if (current) Players.get_default().makeCurrent(current); + } + }} + onScroll={(_, event) => { + const players = AstalMpris.get_default().players.filter(isRealPlayer); + const idx = players.findIndex(p => p.busName === shown.get()); + if (idx === -1) return; + if (event.delta_y < 0) { + if (idx > 0) shown.set(players[idx - 1].busName); + } else if (idx < players.length - 1) shown.set(players[idx + 1].busName); + }} + > + { + const players = new Map(); + + const addPlayer = (player: AstalMpris.Player) => { + if (!isRealPlayer(player) || players.has(player.busName)) return; + const widget = ; + self.add_named(widget, player.busName); + if (players.size === 0) shown.set(player.busName); + players.set(player.busName, widget); + }; + + for (const player of Players.get_default().list) addPlayer(player); + + self.hook(AstalMpris.get_default(), "player-added", (_, player) => addPlayer(player)); + self.hook(AstalMpris.get_default(), "player-closed", (_, player) => { + players.get(player.busName)?.destroy(); + players.delete(player.busName); + if (shown.get() === player.busName) + shown.set(AstalMpris.get_default().players.find(isRealPlayer)?.busName ?? "none"); + }); + }} + > + + + + + + + ); +}; -- cgit v1.2.3-freya