pull/13615/merge
Malik 3 weeks ago committed by GitHub
commit 620359fc06
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -673,6 +673,8 @@ namespace Emby.Server.Implementations
_pluginManager.CreatePlugins();
Resolve<ILibraryManager>().AddScanners(GetExports<IScanner>());
Resolve<ILibraryManager>().AddParts(
GetExports<IResolverIgnoreRule>(),
GetExports<IItemResolver>(),

@ -230,6 +230,8 @@ namespace Emby.Server.Implementations.Library
private IMultiItemResolver[] MultiItemResolvers { get; set; } = [];
private IScanner[] Scanners { get; set; } = Array.Empty<IScanner>();
/// <summary>
/// Gets or sets the comparers.
/// </summary>
@ -261,6 +263,16 @@ namespace Emby.Server.Implementations.Library
PostscanTasks = postscanTasks.ToArray();
}
public void AddScanners(IEnumerable<IScanner> scanners)
{
Scanners = scanners.ToArray();
}
public bool SupportsScanner(IScanner scanner)
{
return Scanners.Select(s => s.Enabled && s == scanner).FirstOrDefault(e => false);
}
/// <summary>
/// Records the configuration values.
/// </summary>

@ -826,6 +826,15 @@ public class LibraryController : BaseJellyfinApiController
.OrderBy(i => typesList.IndexOf(i.ItemType))
.ToList();
result.MetadataResolvers = plugins
.SelectMany(i => i.Plugins.Where(p => p.Type == MetadataPluginType.MetadataResolver))
.Select(i => new LibraryOptionInfoDto
{
Name = i.Name
})
.DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
.ToArray();
result.MetadataSavers = plugins
.SelectMany(i => i.Plugins.Where(p => p.Type == MetadataPluginType.MetadataSaver))
.Select(i => new LibraryOptionInfoDto
@ -885,6 +894,16 @@ public class LibraryController : BaseJellyfinApiController
typeOptions.Add(new LibraryTypeOptionsDto
{
Type = type,
MetadataResolvers = plugins
.Where(i => string.Equals(i.ItemType, type, StringComparison.OrdinalIgnoreCase))
.SelectMany(i => i.Plugins.Where(p => p.Type == MetadataPluginType.MetadataResolver))
.Select(i => new LibraryOptionInfoDto
{
Name = i.Name,
DefaultEnabled = false // TODO(Malik): implement IsDefault check
})
.DistinctBy(i => i.Name, StringComparer.OrdinalIgnoreCase)
.ToArray(),
MetadataFetchers = plugins
.Where(i => string.Equals(i.ItemType, type, StringComparison.OrdinalIgnoreCase))

@ -8,6 +8,11 @@ namespace Jellyfin.Api.Models.LibraryDtos;
/// </summary>
public class LibraryOptionsResultDto
{
/// <summary>
/// Gets or sets the metadata readers.
/// </summary>
public IReadOnlyList<LibraryOptionInfoDto> MetadataResolvers { get; set; } = Array.Empty<LibraryOptionInfoDto>();
/// <summary>
/// Gets or sets the metadata savers.
/// </summary>

@ -15,6 +15,11 @@ public class LibraryTypeOptionsDto
/// </summary>
public string? Type { get; set; }
/// <summary>
/// Gets or sets the metadata fetchers.
/// </summary>
public IReadOnlyList<LibraryOptionInfoDto> MetadataResolvers { get; set; } = Array.Empty<LibraryOptionInfoDto>();
/// <summary>
/// Gets or sets the metadata fetchers.
/// </summary>

@ -213,6 +213,8 @@ namespace MediaBrowser.Controller.Library
/// <returns>IEnumerable{System.String}.</returns>
Task<IEnumerable<Video>> GetIntros(BaseItem item, User user);
public bool SupportsScanner(IScanner scanner);
/// <summary>
/// Adds the parts.
/// </summary>
@ -228,6 +230,8 @@ namespace MediaBrowser.Controller.Library
IEnumerable<IBaseItemComparer> itemComparers,
IEnumerable<ILibraryPostScanTask> postscanTasks);
void AddScanners(IEnumerable<IScanner> scanners);
/// <summary>
/// Sorts the specified items.
/// </summary>

@ -0,0 +1,22 @@
#pragma warning disable CS1591
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Jellyfin.Data.Enums;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.LiveTv;
namespace MediaBrowser.Controller.Resolvers
{
public interface IScanner
{
bool Enabled { get; set; }
bool Default { get; set; }
public ICollection<BaseItem> ApplyMetadata(ICollection<BaseItem> ts);
}
}

@ -0,0 +1,38 @@
#pragma warning disable CS1591
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Jellyfin.Data.Enums;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.IO;
namespace MediaBrowser.Controller.Resolvers
{
public abstract class Scanner : IScanner
{
public bool Enabled { get; set; } = false;
public bool Default { get; set; } = false;
public ResolverPriority Priority => ResolverPriority.Plugin;
protected BaseItem ApplyMetadata(BaseItem t)
{
protected abstract BaseItem ApplyMetadata(BaseItem t);
}
public ICollection<BaseItem> ApplyMetadata(ICollection<BaseItem> ts)
{
foreach (var t in ts)
{
ApplyMetadata(t);
}
return ts;
}
}
}

@ -18,6 +18,8 @@ namespace MediaBrowser.Model.Configuration
MetadataFetcherOrder = Array.Empty<string>();
DisabledImageFetchers = Array.Empty<string>();
ImageFetcherOrder = Array.Empty<string>();
MetadataResolvers = Array.Empty<string>();
DisabledMetadataResolvers = Array.Empty<string>();
}
public string ItemType { get; set; }
@ -33,5 +35,9 @@ namespace MediaBrowser.Model.Configuration
public string[] DisabledImageFetchers { get; set; }
public string[] ImageFetcherOrder { get; set; }
public string[] MetadataResolvers { get; set; }
public string[] DisabledMetadataResolvers { get; set; }
}
}

