From 1a1cfba795689f5c74fac9cd88d75074c657276c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 20 Jul 2013 10:57:48 -0400 Subject: [PATCH] faster file extension comparisons --- .../Resolvers/EntityResolutionHelper.cs | 32 ++++++++++++++----- .../Library/CoreResolutionIgnoreRule.cs | 13 ++------ 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs index 78c9b133be..d57c354f7d 100644 --- a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs +++ b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs @@ -1,11 +1,11 @@ -using System.Text.RegularExpressions; -using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; +using MediaBrowser.Controller.Library; using System; using System.Collections.Generic; using System.IO; using System.Linq; -using MediaBrowser.Controller.Library; +using System.Text.RegularExpressions; namespace MediaBrowser.Controller.Resolvers { @@ -46,6 +46,8 @@ namespace MediaBrowser.Controller.Resolvers ".mts" }; + private static readonly Dictionary VideoFileExtensionsDictionary = VideoFileExtensions.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); + private static readonly Regex MultiFileRegex = new Regex( @"(.*?)([ _.-]*(?:cd|dvd|p(?:ar)?t|dis[ck]|d)[ _.-]*[0-9]+)(.*?)(\.[^.]+)$", RegexOptions.Compiled | RegexOptions.IgnoreCase); @@ -67,7 +69,7 @@ namespace MediaBrowser.Controller.Resolvers /// /// The audio file extensions /// - private static readonly string[] AudioFileExtensions = new[] { + private static readonly Dictionary AudioFileExtensions = new[] { ".mp3", ".flac", ".wma", @@ -79,7 +81,8 @@ namespace MediaBrowser.Controller.Resolvers ".ape", ".ogg", ".oga" - }; + + }.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); /// /// Determines whether [is audio file] [the specified args]. @@ -88,7 +91,14 @@ namespace MediaBrowser.Controller.Resolvers /// true if [is audio file] [the specified args]; otherwise, false. public static bool IsAudioFile(string path) { - return AudioFileExtensions.Contains(Path.GetExtension(path), StringComparer.OrdinalIgnoreCase); + var extension = Path.GetExtension(path); + + if (string.IsNullOrEmpty(extension)) + { + return false; + } + + return AudioFileExtensions.ContainsKey(extension); } /// @@ -98,8 +108,14 @@ namespace MediaBrowser.Controller.Resolvers /// true if [is video file] [the specified path]; otherwise, false. public static bool IsVideoFile(string path) { - var extension = Path.GetExtension(path) ?? String.Empty; - return VideoFileExtensions.Contains(extension, StringComparer.OrdinalIgnoreCase); + var extension = Path.GetExtension(path); + + if (string.IsNullOrEmpty(extension)) + { + return false; + } + + return VideoFileExtensionsDictionary.ContainsKey(extension); } /// diff --git a/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs b/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs index ebb79e96bb..f6e5af7b51 100644 --- a/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs +++ b/MediaBrowser.Server.Implementations/Library/CoreResolutionIgnoreRule.cs @@ -1,7 +1,6 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Resolvers; -using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.IO; @@ -14,12 +13,10 @@ namespace MediaBrowser.Server.Implementations.Library /// public class CoreResolutionIgnoreRule : IResolverIgnoreRule { - private readonly ILogger _logger; - /// /// Any folder named in this list will be ignored - can be added to at runtime for extensibility /// - private static readonly List IgnoreFolders = new List + private static readonly Dictionary IgnoreFolders = new List { "metadata", "certificate", @@ -28,12 +25,8 @@ namespace MediaBrowser.Server.Implementations.Library "ps3_vprm", "adv_obj", "extrafanart" - }; - public CoreResolutionIgnoreRule(ILogger logger) - { - _logger = logger; - } + }.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); /// /// Shoulds the ignore. @@ -81,7 +74,7 @@ namespace MediaBrowser.Server.Implementations.Library var filename = args.FileInfo.Name; // Ignore any folders in our list - if (IgnoreFolders.Contains(filename, StringComparer.OrdinalIgnoreCase)) + if (IgnoreFolders.ContainsKey(filename)) { return true; }