Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12f6f23314 | ||
|
|
a27488366b | ||
|
|
dd4c71c3bf | ||
|
|
715cd1a663 | ||
|
|
9371ed9a33 | ||
|
|
c21b2d3ede | ||
|
|
8ac0b9c003 | ||
|
|
0a0080c889 | ||
|
|
b2dd3e4d21 | ||
|
|
e4dac0d85c | ||
|
|
52bc8022fc | ||
|
|
fb4416f4b3 | ||
|
|
a67c4ecbe7 | ||
|
|
972c914dab | ||
|
|
60825b7e2f | ||
|
|
5d23594e08 | ||
|
|
2cccb139bf | ||
|
|
f37b946c0c | ||
|
|
51c3eec58a | ||
|
|
236def9fed | ||
|
|
f864b1105e | ||
|
|
353db1eab1 | ||
|
|
7abaca731d | ||
|
|
56a8d82f2a | ||
|
|
eec8f23968 |
@@ -40,6 +40,11 @@ jobs:
|
||||
|
||||
echo "Detected Version: $VERSION"
|
||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
||||
echo "TARGET_ABI=$TARGET_ABI" >> $GITHUB_ENV
|
||||
|
||||
# Also export GUID for later use
|
||||
PLUGIN_GUID=$(jq -r '.[0].guid' manifest.json)
|
||||
echo "PLUGIN_GUID=$PLUGIN_GUID" >> $GITHUB_ENV
|
||||
|
||||
# Escape newlines in changelog for GITHUB_ENV
|
||||
echo "CHANGELOG<<EOF" >> $GITHUB_ENV
|
||||
@@ -71,7 +76,7 @@ jobs:
|
||||
REPO_OWNER="${{ github.repository_owner }}"
|
||||
REPO_NAME="${{ github.event.repository.name }}"
|
||||
VERSION="${{ env.VERSION }}"
|
||||
DOWNLOAD_URL="https://git.mahom03-spacecloud.de/${{ github.repository }}/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip"
|
||||
DOWNLOAD_URL="https://git.mahom03-spacecloud.de/$REPO_OWNER/$REPO_NAME/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip"
|
||||
|
||||
echo "Updating manifest.json with:"
|
||||
echo "Hash: ${{ env.ZIP_HASH }}"
|
||||
@@ -101,3 +106,153 @@ jobs:
|
||||
tag_name: "v${{ env.VERSION }}"
|
||||
draft: false
|
||||
prerelease: false
|
||||
|
||||
# Update Message in Remote Repository
|
||||
- name: Checkout Central Manifest Repo
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/jellyfin-plugin-manifest
|
||||
path: central-manifest
|
||||
token: ${{ secrets.JELLYFIN_PLUGIN_MANIFEST_UPDATER_PAT }}
|
||||
|
||||
- name: Update Central Manifest
|
||||
shell: bash
|
||||
run: |
|
||||
cd central-manifest
|
||||
|
||||
# 1. Get info from previous steps
|
||||
VERSION="${{ env.VERSION }}"
|
||||
HASH="${{ env.ZIP_HASH }}"
|
||||
TIME="${{ env.BUILD_TIME }}"
|
||||
DOWNLOAD_URL="https://git.mahom03-spacecloud.de/${{ github.repository }}/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip"
|
||||
|
||||
# 2. Get info from env
|
||||
PLUGIN_GUID="${{ env.PLUGIN_GUID }}"
|
||||
CHANGELOG="${{ env.CHANGELOG }}"
|
||||
TARGET_ABI="${{ env.TARGET_ABI }}"
|
||||
|
||||
echo "Updating Central Manifest for Plugin GUID: $PLUGIN_GUID"
|
||||
|
||||
# 3. Update/Prepend entry in central manifest.json
|
||||
# Logic:
|
||||
# - If array is empty or new version != old version: PREPEND new entry
|
||||
# - If new version == old version: OVERWRITE (update) existing entry (re-release)
|
||||
|
||||
jq --arg guid "$PLUGIN_GUID" \
|
||||
--arg hash "$HASH" \
|
||||
--arg time "$TIME" \
|
||||
--arg url "$DOWNLOAD_URL" \
|
||||
--arg ver "$VERSION" \
|
||||
--arg changelog "$CHANGELOG" \
|
||||
--arg abi "$TARGET_ABI" \
|
||||
'map(if .guid == $guid then
|
||||
if .versions[0].version != $ver then
|
||||
# New Version -> Prepend
|
||||
.versions = [{
|
||||
"version": $ver,
|
||||
"changelog": $changelog,
|
||||
"targetAbi": $abi,
|
||||
"sourceUrl": $url,
|
||||
"checksum": $hash,
|
||||
"timestamp": $time
|
||||
}] + .versions
|
||||
else
|
||||
# Same Version -> Update existing (overwrite top)
|
||||
.versions[0].changelog = $changelog |
|
||||
.versions[0].targetAbi = $abi |
|
||||
.versions[0].sourceUrl = $url |
|
||||
.versions[0].checksum = $hash |
|
||||
.versions[0].timestamp = $time
|
||||
end
|
||||
else . end)' \
|
||||
manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
||||
|
||||
- name: Commit and Push Central Manifest
|
||||
run: |
|
||||
cd central-manifest
|
||||
git config user.name "CodeDevMLH"
|
||||
git config user.email "145071728+CodeDevMLH@users.noreply.github.com"
|
||||
|
||||
# Check if there are changes
|
||||
if [[ -n $(git status -s) ]]; then
|
||||
git add manifest.json
|
||||
git commit -m "Auto-Update MediaBar Enhanced to v${{ env.VERSION }}"
|
||||
git push
|
||||
else
|
||||
echo "No changes to central manifest."
|
||||
fi
|
||||
|
||||
# Update Message in Seasonals Repository
|
||||
- name: Checkout Seasonal Manifest Repo
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/jellyfin-plugin-manifest
|
||||
path: seasonal-manifest
|
||||
token: ${{ secrets.JELLYFIN_PLUGIN_MANIFEST_UPDATER_PAT }}
|
||||
|
||||
- name: Update Central Manifest
|
||||
shell: bash
|
||||
run: |
|
||||
cd seasonal-manifest
|
||||
|
||||
# 1. Get info from previous steps
|
||||
VERSION="${{ env.VERSION }}"
|
||||
HASH="${{ env.ZIP_HASH }}"
|
||||
TIME="${{ env.BUILD_TIME }}"
|
||||
DOWNLOAD_URL="https://git.mahom03-spacecloud.de/${{ github.repository }}/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip"
|
||||
|
||||
# 2. Get info from env
|
||||
PLUGIN_GUID="${{ env.PLUGIN_GUID }}"
|
||||
CHANGELOG="${{ env.CHANGELOG }}"
|
||||
TARGET_ABI="${{ env.TARGET_ABI }}"
|
||||
|
||||
echo "Updating Seasonal Manifest for Plugin GUID: $PLUGIN_GUID"
|
||||
|
||||
# 3. Update/Prepend entry in seasonal manifest.json
|
||||
# Logic:
|
||||
# - If array is empty or new version != old version: PREPEND new entry
|
||||
# - If new version == old version: OVERWRITE (update) existing entry (re-release)
|
||||
|
||||
jq --arg guid "$PLUGIN_GUID" \
|
||||
--arg hash "$HASH" \
|
||||
--arg time "$TIME" \
|
||||
--arg url "$DOWNLOAD_URL" \
|
||||
--arg ver "$VERSION" \
|
||||
--arg changelog "$CHANGELOG" \
|
||||
--arg abi "$TARGET_ABI" \
|
||||
'map(if .guid == $guid then
|
||||
if .versions[0].version != $ver then
|
||||
# New Version -> Prepend
|
||||
.versions = [{
|
||||
"version": $ver,
|
||||
"changelog": $changelog,
|
||||
"targetAbi": $abi,
|
||||
"sourceUrl": $url,
|
||||
"checksum": $hash,
|
||||
"timestamp": $time
|
||||
}] + .versions
|
||||
else
|
||||
# Same Version -> Update existing (overwrite top)
|
||||
.versions[0].changelog = $changelog |
|
||||
.versions[0].targetAbi = $abi |
|
||||
.versions[0].sourceUrl = $url |
|
||||
.versions[0].checksum = $hash |
|
||||
.versions[0].timestamp = $time
|
||||
end
|
||||
else . end)' \
|
||||
manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
||||
|
||||
- name: Commit and Push Seasonal Manifest
|
||||
run: |
|
||||
cd seasonal-manifest
|
||||
git config user.name "CodeDevMLH"
|
||||
git config user.email "145071728+CodeDevMLH@users.noreply.github.com"
|
||||
|
||||
# Check if there are changes
|
||||
if [[ -n $(git status -s) ]]; then
|
||||
git add manifest.json
|
||||
git commit -m "Auto-Update MediaBar Enhanced to v${{ env.VERSION }}"
|
||||
git push
|
||||
else
|
||||
echo "No changes to seasonal manifest."
|
||||
fi
|
||||
155
.github/workflows/release_automation.yml
vendored
155
.github/workflows/release_automation.yml
vendored
@@ -39,6 +39,11 @@ jobs:
|
||||
|
||||
echo "Detected Version: $VERSION"
|
||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
||||
echo "TARGET_ABI=$TARGET_ABI" >> $GITHUB_ENV
|
||||
|
||||
# Also export GUID for later use
|
||||
PLUGIN_GUID=$(jq -r '.[0].guid' manifest.json)
|
||||
echo "PLUGIN_GUID=$PLUGIN_GUID" >> $GITHUB_ENV
|
||||
|
||||
# Escape newlines in changelog for GITHUB_ENV
|
||||
echo "CHANGELOG<<EOF" >> $GITHUB_ENV
|
||||
@@ -99,3 +104,153 @@ jobs:
|
||||
draft: false
|
||||
prerelease: false
|
||||
generate_release_notes: true
|
||||
|
||||
# Update Message in Remote Repository
|
||||
- name: Checkout Central Manifest Repo
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/jellyfin-plugin-manifest
|
||||
path: central-manifest
|
||||
token: ${{ secrets.JELLYFIN_PLUGIN_MANIFEST_UPDATER_PAT }}
|
||||
|
||||
- name: Update Central Manifest
|
||||
shell: bash
|
||||
run: |
|
||||
cd central-manifest
|
||||
|
||||
# 1. Get info from previous steps
|
||||
VERSION="${{ env.VERSION }}"
|
||||
HASH="${{ env.ZIP_HASH }}"
|
||||
TIME="${{ env.BUILD_TIME }}"
|
||||
DOWNLOAD_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip"
|
||||
|
||||
# 2. Get info from env
|
||||
PLUGIN_GUID="${{ env.PLUGIN_GUID }}"
|
||||
CHANGELOG="${{ env.CHANGELOG }}"
|
||||
TARGET_ABI="${{ env.TARGET_ABI }}"
|
||||
|
||||
echo "Updating Central Manifest for Plugin GUID: $PLUGIN_GUID"
|
||||
|
||||
# 3. Update/Prepend entry in central manifest.json
|
||||
# Logic:
|
||||
# - If array is empty or new version != old version: PREPEND new entry
|
||||
# - If new version == old version: OVERWRITE (update) existing entry (re-release)
|
||||
|
||||
jq --arg guid "$PLUGIN_GUID" \
|
||||
--arg hash "$HASH" \
|
||||
--arg time "$TIME" \
|
||||
--arg url "$DOWNLOAD_URL" \
|
||||
--arg ver "$VERSION" \
|
||||
--arg changelog "$CHANGELOG" \
|
||||
--arg abi "$TARGET_ABI" \
|
||||
'map(if .guid == $guid then
|
||||
if .versions[0].version != $ver then
|
||||
# New Version -> Prepend
|
||||
.versions = [{
|
||||
"version": $ver,
|
||||
"changelog": $changelog,
|
||||
"targetAbi": $abi,
|
||||
"sourceUrl": $url,
|
||||
"checksum": $hash,
|
||||
"timestamp": $time
|
||||
}] + .versions
|
||||
else
|
||||
# Same Version -> Update existing (overwrite top)
|
||||
.versions[0].changelog = $changelog |
|
||||
.versions[0].targetAbi = $abi |
|
||||
.versions[0].sourceUrl = $url |
|
||||
.versions[0].checksum = $hash |
|
||||
.versions[0].timestamp = $time
|
||||
end
|
||||
else . end)' \
|
||||
manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
||||
|
||||
- name: Commit and Push Central Manifest
|
||||
run: |
|
||||
cd central-manifest
|
||||
git config user.name "CodeDevMLH"
|
||||
git config user.email "145071728+CodeDevMLH@users.noreply.github.com"
|
||||
|
||||
# Check if there are changes
|
||||
if [[ -n $(git status -s) ]]; then
|
||||
git add manifest.json
|
||||
git commit -m "Auto-Update MediaBar Enhanced to v${{ env.VERSION }}"
|
||||
git push
|
||||
else
|
||||
echo "No changes to central manifest."
|
||||
fi
|
||||
|
||||
# Update Message in Seasonals Repository
|
||||
- name: Checkout Seasonal Manifest Repo
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/jellyfin-plugin-manifest
|
||||
path: seasonal-manifest
|
||||
token: ${{ secrets.JELLYFIN_PLUGIN_MANIFEST_UPDATER_PAT }}
|
||||
|
||||
- name: Update Central Manifest
|
||||
shell: bash
|
||||
run: |
|
||||
cd seasonal-manifest
|
||||
|
||||
# 1. Get info from previous steps
|
||||
VERSION="${{ env.VERSION }}"
|
||||
HASH="${{ env.ZIP_HASH }}"
|
||||
TIME="${{ env.BUILD_TIME }}"
|
||||
DOWNLOAD_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip"
|
||||
|
||||
# 2. Get info from env
|
||||
PLUGIN_GUID="${{ env.PLUGIN_GUID }}"
|
||||
CHANGELOG="${{ env.CHANGELOG }}"
|
||||
TARGET_ABI="${{ env.TARGET_ABI }}"
|
||||
|
||||
echo "Updating Seasonal Manifest for Plugin GUID: $PLUGIN_GUID"
|
||||
|
||||
# 3. Update/Prepend entry in seasonal manifest.json
|
||||
# Logic:
|
||||
# - If array is empty or new version != old version: PREPEND new entry
|
||||
# - If new version == old version: OVERWRITE (update) existing entry (re-release)
|
||||
|
||||
jq --arg guid "$PLUGIN_GUID" \
|
||||
--arg hash "$HASH" \
|
||||
--arg time "$TIME" \
|
||||
--arg url "$DOWNLOAD_URL" \
|
||||
--arg ver "$VERSION" \
|
||||
--arg changelog "$CHANGELOG" \
|
||||
--arg abi "$TARGET_ABI" \
|
||||
'map(if .guid == $guid then
|
||||
if .versions[0].version != $ver then
|
||||
# New Version -> Prepend
|
||||
.versions = [{
|
||||
"version": $ver,
|
||||
"changelog": $changelog,
|
||||
"targetAbi": $abi,
|
||||
"sourceUrl": $url,
|
||||
"checksum": $hash,
|
||||
"timestamp": $time
|
||||
}] + .versions
|
||||
else
|
||||
# Same Version -> Update existing (overwrite top)
|
||||
.versions[0].changelog = $changelog |
|
||||
.versions[0].targetAbi = $abi |
|
||||
.versions[0].sourceUrl = $url |
|
||||
.versions[0].checksum = $hash |
|
||||
.versions[0].timestamp = $time
|
||||
end
|
||||
else . end)' \
|
||||
manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
||||
|
||||
- name: Commit and Push Seasonal Manifest
|
||||
run: |
|
||||
cd seasonal-manifest
|
||||
git config user.name "CodeDevMLH"
|
||||
git config user.email "145071728+CodeDevMLH@users.noreply.github.com"
|
||||
|
||||
# Check if there are changes
|
||||
if [[ -n $(git status -s) ]]; then
|
||||
git add manifest.json
|
||||
git commit -m "Auto-Update MediaBar Enhanced to v${{ env.VERSION }}"
|
||||
git push
|
||||
else
|
||||
echo "No changes to seasonal manifest."
|
||||
fi
|
||||
@@ -14,7 +14,7 @@
|
||||
<div class="sectionTitleContainer">
|
||||
<h2 class="sectionTitle">Media Bar Enhanced</h2>
|
||||
<a is="emby-linkbutton" class="raised raised-mini emby-button" style="margin-left: 2em;"
|
||||
target="_blank" href="https://github.com/CodeDevMLH/Jellyfin-Seasonals">
|
||||
target="_blank" href="https://github.com/CodeDevMLH/jellyfin-plugin-media-bar-enhanced">
|
||||
<i class="md-icon button-icon button-icon-left secondaryText"></i>
|
||||
<span>Help</span>
|
||||
</a>
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
<!-- <TreatWarningsAsErrors>false</TreatWarningsAsErrors> -->
|
||||
<Title>Jellyfin Media Bar Enhanced Plugin</Title>
|
||||
<Authors>CodeDevMLH</Authors>
|
||||
<Version>1.5.0.0</Version>
|
||||
<RepositoryUrl>https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin</RepositoryUrl>
|
||||
<Version>1.0.0.2</Version>
|
||||
<RepositoryUrl>https://github.com/CodeDevMLH/jellyfin-plugin-media-bar-enhanced</RepositoryUrl>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -59,7 +59,7 @@ namespace Jellyfin.Plugin.MediaBarEnhanced
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string Name => "Media Bar";
|
||||
public override string Name => "Media Bar Enhanced";
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Guid Id => Guid.Parse("d7e11d57-819b-4bdd-a88d-53c5f5560225");
|
||||
|
||||
196
README.md
196
README.md
@@ -1 +1,195 @@
|
||||
# jellyfin-plugin-media-bar-enhanced
|
||||
# Jellyfin Media Bar Enhanced Plugin
|
||||
|
||||
Media Bar Enhanced is a plugin for Jellyfin that introduces a customizable and interactive media bar to your dashboard view on Jellyfin web.
|
||||
|
||||
This plugin is a fork and enhancement of the original [Media Bar by MakD](https://github.com/MakD/Jellyfin-Media-Bar) media bar, but can be installed as plugin for easier installation and management/configuration.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
- [Jellyfin Media Bar Enhanced Plugin](#jellyfin-media-bar-enhanced-plugin)
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [Features](#features)
|
||||
- [New Features \& Enhancements](#new-features--enhancements)
|
||||
- [Core Features](#core-features)
|
||||
- [Installation](#installation)
|
||||
- [Client Compatibility](#client-compatibility)
|
||||
- [Configuration](#configuration)
|
||||
- [General Settings](#general-settings)
|
||||
- [Custom Content](#custom-content)
|
||||
- [Advanced Settings](#advanced-settings)
|
||||
- [Build The Plugin By Yourself](#build-the-plugin-by-yourself)
|
||||
- [Troubleshooting](#troubleshooting)
|
||||
- [Effects Not Showing](#effects-not-showing)
|
||||
- [Docker Permission Issues](#docker-permission-issues)
|
||||
- [Contributing](#contributing)
|
||||
|
||||
---
|
||||
|
||||
## Features
|
||||
|
||||
This plugin builds upon the original Media Bar with new capabilities and improvements:
|
||||
|
||||
### New Features & Enhancements
|
||||
* **Video Backdrop Support**: Play trailer as background video directly in the slideshow
|
||||
* **SponsorBlock Integration**: Automatically skip intro/outro segments in YouTube trailers
|
||||
* **Enhanced Controls**:
|
||||
* Keyboard shortcuts (Arrow keys to navigate, Space to pause, M to mute)
|
||||
* Option to always show navigation arrows
|
||||
* Standalone "Trailer" button (opens in a modal) if video backdrops are disabled
|
||||
* **Smarter Playback**:
|
||||
* Option to wait for the trailer to end before advancing the slide.
|
||||
* Mute/Unmute controls
|
||||
* **Customization**:
|
||||
* **Custom Media IDs**: Manually specify which items (Movies, Series, Collections/Boxsets) to display. Easily configurable via the plugin settings
|
||||
* **Seasonal Content Mode**: Define date-based lists for holidays and seasons (e.g., Halloween, Christmas)
|
||||
* Pagination dots turn into a counter (e.g., 1/20) if the limit is exceeded
|
||||
* Option to disable the loading screen
|
||||
|
||||
### Core Features
|
||||
* **Immersive Slideshow**: Rotates through your media library
|
||||
* **Metadata Display**: Shows title, rating, year, and plot summary
|
||||
* **Direct Play**: Click "Play" to start watching immediately
|
||||
* **Details View**: Click "Info" to jump to the item's detail page
|
||||
* **Add To Favorites**: Click the heart to add the item to your favorites
|
||||
|
||||
## Installation
|
||||
|
||||
This plugin is based on Jellyfin Version `10.11.x`
|
||||
|
||||
1. Open your **Jellyfin Dashboard**.
|
||||
2. Navigate to **Plugins** > **Repositories**.
|
||||
3. Click the **+** button to add a new repository.
|
||||
4. Enter a name for the repo and paste the following URL:
|
||||
```
|
||||
https://raw.githubusercontent.com/CodeDevMLH/jellyfin-plugin-manifest/refs/heads/main/manifest.json
|
||||
```
|
||||
5. Click **Save**.
|
||||
6. Go to the **Catalog** tab.
|
||||
7. Find **Media Bar Enhanced** (Under **General**) and install it.
|
||||
8. **Restart your Jellyfin server.**
|
||||
9. **Refresh your browser** (Ctrl+F5) to load the new interface elements.
|
||||
|
||||
## Client Compatibility
|
||||
|
||||
Because this plugin relies on injecting JavaScript and CSS into the web interface, it works best on clients that use the web wrapper.
|
||||
|
||||
| Client Platform | Status | Notes |
|
||||
| :--- | :---: | :--- |
|
||||
| **Web Browsers** (Chrome, Firefox, Edge, etc.) | ✅ | Fully supported. |
|
||||
| **Jellyfin Media Player** (Windows/Linux/macOS) | ✅ | Fully supported. |
|
||||
| **Android App** | ✅ | Works (Web wrapper). |
|
||||
| **iOS App** | ✅ | Works (Web wrapper). |
|
||||
| **Android TV / Fire TV** | ❌ | **Not supported** (Native UI). |
|
||||
| **Roku** | ❌ | **Not supported** (Native UI). |
|
||||
| **Swiftfin** | ❌ | **Not supported** (Native UI). |
|
||||
|
||||
## Configuration
|
||||
|
||||
Configure the plugin via **Dashboard** > **Plugins** > **Media Bar Enhanced**.
|
||||
|
||||
> [!NOTE]
|
||||
> You must refresh your browser window (F5 or Ctrl+R) after saving changes for them to take effect.
|
||||
|
||||
### General Settings
|
||||
* **Enable Media Bar Enhanced Plugin**: Master switch to toggle the plugin.
|
||||
* **Enable Video Backdrops**: Dynamically plays trailers in the background.
|
||||
* **Wait For Trailer To End**: Prevents slide transition until the video finishes.
|
||||
* **Enable Mobile Video**: specific setting to allow video playback on mobile devices (disabled by default to save data/battery).
|
||||
* **Show Trailer Button**: Adds a button to open the trailer in a popup modal if video backdrops are disabled (e.g. on mobile if trailers are disabled there)
|
||||
|
||||
### Custom Content
|
||||
Define exactly what shows up in your bar.
|
||||
|
||||
* **Enable Custom Media IDs**: Restrict the slideshow to a specific list of IDs.
|
||||
* **Enable Seasonal Content Mode**: Advanced date-based scheduling.
|
||||
* Format: `DD.MM-DD.MM | Name | ID1, ID2, ID3`
|
||||
* Example: `20.10-31.10 | Halloween | <ID_OF_HALLOWEEN_COLLECTION>`
|
||||
* If the current date matches a range, those IDs are used. Otherwise, it defaults to standard behavior or the Custom Media IDs list.
|
||||
|
||||
**How to get IDs:**
|
||||
Check the URL of an item in the web interface:
|
||||
`.../web/#/details?id=YOUR_ITEM_ID_HERE&...`
|
||||
|
||||
### Advanced Settings
|
||||
* **Slide Animations**: Enable/disable the "Zoom In" effect.
|
||||
* **Use SponsorBlock**: Skips non-content segments in YouTube trailers (if the data exists).
|
||||
* **Start Muted**: Videos start without sound (user can unmute).
|
||||
* **Full Width Video**: Stretches video to cover the entire width (good for desktop, crop on mobile).
|
||||
* **Enable Loading Screen**: Enable/disable the loading indicator while the bar initializes.
|
||||
* **Always Show Arrows**: Keeps navigation arrows visible instead of hiding them on mouse leave.
|
||||
* **Enable Keyboard Controls**:
|
||||
* `Left`/`Right`: Change slide
|
||||
* `Space`: Pause/Play slideshow
|
||||
* `M`: Mute/Unmute video
|
||||
* **Content Limits**: Fine-tune performance by limiting the number of items (Movies, TV Shows) fetched.
|
||||
|
||||
## Build The Plugin By Yourself
|
||||
|
||||
If you want to build the plugin yourself:
|
||||
|
||||
1. Clone the repository.
|
||||
2. Ensure you have the .NET SDK installed (NET 8 or 9 depending on your Jellyfin version).
|
||||
3. Run the build command:
|
||||
```powershell
|
||||
dotnet build Jellyfin.Plugin.MediaBarEnhanced/Jellyfin.Plugin.MediaBarEnhanced.csproj --configuration Release --output bin/Publish
|
||||
```
|
||||
4. The compiled DLL and resources will be in bin/Publish.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Effects Not Showing
|
||||
1. **Verify plugin installation**:
|
||||
- Check that the plugin appears in the jellyfin admin panel
|
||||
- Ensure that the plugin is enabled and active
|
||||
|
||||
2. **Clear browser cache**:
|
||||
- Force refresh browser (Ctrl+F5)
|
||||
- Clear jellyfin web client cache (--> mostly you have to clear the whole browser cache)
|
||||
|
||||
### Docker Permission Issues
|
||||
If you encounter the message `Access was denied when attempting to inject script into index.html. Automatic direct injection failed. Automatic direct insertion failed. The system will now attempt to use the File Transformation plugin.` in the log or similar permission errors in Docker:
|
||||
|
||||
**Option 1: Use File Transformation Plugin (Recommended)**
|
||||
|
||||
Media Bar Enhanced now automatically detects and uses the [File Transformation](https://github.com/IAmParadox27/jellyfin-plugin-file-transformation) plugin (v2.5.0.0+) if it's installed. This eliminates permission issues by transforming content at runtime without modifying files on disk.
|
||||
|
||||
**Installation Steps:**
|
||||
1. Install the File Transformation plugin from the Jellyfin plugin catalog
|
||||
2. Restart Jellyfin
|
||||
3. Media Bar Enhanced will automatically detect and use it (no configuration needed)
|
||||
4. Check logs to confirm: Look for "Successfully registered transformation with File Transformation plugin"
|
||||
|
||||
**Benefits:**
|
||||
- No file permission issues in Docker environments
|
||||
- Works with read-only web directories
|
||||
- Survives Jellyfin updates without re-injection
|
||||
- No manual file modifications required
|
||||
|
||||
**Option 2: Fix File Permissions**
|
||||
```bash
|
||||
# Find the actual index.html location
|
||||
docker exec -it jellyfin find / -name index.html
|
||||
|
||||
# Fix ownership (replace 'jellyfin' with your container name and adjust user:group if needed)
|
||||
docker exec -it --user root jellyfin chown jellyfin:jellyfin /jellyfin/jellyfin-web/index.html
|
||||
|
||||
# Restart container
|
||||
docker restart jellyfin
|
||||
```
|
||||
|
||||
**Option 3: Manual Volume Mapping**
|
||||
```bash
|
||||
# Extract index.html from container
|
||||
docker cp jellyfin:/jellyfin/jellyfin-web/index.html /path/to/jellyfin/config/index.html
|
||||
|
||||
# Add to docker-compose.yml volumes section:
|
||||
volumes:
|
||||
- /path/to/jellyfin/config/index.html:/jellyfin/jellyfin-web/index.html
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
Feel free to contribute to this project by creating pull requests or reporting issues.
|
||||
78
RELEASE_GUIDE.md
Normal file
78
RELEASE_GUIDE.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# Release & Update Guide
|
||||
|
||||
Diese Anleitung beschreibt die Schritte, die notwendig sind, um eine neue Version des **MediaBar** Plugins zu veröffentlichen.
|
||||
|
||||
## 1. Version erhöhen
|
||||
|
||||
Bevor du baust, musst du die Versionsnummer in den folgenden Dateien aktualisieren (z.B. von `1.0.0.0` auf `1.0.1.0`):
|
||||
|
||||
1. **`Jellyfin.Plugin.MediaBar/Jellyfin.Plugin.MediaBar.csproj`**
|
||||
Suche nach `<Version>...</Version>` und ändere die Nummer.
|
||||
|
||||
2. **`manifest.json`**
|
||||
Füge einen neuen Eintrag oben in die `versions`-Liste ein (oder bearbeite den vorhandenen, wenn es noch kein Release gab).
|
||||
* `version`: Deine neue Nummer.
|
||||
* `changelog`: Was hat sich geändert?
|
||||
* `timestamp`: Das aktuelle Datum (wird später aktualisiert).
|
||||
* `checksum`: (wird nach dem Build aktualisiert).
|
||||
|
||||
### Versionierungsschema: Major.Minor.Build.Revision
|
||||
(Beispiel: 1.0.0.0)
|
||||
|
||||
1. **Major** (1.x.x.x)
|
||||
* **Bedeutung:** Hauptversion.
|
||||
* **Erhöhen bei:** Inkompatiblen Änderungen (Breaking Changes) oder komplettem Rewrite.
|
||||
* **Folge:** Setzt alle nachfolgenden Zahlen auf 0.
|
||||
|
||||
2. **Minor** (x.1.x.x)
|
||||
* **Bedeutung:** Nebenversion.
|
||||
* **Erhöhen bei:** Neuen Features / Funktionen, die abwärtskompatibel sind.
|
||||
* **Folge:** Setzt Build und Revision auf 0.
|
||||
|
||||
3. **Build** (x.x.1.x)
|
||||
* **Bedeutung:** Patch / Fehlerbehebung.
|
||||
* **Erhöhen bei:** Bugfixes, Sicherheitsupdates (keine neuen Features).
|
||||
* **Folge:** Setzt Revision auf 0.
|
||||
|
||||
4. **Revision** (x.x.x.1)
|
||||
* **Bedeutung:** Feingranularer Zähler.
|
||||
* **Erhöhen bei:** Notfall-Fixes (Hotfixes), automatisierter Erstellung (CI/CD) oder internen Anpassungen.
|
||||
|
||||
## 2. Plugin bauen und packen
|
||||
|
||||
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.MediaBar/Jellyfin.Plugin.MediaBar.csproj --configuration Release --output bin/Publish; Compress-Archive -Path bin/Publish/* -DestinationPath bin/Publish/Jellyfin.Plugin.MediaBar.zip -Force; $hash = (Get-FileHash -Algorithm MD5 bin/Publish/Jellyfin.Plugin.MediaBar.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"
|
||||
```
|
||||
|
||||
## 3. Manifest aktualisieren
|
||||
|
||||
Nachdem der Befehl durchgelaufen ist, siehst du am Ende eine Ausgabe wie:
|
||||
|
||||
```text
|
||||
----------------------------------------
|
||||
NEUE CHECKSUMME (MD5): ef8654666ffeae9695e660944f644ad3
|
||||
ZEITSTEMPEL: 2025-12-15T12:34:56Z
|
||||
----------------------------------------
|
||||
```
|
||||
|
||||
1. Kopiere die **Checksumme**.
|
||||
2. Öffne `manifest.json`.
|
||||
3. Füge die Checksumme bei deinem Versionseintrag unter `"checksum"` ein.
|
||||
4. Kopiere den **Zeitstempel** und füge ihn unter `"timestamp"` ein.
|
||||
5. Stelle sicher, dass die `sourceUrl` korrekt auf dein Repository zeigt.
|
||||
|
||||
## 4. Veröffentlichen
|
||||
|
||||
1. Lade die Datei `bin/Publish/Jellyfin.Plugin.MediaBar.zip` irgendwo hoch (z.B. GitHub Releases).
|
||||
2. Stelle sicher, dass die `sourceUrl` im `manifest.json` auf diesen Download zeigt (oder auf das Repo, je nachdem wie Jellyfin das handhabt - meistens ist `sourceUrl` der Link zum ZIP).
|
||||
* *Hinweis:* Wenn du das Plugin über ein Repo hostest, muss die URL im Manifest direkt auf die ZIP-Datei zeigen.
|
||||
|
||||
## Zusammenfassung der Dateien
|
||||
|
||||
| Datei | Zweck | Änderung nötig? |
|
||||
| :--- | :--- | :--- |
|
||||
| `Jellyfin.Plugin.MediaBar.csproj` | Definiert die DLL-Version | **Ja** |
|
||||
| `build.yaml` | Build-Konfiguration | **Ja** |
|
||||
| `manifest.json` | Plugin-Liste für Jellyfin | **Ja** (Version, Hash, Zeit) |
|
||||
106
git_cheat_sheet.md
Normal file
106
git_cheat_sheet.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# 🚀 Git Cheat Sheet: Branches, Merge, Rebase & VS Code
|
||||
|
||||
## 🌳 Branches (Zweige)
|
||||
* **`main`** → Stabiler Stand, Production-ready (Deployment).
|
||||
* **`dev`** → Aktive Entwicklung, Sammelbecken für Features.
|
||||
|
||||
---
|
||||
|
||||
## 🛠 Zusammenführen von Änderungen
|
||||
|
||||
### Git Merge
|
||||
Führt zwei Zweige zusammen. Git sucht den letzten gemeinsamen Basispunkt und erstellt einen neuen **Merge-Commit**.
|
||||
|
||||
```bash
|
||||
git checkout dev
|
||||
git merge main
|
||||
```
|
||||
|
||||
| Details | |
|
||||
|-----------|--------|
|
||||
| Wann? | In Team-Branches, bei bereits gepushten Branches, wenn Stabilität wichtiger als eine saubere History ist. |
|
||||
| Vorteile | Sicher, einfach nachvollziehbar, schreibt die History nicht um. |
|
||||
| Nachteile | Die History kann bei vielen Merges unübersichtlich ("Spaghetti-Graph") werden. |
|
||||
|
||||
### Git Rebase
|
||||
Setzt deine Commits neu auf die Spitze eines anderen Branches. Die Commit-IDs werden dabei neu geschrieben.
|
||||
|
||||
```bash
|
||||
git checkout dev
|
||||
git rebase main
|
||||
```
|
||||
|
||||
| Details | |
|
||||
|-----------|--------|
|
||||
| Wann? | In lokalen Feature-Branches (bevor sie geteilt werden), um die History sauber zu halten. |
|
||||
| Vorteile | Erzeugt eine perfekt lineare, leicht lesbare History. |
|
||||
| Nachteile | ⚠️ Gefährlich auf geteilten/öffentlichen Branches. Konflikte müssen ggf. für jeden einzelnen Commit gelöst werden. |
|
||||
|
||||
---
|
||||
|
||||
## 📦 Temporäres Speichern & Spezialbefehle
|
||||
|
||||
### Stash (Das "Regal")
|
||||
Speichert uncommitted Changes temporär, um das Arbeitsverzeichnis sauber zu machen, ohne zu committen.
|
||||
|
||||
```bash
|
||||
git stash # Änderungen "parken".
|
||||
git stash pop # Änderungen zurückholen und Stash leeren.
|
||||
```
|
||||
|
||||
**Wann?** Wenn du schnell den Branch wechseln musst, aber deine Arbeit noch nicht fertig ist.
|
||||
|
||||
### Cherry-pick
|
||||
Kopiert einen ganz gezielten Commit von einem Branch in deinen aktuellen.
|
||||
|
||||
```bash
|
||||
git cherry-pick <commit-hash>
|
||||
```
|
||||
|
||||
**Wann?** Wenn ein Bugfix auf dem falschen Branch gelandet ist oder du nur eine einzige Funktion aus einem Feature-Branch brauchst.
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Checkout & Switch
|
||||
|
||||
```bash
|
||||
git checkout dev # oder git switch dev – Wechselt zum Branch.
|
||||
git checkout -f dev # Force Checkout: Wechselt den Branch und verwirft alle ungespeicherten lokalen Änderungen unwiderruflich! ⚠️
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💻 VS Code Git-Optionen (UI)
|
||||
|
||||
VS Code bietet beim Branch-Wechsel oft drei intelligente Optionen an:
|
||||
|
||||
* **Migrate Changes ⭐**
|
||||
* Nimmt deine aktuellen Änderungen einfach mit in den neuen Branch.
|
||||
* (Intern: stash → switch → stash pop).
|
||||
* **Stash & Checkout**
|
||||
* Parkt deine Änderungen sicher im Stash und wechselt den Branch. Die Änderungen bleiben im Stash, bis du sie manuell wieder herausholst.
|
||||
* **Force Checkout ⚠️**
|
||||
* Wechselt den Branch und löscht deine aktuellen, ungespeicherten Änderungen. Nur nutzen, wenn die Arbeit weggeworfen werden kann.
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Typischer Sync-Workflow
|
||||
|
||||
Um den Entwicklungs-Branch aktuell zu halten, nachdem dev in main gemerged wurde:
|
||||
|
||||
1. Auf dev entwickeln.
|
||||
2. Merge dev → main für das Release.
|
||||
3. Zurück auf dev wechseln:
|
||||
```bash
|
||||
git checkout dev
|
||||
git merge main # (oder rebase), um den neuesten Stand vom Main wieder in Dev zu haben.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧠 Merksätze
|
||||
|
||||
* **Merge** = Historien verbinden (Sicher & Dokumentiert).
|
||||
* **Rebase** = Historie neu schreiben (Linear & Sauber).
|
||||
* **Stash** = "Ich parke das mal kurz hier."
|
||||
* **Migrate Changes** = Sicherer Branch-Wechsel mit "Gepäck".
|
||||
BIN
logo.png
BIN
logo.png
Binary file not shown.
|
Before Width: | Height: | Size: 4.3 MiB After Width: | Height: | Size: 312 KiB |
BIN
logos/MediaBar_logo_mod.png
Normal file
BIN
logos/MediaBar_logo_mod.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 312 KiB |
164
manifest.json
164
manifest.json
@@ -2,171 +2,35 @@
|
||||
{
|
||||
"guid": "d7e11d57-819b-4bdd-a88d-53c5f5560225",
|
||||
"name": "Media Bar Enhanced",
|
||||
"description": "Adds a enhanced media bar (featured content) to the Jellyfin web interface.",
|
||||
"description": "A jellyfin plugin to display a media bar (featured content) for jellyfin web.",
|
||||
"overview": "Media Bar for Jellyfin",
|
||||
"owner": "CodeDevMLH",
|
||||
"category": "General",
|
||||
"imageUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/raw/branch/main/logo.png",
|
||||
"imageUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/jellyfin-plugin-media-bar-enhanced/raw/branch/main/logo.png",
|
||||
"versions": [
|
||||
{
|
||||
"version": "1.5.0.0",
|
||||
"changelog": "Renamed to Media Bar Enhanced",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/jellyfin-plugin-media-bar-enhanced/releases/download/v1.5.0.0/Jellyfin.Plugin.MediaBarEnhanced.zip",
|
||||
"checksum": "ccf3a1e8caaa86f298d4f20cd815edf1",
|
||||
"timestamp": "2026-01-06T01:18:41Z"
|
||||
},
|
||||
{
|
||||
"version": "1.4.0.0",
|
||||
"changelog": "Add more config description, add search collection/playlist by name",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.4.0.0/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "b8a3667fa8290242c74411b2bd1c06da",
|
||||
"timestamp": "2026-01-04T23:50:01Z"
|
||||
},
|
||||
{
|
||||
"version": "1.3.0.0",
|
||||
"changelog": "Add file transformation fallback",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.3.0.0/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "4379eab39684501af97876abe1b4ab91",
|
||||
"timestamp": "2026-01-04T23:47:38Z"
|
||||
},
|
||||
{
|
||||
"version": "1.2.0.0",
|
||||
"changelog": "Add seasonals content mode",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.2.0.0/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "8ad0b9d38aa4bd4bd16e1f9f0e6c4d8c",
|
||||
"timestamp": "2026-01-04T15:13:36Z"
|
||||
},
|
||||
{
|
||||
"version": "1.1.0.6",
|
||||
"changelog": "UI improvements",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.1.0.6/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "91d342865ebdf9b4efd53561125c5604",
|
||||
"timestamp": "2026-01-04T14:19:50Z"
|
||||
},
|
||||
{
|
||||
"version": "1.1.0.5",
|
||||
"changelog": "Added collection (boxsets) IDs to slideshow option",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.1.0.5/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "41b4ddf3b6f9fc79eac64acb24989e67",
|
||||
"timestamp": "2026-01-04T14:09:29Z"
|
||||
},
|
||||
{
|
||||
"version": "1.1.0.4",
|
||||
"changelog": "Added loading screen disable option T3",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.1.0.4/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "f0d2bf6c1ce7bd7166776cd7a4e59d6f",
|
||||
"timestamp": "2026-01-04T12:41:07Z"
|
||||
},
|
||||
{
|
||||
"version": "1.1.0.3",
|
||||
"changelog": "Added loading screen disable option",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.1.0.3/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "f93373b9bb1f3614e4d4237b04619c32",
|
||||
"timestamp": "2026-01-04T01:57:20Z"
|
||||
},
|
||||
{
|
||||
"version": "1.1.0.2",
|
||||
"changelog": "Added loading screen disable option",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.1.0.2/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "06907adcd3f6e022c622d5c91119d1e1",
|
||||
"timestamp": "2026-01-03T23:03:51Z"
|
||||
},
|
||||
{
|
||||
"version": "1.1.0.1",
|
||||
"changelog": "Added custom media ids",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.1.0.1/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "81e90c7a8778856641bbc47ac60ebb32",
|
||||
"timestamp": "2026-01-03T23:00:39Z"
|
||||
},
|
||||
{
|
||||
"version": "1.1.0.0",
|
||||
"changelog": "Added custom media ids",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.1.0.0/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "03ee3f2eed26ebbc959ef49730018a98",
|
||||
"timestamp": "2026-01-03T22:44:54Z"
|
||||
},
|
||||
{
|
||||
"version": "1.0.0.8",
|
||||
"changelog": "small ui changes",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.0.0.8/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "f1e8acb78422f6dc729b4086deb9929e",
|
||||
"timestamp": "2026-01-03T18:43:37Z"
|
||||
},
|
||||
{
|
||||
"version": "1.0.0.7",
|
||||
"changelog": "always show arrows & keyboard controls",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.0.0.7/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "e88519a9a7405eb5083e7c950eb4a08b",
|
||||
"timestamp": "2026-01-03T18:22:25Z"
|
||||
},
|
||||
{
|
||||
"version": "1.0.0.6",
|
||||
"changelog": "",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.0.0.6/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "18137a92aa8966584e123ba76bbe71c2",
|
||||
"timestamp": "2026-01-03T18:11:43Z"
|
||||
},
|
||||
{
|
||||
"version": "1.0.0.5",
|
||||
"changelog": "",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.0.0.5/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "156f980aad077b272887a6ab3cfcdfe9",
|
||||
"timestamp": "2026-01-03T02:42:00Z"
|
||||
},
|
||||
{
|
||||
"version": "1.0.0.4",
|
||||
"changelog": "",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.0.0.4/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "e05f0024fe66a9b271c216c3555ce9ff",
|
||||
"timestamp": "2026-01-03T02:15:29Z"
|
||||
},
|
||||
{
|
||||
"version": "1.0.0.3",
|
||||
"changelog": "",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.0.0.3/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "c652dba434689a1116e10010235fa48c",
|
||||
"timestamp": "2026-01-03T01:42:53Z"
|
||||
},
|
||||
{
|
||||
"version": "1.0.0.2",
|
||||
"changelog": "",
|
||||
"changelog": "fixes",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.0.0.2/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "aded8f61ac5aed3449190cf7c41aa693",
|
||||
"timestamp": "2026-01-03T01:13:21Z"
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/jellyfin-plugin-media-bar-enhanced/releases/download/v1.0.0.2/Jellyfin.Plugin.MediaBarEnhanced.zip",
|
||||
"checksum": "1041b403ec0193c2172a6fe15501afd3",
|
||||
"timestamp": "2026-01-06T21:21:37Z"
|
||||
},
|
||||
{
|
||||
"version": "1.0.0.1",
|
||||
"changelog": "",
|
||||
"changelog": "fixes",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.0.0.1/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "8401a51d26ae1906a3eae9f8ff72e9a3",
|
||||
"timestamp": "2026-01-02T22:45:28Z"
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/jellyfin-plugin-media-bar-enhanced/releases/download/v1.0.0.1/Jellyfin.Plugin.MediaBarEnhanced.zip",
|
||||
"checksum": "f4e6194a9cc72fdda7436161c73832de",
|
||||
"timestamp": "2026-01-06T21:18:33Z"
|
||||
},
|
||||
{
|
||||
"version": "1.0.0.0",
|
||||
"changelog": "",
|
||||
"changelog": "Initial release",
|
||||
"targetAbi": "10.11.0.0",
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/Media-Bar-Plugin/releases/download/v1.0.0.0/Jellyfin.Plugin.MediaBar.zip",
|
||||
"checksum": "3cbd8527a0cb191dbc4a5126b49b60f9",
|
||||
"timestamp": "2026-01-02T22:08:37Z"
|
||||
"sourceUrl": "https://git.mahom03-spacecloud.de/CodeDevMLH/jellyfin-plugin-media-bar-enhanced/releases/download/v1.0.0.0/Jellyfin.Plugin.MediaBarEnhanced.zip",
|
||||
"checksum": "2ba7cc7f238f6aa7097628797935b903",
|
||||
"timestamp": "2026-01-06T18:56:30Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,157 +0,0 @@
|
||||
name: Auto Release Plugin
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
- '.github/**'
|
||||
- 'README.md'
|
||||
- 'jellyfin.ruleset'
|
||||
- '.gitignore'
|
||||
- '.editorconfig'
|
||||
- 'LICENSE'
|
||||
- 'logo.png'
|
||||
|
||||
jobs:
|
||||
build-and-release:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v5
|
||||
with:
|
||||
dotnet-version: '9.x'
|
||||
|
||||
- name: Read Version from Manifest
|
||||
id: read_version
|
||||
run: |
|
||||
VERSION=$(jq -r '.[0].versions[0].version' manifest.json)
|
||||
CHANGELOG=$(jq -r '.[0].versions[0].changelog' manifest.json)
|
||||
TARGET_ABI=$(jq -r '.[0].versions[0].targetAbi' manifest.json)
|
||||
|
||||
echo "Detected Version: $VERSION"
|
||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
||||
|
||||
# Escape newlines in changelog for GITHUB_ENV
|
||||
echo "CHANGELOG<<EOF" >> $GITHUB_ENV
|
||||
echo "$CHANGELOG" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
|
||||
- name: Build and Zip
|
||||
shell: bash
|
||||
run: |
|
||||
# Inject version from manifest into the build
|
||||
dotnet build Jellyfin.Plugin.MediaBarEnhanced/Jellyfin.Plugin.MediaBarEnhanced.csproj --configuration Release --output bin/Publish /p:Version=${{ env.VERSION }} /p:AssemblyVersion=${{ env.VERSION }}
|
||||
|
||||
cd bin/Publish
|
||||
zip -r Jellyfin.Plugin.MediaBarEnhanced.zip *
|
||||
cd ../..
|
||||
|
||||
# Calculate hash
|
||||
HASH=$(md5sum bin/Publish/Jellyfin.Plugin.MediaBarEnhanced.zip | awk '{ print $1 }')
|
||||
TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
# Export variables for next steps
|
||||
echo "ZIP_HASH=$HASH" >> $GITHUB_ENV
|
||||
echo "BUILD_TIME=$TIME" >> $GITHUB_ENV
|
||||
echo "ZIP_PATH=bin/Publish/Jellyfin.Plugin.MediaBarEnhanced.zip" >> $GITHUB_ENV
|
||||
|
||||
- name: Update Local manifest.json (Optional)
|
||||
shell: bash
|
||||
run: |
|
||||
REPO_OWNER="${{ github.repository_owner }}"
|
||||
REPO_NAME="${{ github.event.repository.name }}"
|
||||
VERSION="${{ env.VERSION }}"
|
||||
DOWNLOAD_URL="https://github.com/$REPO_OWNER/$REPO_NAME/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip"
|
||||
|
||||
echo "Updating local manifest.json with:"
|
||||
echo "Hash: ${{ env.ZIP_HASH }}"
|
||||
echo "Time: ${{ env.BUILD_TIME }}"
|
||||
echo "Url: $DOWNLOAD_URL"
|
||||
|
||||
jq --arg hash "${{ env.ZIP_HASH }}" \
|
||||
--arg time "${{ env.BUILD_TIME }}" \
|
||||
--arg url "$DOWNLOAD_URL" \
|
||||
'.[0].versions[0].checksum = $hash | .[0].versions[0].timestamp = $time | .[0].versions[0].sourceUrl = $url' \
|
||||
manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
||||
|
||||
- name: Commit Local manifest.json
|
||||
uses: stefanzweifel/git-auto-commit-action@v7
|
||||
with:
|
||||
commit_message: "Update manifest.json for release v${{ env.VERSION }} [skip ci]"
|
||||
file_pattern: manifest.json
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: "v${{ env.VERSION }}"
|
||||
name: "v${{ env.VERSION }}"
|
||||
# body: ${{ env.CHANGELOG }}
|
||||
files: ${{ env.ZIP_PATH }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
generate_release_notes: true
|
||||
|
||||
# Update Message in Remote Repository
|
||||
- name: Checkout Central Manifest Repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ github.repository_owner }}/jellyfin-plugin-manifest
|
||||
path: central-manifest
|
||||
token: ${{ secrets.CENTRAL_REPO_PAT }}
|
||||
|
||||
- name: Update Central Manifest
|
||||
shell: bash
|
||||
run: |
|
||||
cd central-manifest
|
||||
|
||||
# 1. Get info from previous steps
|
||||
VERSION="${{ env.VERSION }}"
|
||||
HASH="${{ env.ZIP_HASH }}"
|
||||
TIME="${{ env.BUILD_TIME }}"
|
||||
# URL points to the RELEASE we just created in the CURRENT repo
|
||||
DOWNLOAD_URL="https://github.com/${{ github.repository }}/releases/download/v$VERSION/Jellyfin.Plugin.MediaBarEnhanced.zip"
|
||||
|
||||
# 2. Extract GUID from the *built* artifact or the source manifest (in parent dir)
|
||||
# We use the source manifest from the checkout in '..'
|
||||
PLUGIN_GUID=$(jq -r '.[0].guid' ../manifest.json)
|
||||
|
||||
echo "Updating Central Manifest for Plugin GUID: $PLUGIN_GUID"
|
||||
|
||||
# 3. Update the specific plugin entry in the central manifest.json
|
||||
# This logic finds the object with matching guid, and updates its first version entry.
|
||||
jq --arg guid "$PLUGIN_GUID" \
|
||||
--arg hash "$HASH" \
|
||||
--arg time "$TIME" \
|
||||
--arg url "$DOWNLOAD_URL" \
|
||||
--arg ver "$VERSION" \
|
||||
'map(if .guid == $guid then
|
||||
.versions[0].version = $ver |
|
||||
.versions[0].checksum = $hash |
|
||||
.versions[0].timestamp = $time |
|
||||
.versions[0].sourceUrl = $url
|
||||
else . end)' \
|
||||
manifest.json > manifest.json.tmp && mv manifest.json.tmp manifest.json
|
||||
|
||||
- name: Commit and Push Central Manifest
|
||||
run: |
|
||||
cd central-manifest
|
||||
git config user.name "GitHub Action"
|
||||
git config user.email "action@github.com"
|
||||
|
||||
# Check if there are changes
|
||||
if [[ -n $(git status -s) ]]; then
|
||||
git add manifest.json
|
||||
git commit -m "Update MediaBar Enhanced to v${{ env.VERSION }}"
|
||||
git push
|
||||
else
|
||||
echo "No changes to central manifest."
|
||||
fi
|
||||
Reference in New Issue
Block a user