90 lines
2.4 KiB
JavaScript
90 lines
2.4 KiB
JavaScript
const media = await Service.import("mpris");
|
|
|
|
const MediaInfo = () => {
|
|
const curPlayer = Variable(media.players[0]);
|
|
|
|
media.connect("changed", () => {
|
|
const statusOrder = {
|
|
Playing: 1,
|
|
Paused: 2,
|
|
Stopped: 3,
|
|
};
|
|
|
|
const isPlaying = media.players.find(
|
|
(p) => p["play-back-status"] === "Playing",
|
|
);
|
|
|
|
if (isPlaying) {
|
|
curPlayer.value = media.players.sort(
|
|
(a, b) =>
|
|
statusOrder[a["play-back-status"]] -
|
|
statusOrder[b["play-back-status"]],
|
|
)[0];
|
|
}
|
|
console.log('changed');
|
|
});
|
|
return Widget.Box({
|
|
class_name: "media-indicator-current-media-info",
|
|
hpack: "center",
|
|
hexpand: true,
|
|
vertical: true,
|
|
children: [
|
|
Widget.Box({
|
|
class_name: "media-indicator-current-song-name",
|
|
hpack: "center",
|
|
children: [
|
|
Widget.Label({
|
|
truncate: "end",
|
|
max_width_chars: 35,
|
|
wrap: true,
|
|
class_name: "media-indicator-current-song-name-label",
|
|
setup: (self) => {
|
|
self.hook(curPlayer, () => {
|
|
console.log('did change')
|
|
return (self.label = curPlayer.value["track-title"]);
|
|
});
|
|
},
|
|
}),
|
|
],
|
|
}),
|
|
Widget.Box({
|
|
class_name: "media-indicator-current-song-author",
|
|
hpack: "center",
|
|
children: [
|
|
Widget.Label({
|
|
truncate: "end",
|
|
wrap: true,
|
|
max_width_chars: 35,
|
|
class_name: "media-indicator-current-song-author-label",
|
|
setup: (self) => {
|
|
self.hook(curPlayer, () => {
|
|
console.log(JSON.stringify(curPlayer, null, 2));
|
|
return (self.label = curPlayer.value["track-title"]);
|
|
});
|
|
},
|
|
}),
|
|
],
|
|
}),
|
|
Widget.Box({
|
|
class_name: "media-indicator-current-song-album",
|
|
hpack: "center",
|
|
children: [
|
|
Widget.Label({
|
|
truncate: "end",
|
|
wrap: true,
|
|
max_width_chars: 40,
|
|
class_name: "media-indicator-current-song-album-label",
|
|
setup: (self) => {
|
|
self.hook(curPlayer, () => {
|
|
return (self.label = curPlayer.value["track-album"]);
|
|
});
|
|
},
|
|
}),
|
|
],
|
|
}),
|
|
],
|
|
});
|
|
};
|
|
|
|
export { MediaInfo };
|