45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
const mpris = await Service.import('mpris');
|
|
|
|
const Media = () => Widget.Box({
|
|
class_name: 'media-container',
|
|
spacing: 10,
|
|
children: [
|
|
Widget.Button({
|
|
class_name: 'media-btn',
|
|
on_clicked: () => mpris.players[0]?.previous(),
|
|
child: Widget.Label('⏮'),
|
|
}),
|
|
Widget.Button({
|
|
class_name: 'media-btn',
|
|
on_clicked: () => mpris.players[0]?.playPause(),
|
|
child: Widget.Label().hook(mpris, label => {
|
|
const player = mpris.players[0];
|
|
label.label = player?.play_back_status === 'Playing' ? '⏸' : '▶';
|
|
}),
|
|
}),
|
|
Widget.Button({
|
|
class_name: 'media-btn',
|
|
on_clicked: () => mpris.players[0]?.next(),
|
|
child: Widget.Label('⏭'),
|
|
}),
|
|
Widget.Label({
|
|
class_name: 'media-text',
|
|
}).hook(mpris, label => {
|
|
const player = mpris.players[0];
|
|
label.label = player ? `${player.track_title} - ${player.track_artists.join(', ')}` : 'No Media Playing';
|
|
}),
|
|
],
|
|
});
|
|
|
|
App.config({
|
|
style: './style.css',
|
|
windows: [
|
|
Widget.Window({
|
|
name: 'media_widget',
|
|
anchor: ['bottom', 'left'],
|
|
margins: [0, 0, 20, 20],
|
|
layer: 'bottom',
|
|
child: Media(),
|
|
})
|
|
]
|
|
}); |