Merge pull request #7654 from Shadowghost/nfo-provider-fix

Prefer MetadataProvider enum as provider id key over arbitrary strings

(cherry picked from commit a2abae3014)
Signed-off-by: crobibero <cody@robibe.ro>
pull/7696/head
Cody Robibero 2 years ago committed by crobibero
parent d16e36d5a3
commit 13df026f6b

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Linq;
namespace MediaBrowser.Model.Entities namespace MediaBrowser.Model.Entities
{ {
@ -9,6 +10,16 @@ namespace MediaBrowser.Model.Entities
/// </summary> /// </summary>
public static class ProviderIdsExtensions public static class ProviderIdsExtensions
{ {
/// <summary>
/// Case insensitive dictionary of <see cref="MetadataProvider"/> string representation.
/// </summary>
private static readonly Dictionary<string, string> _metadataProviderEnumDictionary =
Enum.GetValues<MetadataProvider>()
.ToDictionary(
enumValue => enumValue.ToString(),
enumValue => enumValue.ToString(),
StringComparer.OrdinalIgnoreCase);
/// <summary> /// <summary>
/// Checks if this instance has an id for the given provider. /// Checks if this instance has an id for the given provider.
/// </summary> /// </summary>
@ -108,7 +119,7 @@ namespace MediaBrowser.Model.Entities
/// <param name="instance">The instance.</param> /// <param name="instance">The instance.</param>
/// <param name="name">The name.</param> /// <param name="name">The name.</param>
/// <param name="value">The value.</param> /// <param name="value">The value.</param>
public static void SetProviderId(this IHasProviderIds instance, string name, string value) public static void SetProviderId(this IHasProviderIds instance, string name, string? value)
{ {
if (instance == null) if (instance == null)
{ {
@ -125,7 +136,15 @@ namespace MediaBrowser.Model.Entities
// Ensure it exists // Ensure it exists
instance.ProviderIds ??= new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); instance.ProviderIds ??= new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
instance.ProviderIds[name] = value; // Match on internal MetadataProvider enum string values before adding arbitrary providers
if (_metadataProviderEnumDictionary.TryGetValue(name, out var enumValue))
{
instance.ProviderIds[enumValue] = value;
}
else
{
instance.ProviderIds[name] = value;
}
} }
} }

Loading…
Cancel
Save