diff --git a/airsonic-main/src/main/webapp/WEB-INF/jsp/playQueue.jsp b/airsonic-main/src/main/webapp/WEB-INF/jsp/playQueue.jsp index 63f61f7c3..859e8c445 100644 --- a/airsonic-main/src/main/webapp/WEB-INF/jsp/playQueue.jsp +++ b/airsonic-main/src/main/webapp/WEB-INF/jsp/playQueue.jsp @@ -62,6 +62,9 @@ // Initialize the Cast player (ChromeCast support) var CastPlayer = new CastPlayer(); + // silent and empty sound, set when audio media player is stopped + const silentSound = 'data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA'; + function init() { initAutoHide(); @@ -253,6 +256,7 @@ ok = confirm(""); if (ok) { + onStopMediaElementPlayer(); playQueueService.clear(playQueueCallback); } } @@ -288,6 +292,29 @@ } } + /** + * Stop HTML audio player and set silet audio as src attribute + */ + function onStopMediaElementPlayer() { + var mediaElementPlayer = getMediaElementPlayer(); + if (mediaElementPlayer) { + mediaElementPlayer.pause(); + mediaElementPlayer.currentTime = 0; + setTimeout(function() { + mediaElementPlayer.src = silentSound; + playQueueService.stop(playQueueCallback); + }, 100); + + } + } + + function isMediaElementPlayerStopped() { + var mediaElementPlayer = getMediaElementPlayer(); + if (mediaElementPlayer) { + return mediaElementPlayer.src == silentSound; + } + } + /** * Toggle play/pause * @@ -427,6 +454,9 @@ onStar(getCurrentSongIndex()); } function onRemove(index) { + if (index == getCurrentSongIndex()) { + onStopMediaElementPlayer(); + } playQueueService.remove(index, playQueueCallback); } function onRemoveSelected() { @@ -436,6 +466,9 @@ var index = i + 1; if ($("#songIndex" + index).is(":checked")) { indexes[counter++] = i; + if (i == getCurrentSongIndex()) { + onStopMediaElementPlayer(); + } } } playQueueService.removeMany(indexes, playQueueCallback); @@ -509,7 +542,11 @@ function playQueueCallback(playQueue) { songs = playQueue.entries; - currentSongIndex = playQueue.index; + if (isMediaElementPlayerStopped()) { + currentSongIndex = -1; + } else { + currentSongIndex = playQueue.index; + } repeatEnabled = playQueue.repeatEnabled; shuffleRadioEnabled = playQueue.shuffleRadioEnabled; internetRadioEnabled = playQueue.internetRadioEnabled;