1
0
Fork 0
mirror of https://gitlab.com/futo-org/fcast.git synced 2025-08-15 11:52:49 +00:00

Receivers: Fix viewer playlist media detection race condition

This commit is contained in:
Michael Hollister 2025-07-21 16:37:37 -05:00
parent 64354001c5
commit a2429a29ce

View file

@ -32,7 +32,7 @@ let cachedPlaylist: PlaylistContent = null;
let cachedPlayMediaItem: MediaItem = null; let cachedPlayMediaItem: MediaItem = null;
let playlistIndex = 0; let playlistIndex = 0;
let isMediaItem = false; let isMediaItem = false;
let playItemCached = false; let isPlaylistPlayRequest = 0;
let imageViewerPlaybackState: PlaybackState = PlaybackState.Idle; let imageViewerPlaybackState: PlaybackState = PlaybackState.Idle;
let uiHideTimer = new Timer(() => { playerCtrlStateUpdate(PlayerControlEvent.UiFadeOut); }, 3000); let uiHideTimer = new Timer(() => { playerCtrlStateUpdate(PlayerControlEvent.UiFadeOut); }, 3000);
@ -59,16 +59,14 @@ let showDurationTimer = new Timer(() => {
}, 0, false); }, 0, false);
function onPlay(_event, value: PlayMessage) { function onPlay(_event, value: PlayMessage) {
if (!playItemCached) { if (isPlaylistPlayRequest === 0) {
cachedPlayMediaItem = mediaItemFromPlayMessage(value); cachedPlayMediaItem = mediaItemFromPlayMessage(value);
isMediaItem = false; isMediaItem = false;
} }
window.targetAPI.sendEvent(new EventMessage(Date.now(), new MediaItemEvent(EventType.MediaItemChange, cachedPlayMediaItem))); window.targetAPI.sendEvent(new EventMessage(Date.now(), new MediaItemEvent(EventType.MediaItemChange, cachedPlayMediaItem)));
logger.info('Media playback changed:', cachedPlayMediaItem); logger.info('Media playback changed:', cachedPlayMediaItem);
playItemCached = false; isPlaylistPlayRequest = isPlaylistPlayRequest <= 0 ? 0 : isPlaylistPlayRequest - 1;
showDurationTimer.stop(); showDurationTimer.stop();
window.targetAPI.sendEvent(new EventMessage(Date.now(), new MediaItemEvent(EventType.MediaItemChange, cachedPlayMediaItem)));
const src = value.url ? value.url : value.content; const src = value.url ? value.url : value.content;
loadingTimer.start(); loadingTimer.start();
@ -143,7 +141,7 @@ function onPlayPlaylist(_event, value: PlaylistContent) {
playlistIndex = offset; playlistIndex = offset;
isMediaItem = true; isMediaItem = true;
cachedPlayMediaItem = value.items[offset]; cachedPlayMediaItem = value.items[offset];
playItemCached = true; isPlaylistPlayRequest++;
window.targetAPI.sendPlayRequest(playMessage, playlistIndex); window.targetAPI.sendPlayRequest(playMessage, playlistIndex);
} }
@ -162,7 +160,7 @@ function setPlaylistItem(index: number) {
logger.info(`Setting playlist item to index ${index}`); logger.info(`Setting playlist item to index ${index}`);
playlistIndex = index; playlistIndex = index;
cachedPlayMediaItem = cachedPlaylist.items[playlistIndex]; cachedPlayMediaItem = cachedPlaylist.items[playlistIndex];
playItemCached = true; isPlaylistPlayRequest++;
window.targetAPI.sendPlayRequest(playMessageFromMediaItem(cachedPlaylist.items[playlistIndex]), playlistIndex); window.targetAPI.sendPlayRequest(playMessageFromMediaItem(cachedPlaylist.items[playlistIndex]), playlistIndex);
showDurationTimer.stop(); showDurationTimer.stop();
} }