import { Astal, Gtk } from "astal/gtk3"
import Mpris from "gi://AstalMpris"
import { bind } from "astal"
function lengthStr(length: number) {
const min = Math.floor(length / 60)
const sec = Math.floor(length % 60)
const sec0 = sec < 10 ? "0" : ""
return `${min}:${sec0}${sec}`
}
function MediaPlayer({ player }: { player: Mpris.Player }) {
const { START, END } = Gtk.Align
const title = bind(player, "title").as(t =>
t || "Unknown Track")
const artist = bind(player, "artist").as(a =>
a || "Unknown Artist")
const coverArt = bind(player, "coverArt").as(c =>
`background-image: url('${c}')`)
const playerIcon = bind(player, "entry").as(e =>
Astal.Icon.lookup_icon(e) ? e : "audio-x-generic-symbolic")
const position = bind(player, "position").as(p => player.length > 0
? p / player.length : 0)
const playIcon = bind(player, "playbackStatus").as(s =>
s === Mpris.PlaybackStatus.PLAYING
? "media-playback-pause-symbolic"
: "media-playback-start-symbolic"
)
return
l > 0)}
onDragged={({ value }) => player.position = value * player.length}
value={position}
/>
}
export default function MprisPlayers() {
const mpris = Mpris.get_default()
return
{bind(mpris, "players").as(arr => arr.map(player => (
)))}
}