Allow multiple library folders
Build Plugin / build (push) Successful in 2m21s

This commit is contained in:
2025-12-19 23:29:25 +01:00
parent c02469c6d0
commit d3fbaef417
4 changed files with 340 additions and 36 deletions
@@ -1,7 +1,24 @@
using System.Collections.Generic;
using MediaBrowser.Model.Plugins;
namespace Jellyfin.Plugin.JellyLMS.Configuration;
/// <summary>
/// Represents a path mapping between Jellyfin and LMS file paths.
/// </summary>
public class PathMapping
{
/// <summary>
/// Gets or sets the path prefix as seen by Jellyfin.
/// </summary>
public string JellyfinPath { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the same path prefix as seen by LMS.
/// </summary>
public string LmsPath { get; set; } = string.Empty;
}
/// <summary>
/// Plugin configuration for JellyLMS.
/// </summary>
@@ -72,14 +89,46 @@ public class PluginConfiguration : BasePluginConfiguration
/// <summary>
/// Gets or sets the media path prefix as seen by Jellyfin.
/// Used for path mapping when UseDirectFilePath is enabled.
/// Example: /media/music or C:\Music.
/// Deprecated: Use PathMappings instead. Kept for backwards compatibility.
/// </summary>
public string JellyfinMediaPath { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the media path prefix as seen by LMS.
/// Used for path mapping when UseDirectFilePath is enabled.
/// Example: /mnt/music or //nas/music.
/// Deprecated: Use PathMappings instead. Kept for backwards compatibility.
/// </summary>
public string LmsMediaPath { get; set; } = string.Empty;
/// <summary>
/// Gets or sets the list of path mappings between Jellyfin and LMS.
/// Each mapping allows files from different locations to be played via direct file access.
/// </summary>
public List<PathMapping> PathMappings { get; set; } = new();
/// <summary>
/// Gets all effective path mappings, including legacy single mapping if configured.
/// </summary>
/// <returns>Enumerable of all configured path mappings.</returns>
public IEnumerable<PathMapping> GetAllPathMappings()
{
// Return configured list mappings first
foreach (var mapping in PathMappings)
{
if (!string.IsNullOrEmpty(mapping.JellyfinPath) && !string.IsNullOrEmpty(mapping.LmsPath))
{
yield return mapping;
}
}
// Fall back to legacy single mapping for backwards compatibility
if (!string.IsNullOrEmpty(JellyfinMediaPath) && !string.IsNullOrEmpty(LmsMediaPath))
{
yield return new PathMapping
{
JellyfinPath = JellyfinMediaPath,
LmsPath = LmsMediaPath
};
}
}
}