@ -15,6 +15,7 @@ namespace MediaBrowser.Model.Configuration
MetadataSaver,
SubtitleFetcher,
LyricFetcher,
MediaSegmentProvider
MediaSegmentProvider,
MetadataResolver
}
}

@ -309,6 +309,8 @@ namespace MediaBrowser.Model.Configuration
ImageFetchers = Array.Empty<string>();
ImageFetcherOrder = Array.Empty<string>();
ImageOptions = Array.Empty<ImageOption>();
MetadataResolvers = Array.Empty<string>();
MetadataResolverOrder = Array.Empty<string>();
}
public string Type { get; set; }
@ -321,6 +323,10 @@ namespace MediaBrowser.Model.Configuration
public string[] ImageFetcherOrder { get; set; }
public string[] MetadataResolvers { get; set; }
public string[] MetadataResolverOrder { get; set; }
public ImageOption[] ImageOptions { get; set; }
public ImageOption GetImageOptions(ImageType type)

@ -591,6 +591,14 @@ namespace MediaBrowser.Providers.Manager
Type = MetadataPluginType.MediaSegmentProvider
}));
// Filesystem to metadata resolvers
var metadataResolverProviders = summary.Plugins.Select(p => p.Type == MetadataPluginType.MetadataResolver && p.Name != null ? p : null);
pluginList.AddRange(metadataResolverProviders.Select(i => new MetadataPlugin
{
Name = i?.Name,
Type = MetadataPluginType.MetadataResolver
}));
summary.Plugins = pluginList.ToArray();
var supportedImageTypes = imageProviders.OfType<IRemoteImageProvider>()
@ -611,10 +619,10 @@ namespace MediaBrowser.Providers.Manager
var providers = GetMetadataProvidersInternal<T>(item, libraryOptions, options, true, true).ToList();
// Locals
list.AddRange(providers.Where(i => i is ILocalMetadataProvider).Select(i => new MetadataPlugin
list.AddRange(providers.Where(i => i is IMetadataProvider && i is not IRemoteMetadataProvider && i is not ILocalMetadataProvider && i is not ICustomMetadataProvider).Select(i => new MetadataPlugin
{
Name = i.Name,
Type = MetadataPluginType.LocalMetadataProvider
Type = MetadataPluginType.MetadataResolver
}));
// Fetchers

Loading…
Cancel
Save