51 lines
1.4 KiB
JavaScript
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(),
|
|
})
|
|
}
|