Compare commits
12 Commits
c833a94c3f
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f437a546d2 | ||
|
|
15520fdff8 | ||
|
|
3093e88ffb | ||
|
|
e4ba5130fa | ||
|
|
de57f1c20b | ||
|
|
a5e98bdd93 | ||
|
|
ed5c0ab696 | ||
|
|
ffcbd21eb6 | ||
|
|
4ddd83ba4d | ||
|
|
b08a93718e | ||
|
|
eecb81d59a | ||
|
|
664eecf779 |
@@ -606,10 +606,10 @@
|
||||
enable counter style directly.</div>
|
||||
</div>
|
||||
<div class="inputContainer">
|
||||
<label class="inputLabel inputLabelUnfocused" for="MaxPlotLength">Max Plot
|
||||
Length</label>
|
||||
<label class="inputLabel inputLabelUnfocused" for="MaxPlotLength">Max Plot Length</label>
|
||||
<input is="emby-input" type="number" id="MaxPlotLength" name="MaxPlotLength" />
|
||||
<div class="fieldDescription">Maximum characters for the plot summary.</div>
|
||||
<div class="fieldDescription">Maximum characters for the plot summary. Limited to max 2 lines
|
||||
(or 3 if 'Constrain Plot Width' is enabled).</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<!-- <TreatWarningsAsErrors>false</TreatWarningsAsErrors> -->
|
||||
<Title>Jellyfin Media Bar Enhanced Plugin</Title>
|
||||
<Authors>CodeDevMLH</Authors>
|
||||
<Version>1.8.1.4</Version>
|
||||
<Version>1.9.0.0</Version>
|
||||
<RepositoryUrl>https://github.com/CodeDevMLH/jellyfin-plugin-media-bar-enhanced</RepositoryUrl>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
@@ -112,6 +112,7 @@ const STATE = {
|
||||
customTrailerUrls: {},
|
||||
ytPromise: null,
|
||||
autoplayTimeouts: [],
|
||||
playSignals: {},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -398,6 +399,7 @@ const resetSlideshowState = () => {
|
||||
STATE.slideshow.customTrailerUrls = {};
|
||||
STATE.slideshow.totalItems = 0;
|
||||
STATE.slideshow.isLoading = false;
|
||||
STATE.slideshow.playSignals = {};
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1804,7 +1806,7 @@ const SlideCreator = {
|
||||
// Create an iframe upfront
|
||||
const ytPlayerIframe = SlideUtils.createElement("iframe", {
|
||||
id: `youtube-player-${itemId}`,
|
||||
src: `https://www.youtube-nocookie.com/embed/${videoId}?enablejsapi=1&origin=${encodeURIComponent(window.location.origin)}`,
|
||||
src: `https://www.youtube-nocookie.com/embed/${videoId}?enablejsapi=1&autoplay=0&controls=0&playsinline=1&mute=${STATE.slideshow.isMuted ? 1 : 0}&origin=${encodeURIComponent(window.location.origin)}`,
|
||||
style: "width: 100%; height: 100%; border: none;",
|
||||
allow: "autoplay; encrypted-media",
|
||||
referrerpolicy: "strict-origin-when-cross-origin",
|
||||
@@ -1879,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)
|
||||
@@ -1916,8 +1918,14 @@ const SlideCreator = {
|
||||
}
|
||||
},
|
||||
'onStateChange': (event) => {
|
||||
// Fade in when playing
|
||||
if (event.data === YT.PlayerState.PLAYING) {
|
||||
const slide = document.querySelector(`.slide[data-item-id="${itemId}"]`);
|
||||
if (slide && STATE.slideshow.playSignals[itemId] === false) {
|
||||
event.target.pauseVideo();
|
||||
return;
|
||||
}
|
||||
|
||||
// Fade in when legitimately playing
|
||||
if (event.target._wrapperDiv) {
|
||||
event.target._wrapperDiv.style.opacity = "1";
|
||||
}
|
||||
@@ -1972,6 +1980,11 @@ const SlideCreator = {
|
||||
return;
|
||||
}
|
||||
|
||||
if (STATE.slideshow.playSignals[itemId] === false) {
|
||||
event.target.pause();
|
||||
return;
|
||||
}
|
||||
|
||||
// Fade in
|
||||
event.target.style.opacity = "1";
|
||||
|
||||
@@ -2481,6 +2494,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
|
||||
@@ -2581,6 +2595,8 @@ 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 => {
|
||||
|
||||
@@ -42,6 +42,10 @@ Bevor du baust, musst du die Versionsnummer in den folgenden Dateien aktualisier
|
||||
|
||||
Führe den folgenden Befehl im Terminal (PowerShell) im Hauptverzeichnis aus. Wir nutzen hier `dotnet build` statt `publish`, um unnötige Dateien zu vermeiden.
|
||||
|
||||
```powershell
|
||||
dotnet build Jellyfin.Plugin.MediaBarEnhanced/Jellyfin.Plugin.MediaBarEnhanced.csproj --configuration Release --output bin/Publish;
|
||||
```
|
||||
|
||||
```powershell
|
||||
dotnet build Jellyfin.Plugin.MediaBarEnhanced/Jellyfin.Plugin.MediaBarEnhanced.csproj --configuration Release --output bin/Publish; Compress-Archive -Path bin/Publish/* -DestinationPath bin/Publish/Jellyfin.Plugin.MediaBarEnhanced.zip -Force; $hash = (Get-FileHash -Algorithm MD5 bin/Publish/Jellyfin.Plugin.MediaBarEnhanced.zip).Hash.ToLower(); $time = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"); Write-Output "`n----------------------------------------"; Write-Output "NEUE CHECKSUMME (MD5): $hash"; Write-Output "ZEITSTEMPEL: $time"; Write-Output "----------------------------------------`n"
|
||||
```
|
||||
|
||||
@@ -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.4",
|
||||
"version": "1.9.0.0",
|
||||
"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.4/Jellyfin.Plugin.MediaBarEnhanced.zip",
|
||||
"checksum": "5caa751c6979b6d0da221bae6989a174",
|
||||
"timestamp": "2026-03-23T23:18:10Z"
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/jellyfin-plugin-media-bar-enhanced/releases/download/v1.9.0.0/Jellyfin.Plugin.MediaBarEnhanced.zip",
|
||||
"checksum": "de2c736f754788eeb881aaa4fafa692f",
|
||||
"timestamp": "2026-03-24T01:27:06Z"
|
||||
},
|
||||
{
|
||||
"version": "1.8.0.0",
|
||||
|
||||
Reference in New Issue
Block a user