Browse Source

Sanitize CustomTagDelimiters server side

The API requires an array type and does not support runtime generated default value. Use server side helper function to sanitize it into char.
gnattu 8 months ago
parent
commit
00ca4abbe1

+ 17 - 3
MediaBrowser.Model/Configuration/LibraryOptions.cs

@@ -2,12 +2,13 @@
 
 using System;
 using System.ComponentModel;
+using System.Linq;
 
 namespace MediaBrowser.Model.Configuration
 {
     public class LibraryOptions
     {
-        private static readonly char[] _defaultTagDelimiters = ['/', '|', ';', '\\'];
+        private static readonly string[] _defaultTagDelimiters = ["/", "|", ";", "\\"];
 
         public LibraryOptions()
         {
@@ -126,8 +127,7 @@ namespace MediaBrowser.Model.Configuration
         [DefaultValue(false)]
         public bool UseCustomTagDelimiters { get; set; }
 
-        [DefaultValue(typeof(LibraryOptions), nameof(_defaultTagDelimiters))]
-        public char[] CustomTagDelimiters { get; set; }
+        public string[] CustomTagDelimiters { get; set; }
 
         public string[] DelimiterWhitelist { get; set; }
 
@@ -149,5 +149,19 @@ namespace MediaBrowser.Model.Configuration
 
             return null;
         }
+
+        public char[] GetCustomTagDelimiters()
+        {
+            return CustomTagDelimiters.Select<string, char?>(x =>
+            {
+                var isChar = char.TryParse(x, out var c);
+                if (isChar)
+                {
+                    return c;
+                }
+
+                return null;
+            }).Where(x => x is not null).Select(x => x!.Value).ToArray();
+        }
     }
 }

+ 3 - 3
MediaBrowser.Providers/MediaInfo/AudioFileProber.cs

@@ -178,7 +178,7 @@ namespace MediaBrowser.Providers.MediaInfo
 
                 if (libraryOptions.UseCustomTagDelimiters)
                 {
-                    albumArtists = albumArtists.SelectMany(a => SplitWithCustomDelimiter(a, libraryOptions.CustomTagDelimiters, libraryOptions.DelimiterWhitelist)).ToArray();
+                    albumArtists = albumArtists.SelectMany(a => SplitWithCustomDelimiter(a, libraryOptions.GetCustomTagDelimiters(), libraryOptions.DelimiterWhitelist)).ToArray();
                 }
 
                 foreach (var albumArtist in albumArtists)
@@ -210,7 +210,7 @@ namespace MediaBrowser.Providers.MediaInfo
 
                 if (libraryOptions.UseCustomTagDelimiters)
                 {
-                    performers = performers.SelectMany(p => SplitWithCustomDelimiter(p, libraryOptions.CustomTagDelimiters, libraryOptions.DelimiterWhitelist)).ToArray();
+                    performers = performers.SelectMany(p => SplitWithCustomDelimiter(p, libraryOptions.GetCustomTagDelimiters(), libraryOptions.DelimiterWhitelist)).ToArray();
                 }
 
                 foreach (var performer in performers)
@@ -313,7 +313,7 @@ namespace MediaBrowser.Providers.MediaInfo
 
                 if (libraryOptions.UseCustomTagDelimiters)
                 {
-                    genres = genres.SelectMany(g => SplitWithCustomDelimiter(g, libraryOptions.CustomTagDelimiters, libraryOptions.DelimiterWhitelist)).ToArray();
+                    genres = genres.SelectMany(g => SplitWithCustomDelimiter(g, libraryOptions.GetCustomTagDelimiters(), libraryOptions.DelimiterWhitelist)).ToArray();
                 }
 
                 audio.Genres = options.ReplaceAllMetadata || audio.Genres is null || audio.Genres.Length == 0