platypush/platypush/backend/http/static/js/music.mpd.js

130 lines
4.1 KiB
JavaScript

$(document).ready(function() {
var execute = function(request, onSuccess, onComplete) {
request['target'] = 'localhost';
$.ajax({
type: 'POST',
url: '/execute',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(request),
complete: function() {
if (onComplete) {
onComplete();
}
},
success: function(response, status, xhr) {
if (onSuccess) {
onSuccess(response, status, xhr);
}
},
beforeSend: function(xhr) {
if (window.token) {
xhr.setRequestHeader('X-Token', window.token);
}
},
});
};
var updateControls = function(status, track) {
var $playbackControls = $('.playback-controls');
var $curTrack = $('.now-playing');
if (status) {
switch (status.state.toLowerCase()) {
case 'stop':
$playbackControls.find('button[data-action=pause]').hide();
$playbackControls.find('button[data-action=play]').show();
$curTrack.find('.artist').hide();
$curTrack.find('.track').hide();
$curTrack.find('.no-track').show();
break;
case 'pause':
$playbackControls.find('button[data-action=pause]').hide();
$playbackControls.find('button[data-action=play]').show();
$curTrack.find('.artist').show();
$curTrack.find('.track').show();
$curTrack.find('.no-track').hide();
break;
case 'play':
$playbackControls.find('button[data-action=pause]').show();
$playbackControls.find('button[data-action=play]').hide();
$curTrack.find('.artist').show();
$curTrack.find('.track').show();
$curTrack.find('.no-track').hide();
break;
}
}
if (track) {
$curTrack.find('.artist').text(track.artist);
$curTrack.find('.track').text(track.title);
}
};
var onEvent = function(event) {
if (
event.args.type === 'platypush.message.event.music.MusicStopEvent' ||
event.args.type === 'platypush.message.event.music.MusicPlayEvent' ||
event.args.type === 'platypush.message.event.music.MusicPauseEvent' ||
event.args.type === 'platypush.message.event.music.NewPlayingTrackEvent') {
updateControls(status=event.args.status, track=event.args.track);
}
console.log(event);
};
var initStatus = function() {
execute(
{
type: 'request',
action: 'music.mpd.status',
},
onSuccess = function(response) {
updateControls(status=response.response.output);
}
);
execute(
{
type: 'request',
action: 'music.mpd.currentsong',
},
onSuccess = function(response) {
updateControls(status=undefined, track=response.response.output);
}
);
};
var initBindings = function() {
window.registerEventListener(onEvent);
var $playbackControls = $('.playback-controls').find('button');
$playbackControls.on('click', function(evt) {
var action = $(this).data('action');
var $btn = $(this);
$btn.attr('disabled', true);
execute(
{
type: 'request',
action: 'music.mpd.' + action,
},
onComplete = function() {
$btn.removeAttr('disabled');
},
);
});
};
var init = function() {
initStatus();
initBindings();
};
init();
});