From 15e2b32c84977b910e5d755ac35971f377b96ed7 Mon Sep 17 00:00:00 2001 From: Faeb35 Date: Sun, 21 Jun 2020 19:45:57 +0200 Subject: [PATCH] Handling removal of songs only on the client side to prevent sideeffects --- .../src/main/webapp/WEB-INF/jsp/playQueue.jsp | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) 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;