dotfiles/ags/config/media/Media.js

51 lines
1.4 KiB
JavaScript

const mpris = await Service.import("mpris")
const players = mpris.bind("players")
const FALLBACK_ICON = "audio-x-generic-symbolic"
const PLAY_ICON = "media-playback-start-symbolic"
const PAUSE_ICON = "media-playback-pause-symbolic"
const PREV_ICON = "media-skip-backward-symbolic"
const NEXT_ICON = "media-skip-forward-symbolic"
/** @param {number} length */
function lengthStr(length) {
const min = Math.floor(length / 60)
const sec = Math.floor(length % 60)
const sec0 = sec < 10 ? "0" : ""
return `${min}:${sec0}${sec}`
}
/** @param {import('types/service/mpris').MprisPlayer} player */
function Player(player) {
return Widget.Label({ label: `${player.name}: ${player.cover_path}` })
// return Widget.Overlay({
// child: Widget.Box({
// class_name: "img",
// vpack: "start",
// css: player.bind("cover_path").transform(p => `background-image: url('${p}');`),
// }),
// overlays: [
// Widget.Label({ label: player.name }),
// ],
// })
}
function MediaContent() {
return Widget.Box({
children: players.as(p => p.map(Player)),
})
}
export function Media(monitor = 0) {
return Widget.Window({
monitor,
visible: false,
exclusivity: "normal",
className: "media",
margins: [10, 10, 0, 10],
name: `media${monitor}`,
anchor: ["left", "top"],
child: MediaContent(),
})
}