ympd/htdocs/player.html

169 lines
5.5 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0">-->
<meta name="viewport" content="width=320" />
<meta
name="description"
content="ympd - fast and lightweight MPD webclient"
/>
<meta name="author" content="andy@ndyk.de" />
<title>ympd player</title>
<!-- Bootstrap core CSS -->
<link href="css/bootstrap.css" rel="stylesheet" />
<link href="css/bootstrap-theme.css" rel="stylesheet" />
<!-- Custom styles for this template -->
<link href="css/mpd.css" rel="stylesheet" />
<link
href="assets/favicon.ico"
rel="shortcut icon"
type="image/vnd.microsoft.icon"
/>
<script src="js/jquery-1.10.2.min.js"></script>
<script src="js/jquery.cookie.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/bootstrap-notify.js"></script>
<script type="text/javascript">
function clickLocalPlay() {
var player = document.getElementById('player');
$('#localplay-icon')
.removeClass('glyphicon-play')
.removeClass('glyphicon-pause');
if (player.paused) {
var mpdstream = $.cookie('mpdstream');
player.src = mpdstream;
console.log('playing mpd stream: ' + player.src);
player.load();
player.play();
$('#localplay-icon').addClass('glyphicon-pause');
} else {
player.pause();
player.src = '';
player.removeAttribute('src');
$('#localplay-icon').addClass('glyphicon-play');
}
}
$(document).ready(function () {
document
.getElementById('player')
.addEventListener('stalled', function () {
if (!document.getElementById('player').paused) {
this.pause();
clickLocalPlay();
$('.top-right')
.notify({
message: {
text: 'music stream stalled - trying to recover...',
},
type: 'danger',
fadeOut: { enabled: true, delay: 1000 },
})
.show();
}
});
document
.getElementById('player')
.addEventListener('pause', function () {
this.src = '';
this.removeAttribute('src');
$('#localplay-icon')
.removeClass('glyphicon-pause')
.addClass('glyphicon-play');
});
document.getElementById('player').addEventListener(
'error',
function failed(e) {
this.pause();
switch (e.target.error.code) {
case e.target.error.MEDIA_ERR_ABORTED:
$('.top-right')
.notify({
message: { text: 'Audio playback aborted by user.' },
type: 'info',
fadeOut: { enabled: true, delay: 1000 },
})
.show();
break;
case e.target.error.MEDIA_ERR_NETWORK:
$('.top-right')
.notify({
message: { text: 'Network error while playing audio.' },
type: 'danger',
fadeOut: { enabled: true, delay: 1000 },
})
.show();
break;
case e.target.error.MEDIA_ERR_DECODE:
$('.top-right')
.notify({
message: {
text: 'Audio playback aborted. Did you unplug your headphones?',
},
type: 'danger',
fadeOut: { enabled: true, delay: 1000 },
})
.show();
break;
case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
$('.top-right')
.notify({
message: {
text: 'Error while loading audio (server, network or format error).',
},
type: 'danger',
fadeOut: { enabled: true, delay: 1000 },
})
.show();
break;
default:
$('.top-right')
.notify({
message: { text: 'Unknown error while playing audio.' },
type: 'danger',
fadeOut: { enabled: true, delay: 1000 },
})
.show();
break;
}
},
true
);
});
</script>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<a class="navbar-brand" href="/" target="_blank"
><span class="glyphicon glyphicon-play-circle"></span> ympd</a
>
</div>
</div>
<div class="container starter-template">
<div class="row">
<div class="col-md-10 col-xs-12">
<audio id="player" preload="none"></audio>
<button
type="button"
class="btn btn-default btn-lg center-block"
onclick="clickLocalPlay()"
>
<span id="localplay-icon" class="glyphicon glyphicon-play"></span>
</button>
<div class="notifications top-right"></div>
</div>
</div>
</div>
</body>
</html>