@jellybrick/mpris-service
Version:
Node.js implementation for the MPRIS D-Bus Interface Specification to create a mediaplayer service
86 lines (70 loc) • 1.86 kB
JavaScript
const MprisInterface = require('./mpris-interface');
const dbus = require('@jellybrick/dbus-next');
const types = require('./types');
const {
property,
method,
signal,
ACCESS_READ
} = dbus.interface;
class TracklistInterface extends MprisInterface {
constructor(player) {
super('org.mpris.MediaPlayer2.TrackList', player);
}
_Tracks = [];
_CanEditTracks = false;
setTracks(tracksPlain) {
this.setProperty('Tracks', tracksPlain);
}
get Tracks() {
return this._Tracks;
}
get CanEditTracks() {
return this._CanEditTracks;
}
GetTracksMetadata(trackIds) {
return this.player.tracks.filter((t) => {
return trackIds.some((id) => id === t['mpris:trackid']);
}).map(types.metadataToDbus);
}
AddTrack(uri, afterTrack, setAsCurrent) {
this.player.emit('addTrack', { uri, afterTrack, setAsCurrent });
}
RemoveTrack(trackId) {
this.player.emit('removeTrack', trackId);
}
GoTo(trackId) {
this.player.emit('goTo', trackId);
}
TrackListReplaced(replacedPlain) {
this.setTracks(replacedPlain);
// TODO what's the active track?
return [
this._Tracks,
'/org/mpris/MediaPlayer2/TrackList/NoTrack'
];
}
TrackAdded(metadata) {
return types.metadataToDbus(metadata);
}
TrackRemoved(path) {
return path;
}
TrackMetadataChanged(path, metadata){
return [
path,
types.metadataToDbus(metadata)
];
}
}
module.exports = TracklistInterface;