Merged SleepTimer patch
Merged SleepTimer patch fromd5b6649feeFor supporting from server side required SleepTimer patch for mopidyd28715fb84
This commit is contained in:
parent
25e29b4ed1
commit
7c42146b16
@ -93,6 +93,31 @@
|
|||||||
value="0" max="100"/>
|
value="0" max="100"/>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li id="navsleeptimer" data-icon="false" style="display: none;">
|
||||||
|
<div>
|
||||||
|
<label for="sleeptimer" >Sleep timer</label>
|
||||||
|
<select id="sleeptimer" >
|
||||||
|
<option value="Off">Off</option>
|
||||||
|
<!-- for testing -->
|
||||||
|
<!-- option value="5" >5 s</option -->
|
||||||
|
<!-- option value="60" >1 min</option -->
|
||||||
|
<!-- option value="120" >2 min</option -->
|
||||||
|
<!-- -->
|
||||||
|
<option value="300" >5 min</option>
|
||||||
|
<option value="600" >10 min</option>
|
||||||
|
<option value="900" >15 min</option>
|
||||||
|
<option value="1800" >30 min</option>
|
||||||
|
<option value="2700" >45 min</option>
|
||||||
|
<option value="3600" >1 hr</option>
|
||||||
|
<option value="5400" >1.5 hr</option>
|
||||||
|
<option value="7200" >2 hr</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div id="sleeptimer_status" class="hidden">
|
||||||
|
Time left: <span id="sleeptimer_timeleft"></span>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li data-icon="false">
|
<li data-icon="false">
|
||||||
<div class="hostInfo">
|
<div class="hostInfo">
|
||||||
{% if hostname == serverIP %}
|
{% if hostname == serverIP %}
|
||||||
@ -552,6 +577,7 @@
|
|||||||
<script type="text/javascript" src="js/library.js"></script>
|
<script type="text/javascript" src="js/library.js"></script>
|
||||||
<script type="text/javascript" src="js/functionsvars.js"></script>
|
<script type="text/javascript" src="js/functionsvars.js"></script>
|
||||||
<script type="text/javascript" src="js/process_ws.js"></script>
|
<script type="text/javascript" src="js/process_ws.js"></script>
|
||||||
|
<script type="text/javascript" src="js/sleeptimer.js"></script>
|
||||||
|
|
||||||
<!-- use lastfm -->
|
<!-- use lastfm -->
|
||||||
<script type="text/javascript" src="vendors/lastfm/lastfm.api.md5.js"></script>
|
<script type="text/javascript" src="vendors/lastfm/lastfm.api.md5.js"></script>
|
||||||
|
|||||||
141
mopidy_musicbox_webclient/static/js/sleeptimer.js
Normal file
141
mopidy_musicbox_webclient/static/js/sleeptimer.js
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
|
||||||
|
(function() {
|
||||||
|
var sleeptimerNav,
|
||||||
|
dropdown,
|
||||||
|
statusArea,
|
||||||
|
timeLeftDisplay;
|
||||||
|
running = false;
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
sleeptimerNav = $('#navsleeptimer');
|
||||||
|
dropdown = $('#sleeptimer');
|
||||||
|
statusArea = $('#sleeptimer_status');
|
||||||
|
timeLeftDisplay = $('#sleeptimer_timeleft');
|
||||||
|
|
||||||
|
dropdown.on('change', function(){
|
||||||
|
var val = this.value;
|
||||||
|
|
||||||
|
if (val == 'Off') {
|
||||||
|
if (running) {
|
||||||
|
mopidy.sleeptimer.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var duration = parseInt(val, 10);
|
||||||
|
start(duration);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Using a timer for now as the mopidy object created in gui.js isn't available yet
|
||||||
|
// and really don't want to have two websocket connections.
|
||||||
|
// Perhaps gui.js needs a way for additional modules to register.
|
||||||
|
|
||||||
|
window.setTimeout(function() {
|
||||||
|
// mopidy.on('state:online', function() {
|
||||||
|
{
|
||||||
|
// if (!!mopidy.sleeptimer) {
|
||||||
|
|
||||||
|
mopidy.on('event:sleeptimerStarted', onServerStart);
|
||||||
|
mopidy.on('event:sleeptimerTick', onServerTick);
|
||||||
|
mopidy.on('event:sleeptimerExpired', onServerTimerExpired);
|
||||||
|
mopidy.on('event:sleeptimerCancelled', onServerCancel);
|
||||||
|
|
||||||
|
sleeptimerNav.show();
|
||||||
|
// initialise with current state
|
||||||
|
mopidy.sleeptimer.getState().done(function(state) {
|
||||||
|
if (state.running) {
|
||||||
|
onServerStart(state);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// });
|
||||||
|
}, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
function start(duration) {
|
||||||
|
renderTimeLeft(duration * 1000);
|
||||||
|
statusArea.show();
|
||||||
|
running = true;
|
||||||
|
mopidy.sleeptimer.start({'duration': duration});
|
||||||
|
}
|
||||||
|
|
||||||
|
// pretty sure there's a library function somewhere to do this
|
||||||
|
function formatDigits(n, numDigits) {
|
||||||
|
s = n.toString();
|
||||||
|
|
||||||
|
if (numDigits > 12) {
|
||||||
|
numDigits = 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s.length < numDigits) {
|
||||||
|
s = '000000000000'.substr(12 - (numDigits - s.length)) + s;
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
// and this
|
||||||
|
function milliSecondsToHMS(dur) {
|
||||||
|
var h, m, s;
|
||||||
|
|
||||||
|
// round to nearest second
|
||||||
|
var ms = dur % 1000;
|
||||||
|
|
||||||
|
if (ms < 500) {
|
||||||
|
dur -= ms;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dur += (1000 - ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
dur = Math.floor(dur /1000);
|
||||||
|
|
||||||
|
s = dur % 60;
|
||||||
|
dur = Math.floor(dur/60);
|
||||||
|
m = dur % 60;
|
||||||
|
h = Math.floor(dur/60);
|
||||||
|
|
||||||
|
return formatDigits(h, 2) + ':' + formatDigits(m, 2) + ':' + formatDigits(s, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderTimeLeft(milliseconds) {
|
||||||
|
timeLeftDisplay.html(milliSecondsToHMS(milliseconds));
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetDisplay() {
|
||||||
|
dropdown.val('Off');
|
||||||
|
dropdown.trigger('change');
|
||||||
|
statusArea.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onServerStart(state) {
|
||||||
|
dropdown.val(state.duration);
|
||||||
|
dropdown.selectmenu('refresh', true);
|
||||||
|
onServerTick(state);
|
||||||
|
statusArea.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onServerTick(data) {
|
||||||
|
var milliseconds = Math.floor((parseFloat(data.seconds_left) + 0.5) * 1000);
|
||||||
|
var displayTime = milliSecondsToHMS(milliseconds);
|
||||||
|
timeLeftDisplay.html(displayTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onServerTimerExpired() {
|
||||||
|
running = false;
|
||||||
|
timeLeftDisplay.html('Ended');
|
||||||
|
dropdown.val('Off');
|
||||||
|
dropdown.trigger('change');
|
||||||
|
}
|
||||||
|
|
||||||
|
function onServerCancel() {
|
||||||
|
running = false;
|
||||||
|
resetDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
// OK, let's go
|
||||||
|
$(document).ready(init);
|
||||||
|
|
||||||
|
}
|
||||||
|
)();
|
||||||
Loading…
Reference in New Issue
Block a user