mopidy-musicbox-webclient/webclient/js/controls.js

280 lines
6.4 KiB
JavaScript
Executable File

/********************************************************
* play an uri from a trackslist or the current playlist
*********************************************************/
function playTrack(addtoqueue) {
//stop directly, for user feedback
if (!addtoqueue) {
mopidy.playback.stop(true);
}
$('#popupTracks').popup('close');
$('#controlsmodal').popup('close');
toast('Loading...');
//function playtrack(uri, playlisturi) {
playlisturi = $('#popupTracks').data("list");
uri = $('#popupTracks').data("track");
var trackslist = new Array();
var track, tracksbefore, tracksafter;
var tracks = getTracksFromUri(playlisturi);
if (tracks) {
if (!addtoqueue) {
clearQueue();
}
$(CURRENT_PLAYLIST_TABLE).empty();
} else {
tracks = currentplaylist;
for (var i = 0; i < tracks.length; i++) {
if (tracks[i].uri == uri) {
track = i + 1;
break;
}
}
for (var i = 0; i < track; i++) {
mopidy.playback.next();
}
mopidy.playback.play();
return false;
}
//find track that was selected
for (var selected = 0; selected < tracks.length; selected++) {
if (tracks[selected].uri == uri) {
break;
}
}
//find track that is playing
for (var playing = 0; playing < currentplaylist.length; playing++) {
if (currentplaylist[playing].uri == songdata.uri) {
break;
}
}
//switch popup options
switch (addtoqueue) {
case ADD_THIS_BOTTOM:
mopidy.tracklist.add(tracks.slice(selected, selected + 1));
return false;
case PLAY_NEXT:
mopidy.tracklist.add(tracks.slice(selected, selected + 1), playing + 1);
return false;
case ADD_ALL_BOTTOM:
mopidy.tracklist.add(tracks);
return false;
}
// first add track to be played, then the other tracks
mopidy.tracklist.add(tracks.slice(selected, selected + 1) );
//wait 1.5 second before adding the rest to give server the time to start playing
setTimeout(function() {
mopidy.tracklist.add(tracks.slice(0, selected), 0);
if (selected < tracks.length) {
mopidy.tracklist.add(tracks.slice(selected + 1) );
}
}, (1500));
mopidy.playback.play();
return false;
}
function clearQueue () {
mopidy.tracklist.clear();
return false;
}
/**********************
* Buttons
*/
function doShuffle() {
mopidy.playback.stop(true);
mopidy.tracklist.shuffle();
mopidy.playback.play();
}
/* Toggle state of play button */
function setPlayState(nwplay) {
if (nwplay) {
$("#playimg").attr('src', 'images/icons/pause_32x32.png');
} else {
$("#playimg").attr('src', 'images/icons/play_alt_32x32.png');
}
play = nwplay;
}
//play or pause
function doPlay() {
if (!play) {
mopidy.playback.play();
} else {
mopidy.playback.pause();
}
setPlayState(!play);
}
function doPrevious() {
mopidy.playback.previous();
}
function doNext() {
mopidy.playback.next();
}
function backbt() {
history.back();
return false;
}
/***************
* Options
*/
function setRepeat(nwrepeat) {
if (repeat == nwrepeat) {
return
}
if (!nwrepeat) {
$("#repeatbt").attr('src', 'images/icons/reload_alt_18x21.png');
} else {
$("#repeatbt").attr('src', 'images/icons/reload_18x21.png');
}
repeat = nwrepeat;
}
function setRandom(nwrandom) {
if (random == nwrandom) {
return
}
if (!nwrandom) {
$("#randombt").attr('src', 'images/icons/loop_alt2_24x21.png');
} else {
$("#randombt").attr('src', 'images/icons/loop_24x24.png');
}
random = nwrandom;
}
function doRandom() {
if (random == false) {
mopidy.playback.setRandom(true);
} else {
mopidy.playback.setRandom(false);
}
setRandom(!random);
}
function doRepeat() {
if (repeat == false) {
mopidy.playback.setRepeat(true).then();
} else {
mopidy.playback.setRepeat(false).then();
}
setRepeat(!repeat);
}
/*********************
* Track Slider
* Use a timer to prevent looping of commands
*********************/
function doSeekPos(value) {
var val = $("#trackslider").val();
newposition = Math.round(val);
clearTimeout(seekTimer);
if (!initgui) {
pauseTimer();
//set timer to not trigger it too much
posChanging = true;
seekTimer = setTimeout(triggerPos, 200);
}
}
function triggerPos() {
if (mopidy) {
mopidy.playback.stop();
mopidy.playback.seek(newposition);
mopidy.playback.resume();
posChanging = false;
}
}
function setPosition(pos) {
if (posChanging) {
return;
}
var oldval = initgui;
if (pos > songlength) {
pos = songlength;
pauseTimer();
}
currentposition = pos;
initgui = true;
$("#trackslider").val(currentposition).slider('refresh');
initgui = oldval;
$("#songelapsed").html(timeFromSeconds(currentposition / 1000));
}
/********************
* Volume slider
* Use a timer to prevent looping of commands
*/
function setVolume(value) {
var oldval = initgui;
initgui = true;
$("#volumeslider").val(value).slider('refresh');
initgui = oldval;
}
function doVolume(value) {
if (!initgui) {
volumeChanging = true;
clearInterval(volumeTimer);
volumeTimer = setTimeout(triggerVolume, 2000);
mopidy.playback.setVolume(parseInt(value));
}
}
function triggerVolume() {
volumeChanging = false;
}
function doMute() {
//only emit the event, not the status
if (muteVolume == -1) {
$("#mutebt").attr('src', 'images/icons/volume_mute_24x18.png');
muteVolume = currentVolume;
mopidy.playback.setVolume(0).then();
} else {
$("#mutebt").attr('src', 'images/icons/volume_24x18.png');
mopidy.playback.setVolume(muteVolume).then();
muteVolume = -1;
}
}
/*******
* Track timer
*/
//timer function to update interface
function updateTimer() {
currentposition += TRACK_TIMER;
setPosition(currentposition);
// $("#songelapsed").html(timeFromSeconds(currentposition / 1000));
}
function resumeTimer() {
pauseTimer();
posTimer = setInterval(updateTimer, TRACK_TIMER);
}
function initTimer() {
pauseTimer();
// setPosition(0);
resumeTimer();
}
function pauseTimer() {
clearInterval(posTimer);
}