NameExtensions.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using MediaBrowser.Common.Extensions;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.Linq;
  6. using MediaBrowser.Controller.Extensions;
  7. using MediaBrowser.Model.Extensions;
  8. namespace MediaBrowser.Controller.Library
  9. {
  10. public static class NameExtensions
  11. {
  12. public static bool AreEqual(string x, string y)
  13. {
  14. if (string.IsNullOrWhiteSpace(x) && string.IsNullOrWhiteSpace(y))
  15. {
  16. return true;
  17. }
  18. return string.Compare(x, y, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace) == 0;
  19. }
  20. public static bool EqualsAny(IEnumerable<string> names, string x)
  21. {
  22. x = NormalizeForComparison(x);
  23. return names.Any(y => string.Compare(x, y, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace) == 0);
  24. }
  25. private static string NormalizeForComparison(string name)
  26. {
  27. if (name == null)
  28. {
  29. return string.Empty;
  30. }
  31. return name;
  32. //return name.RemoveDiacritics();
  33. }
  34. private static string RemoveDiacritics(string name)
  35. {
  36. if (name == null)
  37. {
  38. return string.Empty;
  39. }
  40. //return name;
  41. return name.RemoveDiacritics();
  42. }
  43. public static IEnumerable<string> DistinctNames(this IEnumerable<string> names)
  44. {
  45. return names.DistinctBy(RemoveDiacritics, StringComparer.OrdinalIgnoreCase);
  46. }
  47. }
  48. public class DistinctNameComparer : IComparer<string>, IEqualityComparer<string>
  49. {
  50. public int Compare(string x, string y)
  51. {
  52. if (string.IsNullOrWhiteSpace(x) && string.IsNullOrWhiteSpace(y))
  53. {
  54. return 0;
  55. }
  56. return string.Compare(x.RemoveDiacritics(), y.RemoveDiacritics(), StringComparison.OrdinalIgnoreCase);
  57. }
  58. public bool Equals(string x, string y)
  59. {
  60. return Compare(x, y) == 0;
  61. }
  62. public int GetHashCode(string obj)
  63. {
  64. return (obj ?? string.Empty).GetHashCode();
  65. }
  66. }
  67. }