Files
wehub-resource-sync ead81af521
Deploy to GitHub Pages / deploy (push) Failing after 0s
CI / go (push) Has been cancelled
CI / build (darwin, macos-14) (push) Has been cancelled
CI / build (windows, windows-2025) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:31:13 +08:00

59 lines
1.5 KiB
Go

package mediactl
import (
"strconv"
"strings"
"github.com/godbus/dbus/v5"
"github.com/bjarneo/cliamp/internal/playback"
)
// trackPath returns a unique MPRIS track object path for a sequence number.
// Unique per-track ids let SetPosition reject seeks aimed at a track that is
// no longer current.
func trackPath(seq int64) dbus.ObjectPath {
return dbus.ObjectPath("/org/mpris/MediaPlayer2/Track/" + strconv.FormatInt(seq, 10))
}
func makeMetadata(t playback.Track, trackID dbus.ObjectPath) map[string]dbus.Variant {
t.Title = dbusString(t.Title)
t.Artist = dbusString(t.Artist)
t.Album = dbusString(t.Album)
t.Genre = dbusString(t.Genre)
t.URL = dbusString(t.URL)
m := map[string]dbus.Variant{
"mpris:trackid": dbus.MakeVariant(trackID),
}
if t.Title != "" {
m["xesam:title"] = dbus.MakeVariant(t.Title)
}
if t.Artist != "" {
m["xesam:artist"] = dbus.MakeVariant([]string{t.Artist})
}
if t.Album != "" {
m["xesam:album"] = dbus.MakeVariant(t.Album)
}
if t.Genre != "" {
m["xesam:genre"] = dbus.MakeVariant([]string{t.Genre})
}
if t.TrackNumber > 0 {
m["xesam:trackNumber"] = dbus.MakeVariant(t.TrackNumber)
}
if t.URL != "" {
m["xesam:url"] = dbus.MakeVariant(t.URL)
}
if t.ArtURL != "" {
m["mpris:artUrl"] = dbus.MakeVariant(t.ArtURL)
}
if t.Duration > 0 {
m["mpris:length"] = dbus.MakeVariant(t.Duration.Microseconds())
}
return m
}
func dbusString(s string) string {
return strings.ReplaceAll(strings.ToValidUTF8(s, "\uFFFD"), "\x00", "")
}