| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | using MediaBrowser.Model.Extensions;using MediaBrowser.Controller.Entities;using System;using System.Globalization;using System.Linq;using System.Text;namespace MediaBrowser.Server.Implementations.FileOrganization{    public static class NameUtils    {        private static readonly CultureInfo UsCulture = new CultureInfo("en-US");        internal static Tuple<T, int> GetMatchScore<T>(string sortedName, int? year, T series)            where T : BaseItem        {            var score = 0;            var seriesNameWithoutYear = series.Name;            if (series.ProductionYear.HasValue)            {                seriesNameWithoutYear = seriesNameWithoutYear.Replace(series.ProductionYear.Value.ToString(UsCulture), String.Empty);            }            if (IsNameMatch(sortedName, seriesNameWithoutYear))            {                score++;                if (year.HasValue && series.ProductionYear.HasValue)                {                    if (year.Value == series.ProductionYear.Value)                    {                        score++;                    }                    else                    {                        // Regardless of name, return a 0 score if the years don't match                        return new Tuple<T, int>(series, 0);                    }                }            }            return new Tuple<T, int>(series, score);        }        private static bool IsNameMatch(string name1, string name2)        {            name1 = GetComparableName(name1);            name2 = GetComparableName(name2);            return String.Equals(name1, name2, StringComparison.OrdinalIgnoreCase);        }        private static string GetComparableName(string name)        {            name = RemoveDiacritics(name);            name = " " + name + " ";            name = name.Replace(".", " ")            .Replace("_", " ")            .Replace(" and ", " ")            .Replace(".and.", " ")            .Replace("&", " ")            .Replace("!", " ")            .Replace("(", " ")            .Replace(")", " ")            .Replace(":", " ")            .Replace(",", " ")            .Replace("-", " ")            .Replace("'", " ")            .Replace("[", " ")            .Replace("]", " ")            .Replace(" a ", String.Empty, StringComparison.OrdinalIgnoreCase)            .Replace(" the ", String.Empty, StringComparison.OrdinalIgnoreCase)            .Replace(" ", String.Empty);            return name.Trim();        }        /// <summary>        /// Removes the diacritics.        /// </summary>        /// <param name="text">The text.</param>        /// <returns>System.String.</returns>        private static string RemoveDiacritics(string text)        {            return String.Concat(                text.Normalize(NormalizationForm.FormD)                .Where(ch => CharUnicodeInfo.GetUnicodeCategory(ch) !=                                              UnicodeCategory.NonSpacingMark)              ).Normalize(NormalizationForm.FormC);        }    }}
 |