Compare commits
7 Commits
23a73543c9
...
v1.8.1.5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ddd83ba4d | ||
|
|
b08a93718e | ||
|
|
eecb81d59a | ||
|
|
664eecf779 | ||
|
|
c833a94c3f | ||
|
|
b1c39b4b38 | ||
|
|
5e398d06a8 |
@@ -12,7 +12,7 @@
|
||||
<!-- <TreatWarningsAsErrors>false</TreatWarningsAsErrors> -->
|
||||
<Title>Jellyfin Media Bar Enhanced Plugin</Title>
|
||||
<Authors>CodeDevMLH</Authors>
|
||||
<Version>1.8.1.3</Version>
|
||||
<Version>1.8.1.5</Version>
|
||||
<RepositoryUrl>https://github.com/CodeDevMLH/jellyfin-plugin-media-bar-enhanced</RepositoryUrl>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Jellyfin Slideshow by M0RPH3US v4.0.1
|
||||
* Modified by CodeDevMLH
|
||||
*
|
||||
@@ -67,6 +67,8 @@ const CONFIG = {
|
||||
customOverlayPositionX: 0,
|
||||
customOverlayPositionY: 0,
|
||||
customOverlayScale: 100,
|
||||
backdropVideoDelay: 0,
|
||||
constrainPlotWidth: false,
|
||||
enableCustomMediaIds: true,
|
||||
enableSeasonalContent: false,
|
||||
customMediaIds: "",
|
||||
@@ -110,6 +112,7 @@ const STATE = {
|
||||
customTrailerUrls: {},
|
||||
ytPromise: null,
|
||||
autoplayTimeouts: [],
|
||||
playSignals: {},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -396,6 +399,7 @@ const resetSlideshowState = () => {
|
||||
STATE.slideshow.customTrailerUrls = {};
|
||||
STATE.slideshow.totalItems = 0;
|
||||
STATE.slideshow.isLoading = false;
|
||||
STATE.slideshow.playSignals = {};
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1877,11 +1881,11 @@ const SlideCreator = {
|
||||
event.target.setPlaybackQuality(quality);
|
||||
}
|
||||
|
||||
// Only play if this is the active slide
|
||||
// Only play if this is the active slide and the play signal has been issued (delay finished)
|
||||
const slide = document.querySelector(`.slide[data-item-id="${itemId}"]`);
|
||||
const isVideoPlayerOpen = document.querySelector('.videoPlayerContainer') || document.querySelector('.youtubePlayerContainer');
|
||||
|
||||
if (slide && slide.classList.contains('active') && !document.hidden && (!isVideoPlayerOpen || isVideoPlayerOpen.classList.contains('hide'))) {
|
||||
if (slide && slide.classList.contains('active') && STATE.slideshow.playSignals[itemId] === true && !document.hidden && (!isVideoPlayerOpen || isVideoPlayerOpen.classList.contains('hide'))) {
|
||||
event.target.playVideo();
|
||||
|
||||
// Check if it actually started playing after a short delay (handling autoplay blocks)
|
||||
@@ -2479,6 +2483,7 @@ const SlideshowManager = {
|
||||
|
||||
void currentSlide.offsetWidth;
|
||||
currentSlide.classList.add("active");
|
||||
STATE.slideshow.playSignals[currentItemId] = false;
|
||||
|
||||
// Manage Video Playback: Stop others, Play current
|
||||
// 1. Stop all other YouTube players and local video elements, release connections
|
||||
@@ -2579,34 +2584,42 @@ const SlideshowManager = {
|
||||
// play logic
|
||||
const playVideoLogic = () => {
|
||||
if (!currentSlide.classList.contains('active')) return;
|
||||
|
||||
STATE.slideshow.playSignals[currentItemId] = true;
|
||||
|
||||
if (videoBackdrop.tagName === 'VIDEO') {
|
||||
videoBackdrop.play().catch(e => {
|
||||
// Check if it actually started playing after a short delay (handling autoplay blocks)
|
||||
setTimeout(() => {
|
||||
if (videoBackdrop.paused && currentSlide.classList.contains('active')) {
|
||||
console.warn("🎬 Media Bar:", `Autoplay blocked for ${currentItemId}, attempting muted fallback`);
|
||||
videoBackdrop.muted = true;
|
||||
videoBackdrop.play().catch(err => console.error("🎬 Media Bar:", "Muted fallback failed", err));
|
||||
}
|
||||
}, 1000);
|
||||
if (!STATE.slideshow.isMuted) {
|
||||
// Check if it actually started playing after a short delay (handling autoplay blocks)
|
||||
setTimeout(() => {
|
||||
if (videoBackdrop.paused && currentSlide.classList.contains('active')) {
|
||||
console.warn("🎬 Media Bar:", `Autoplay blocked for ${currentItemId}, attempting muted fallback`);
|
||||
videoBackdrop.muted = true;
|
||||
videoBackdrop.play().catch(err => console.error("🎬 Media Bar:", "Muted fallback failed", err));
|
||||
}
|
||||
}, 1000);
|
||||
} else {
|
||||
console.error("🎬 Media Bar:", "Playback failed despite being muted", e);
|
||||
}
|
||||
});
|
||||
} else if (STATE.slideshow.videoPlayers && STATE.slideshow.videoPlayers[currentItemId]) {
|
||||
const player = STATE.slideshow.videoPlayers[currentItemId];
|
||||
if (player && typeof player.playVideo === 'function') {
|
||||
player.playVideo();
|
||||
|
||||
// Check if playback successfully started, otherwise fallback to muted
|
||||
setTimeout(() => {
|
||||
if (!currentSlide.classList.contains('active')) return;
|
||||
if (player.getPlayerState &&
|
||||
player.getPlayerState() !== YT.PlayerState.PLAYING &&
|
||||
player.getPlayerState() !== YT.PlayerState.BUFFERING) {
|
||||
console.log("🎬 Media Bar:", "YouTube didn't start playback, retrying muted...");
|
||||
player.mute();
|
||||
player.playVideo();
|
||||
}
|
||||
}, 1000);
|
||||
if (!STATE.slideshow.isMuted) {
|
||||
// Check if playback successfully started, otherwise fallback to muted
|
||||
setTimeout(() => {
|
||||
if (!currentSlide.classList.contains('active')) return;
|
||||
if (player.getPlayerState &&
|
||||
player.getPlayerState() !== YT.PlayerState.PLAYING &&
|
||||
player.getPlayerState() !== YT.PlayerState.BUFFERING) {
|
||||
console.log("🎬 Media Bar:", "YouTube didn't start playback, retrying muted...");
|
||||
player.mute();
|
||||
player.playVideo();
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
"imageUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/jellyfin-plugin-media-bar-enhanced/raw/branch/main/logo.png",
|
||||
"versions": [
|
||||
{
|
||||
"version": "1.8.1.3",
|
||||
"version": "1.8.1.5",
|
||||
"changelog": "- fix pagination dot issue on mobile when showing more than 10 dots (should now dynamically adjust the max dots threshold based on screen size)\n- add option to delay trailer playback\n- add option to limit the plot width",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/jellyfin-plugin-media-bar-enhanced/releases/download/v1.8.1.3/Jellyfin.Plugin.MediaBarEnhanced.zip",
|
||||
"checksum": "9be63bf948fc4a41d643afbed301dd8a",
|
||||
"timestamp": "2026-03-23T22:47:55Z"
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/jellyfin-plugin-media-bar-enhanced/releases/download/v1.8.1.5/Jellyfin.Plugin.MediaBarEnhanced.zip",
|
||||
"checksum": "c619ba23098a62cacf30351573cf4a3f",
|
||||
"timestamp": "2026-03-23T23:44:23Z"
|
||||
},
|
||||
{
|
||||
"version": "1.8.0.0",
|
||||
|
||||
Reference in New Issue
Block a user