Ratings.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. using MediaBrowser.Common.Extensions;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. namespace MediaBrowser.Controller.Localization
  6. {
  7. /// <summary>
  8. /// Class Ratings
  9. /// </summary>
  10. public static class Ratings
  11. {
  12. /// <summary>
  13. /// The ratings def
  14. /// </summary>
  15. private static RatingsDefinition ratingsDef;
  16. /// <summary>
  17. /// The _ratings dict
  18. /// </summary>
  19. private static Dictionary<string, int> _ratingsDict;
  20. /// <summary>
  21. /// Gets the ratings dict.
  22. /// </summary>
  23. /// <value>The ratings dict.</value>
  24. public static Dictionary<string, int> RatingsDict
  25. {
  26. get { return _ratingsDict ?? (_ratingsDict = Initialize(false)); }
  27. }
  28. /// <summary>
  29. /// The ratings strings
  30. /// </summary>
  31. private static readonly Dictionary<int, string> ratingsStrings = new Dictionary<int, string>();
  32. /// <summary>
  33. /// Initializes the specified block unrated.
  34. /// </summary>
  35. /// <param name="blockUnrated">if set to <c>true</c> [block unrated].</param>
  36. /// <returns>Dictionary{System.StringSystem.Int32}.</returns>
  37. public static Dictionary<string, int> Initialize(bool blockUnrated)
  38. {
  39. //build our ratings dictionary from the combined local one and us one
  40. ratingsDef = new RatingsDefinition(Path.Combine(Kernel.Instance.ApplicationPaths.LocalizationPath, "Ratings-" + Kernel.Instance.Configuration.MetadataCountryCode+".txt"));
  41. //global value of None
  42. var dict = new Dictionary<string, int> {{"None", -1}};
  43. foreach (var pair in ratingsDef.RatingsDict)
  44. {
  45. dict.TryAdd(pair.Key, pair.Value);
  46. }
  47. if (Kernel.Instance.Configuration.MetadataCountryCode.ToUpper() != "US")
  48. {
  49. foreach (var pair in new USRatingsDictionary())
  50. {
  51. dict.TryAdd(pair.Key, pair.Value);
  52. }
  53. }
  54. //global values of CS
  55. dict.TryAdd("CS", 1000);
  56. dict.TryAdd("", blockUnrated ? 1000 : 0);
  57. //and rating reverse lookup dictionary (non-redundant ones)
  58. ratingsStrings.Clear();
  59. var lastLevel = -10;
  60. ratingsStrings.Add(-1,LocalizedStrings.Instance.GetString("Any"));
  61. foreach (var pair in ratingsDef.RatingsDict.OrderBy(p => p.Value))
  62. {
  63. if (pair.Value > lastLevel)
  64. {
  65. lastLevel = pair.Value;
  66. ratingsStrings.TryAdd(pair.Value, pair.Key);
  67. }
  68. }
  69. ratingsStrings.TryAdd(999, "CS");
  70. return dict;
  71. }
  72. /// <summary>
  73. /// Switches the unrated.
  74. /// </summary>
  75. /// <param name="block">if set to <c>true</c> [block].</param>
  76. public static void SwitchUnrated(bool block)
  77. {
  78. RatingsDict.Remove("");
  79. RatingsDict.Add("", block ? 1000 : 0);
  80. }
  81. /// <summary>
  82. /// Levels the specified rating STR.
  83. /// </summary>
  84. /// <param name="ratingStr">The rating STR.</param>
  85. /// <returns>System.Int32.</returns>
  86. public static int Level(string ratingStr)
  87. {
  88. if (ratingStr == null) ratingStr = "";
  89. if (RatingsDict.ContainsKey(ratingStr))
  90. return RatingsDict[ratingStr];
  91. string stripped = StripCountry(ratingStr);
  92. if (RatingsDict.ContainsKey(stripped))
  93. return RatingsDict[stripped];
  94. return RatingsDict[""]; //return "unknown" level
  95. }
  96. /// <summary>
  97. /// Strips the country.
  98. /// </summary>
  99. /// <param name="rating">The rating.</param>
  100. /// <returns>System.String.</returns>
  101. private static string StripCountry(string rating)
  102. {
  103. int start = rating.IndexOf('-');
  104. return start > 0 ? rating.Substring(start + 1) : rating;
  105. }
  106. /// <summary>
  107. /// Returns a <see cref="System.String" /> that represents this instance.
  108. /// </summary>
  109. /// <param name="level">The level.</param>
  110. /// <returns>A <see cref="System.String" /> that represents this instance.</returns>
  111. public static string ToString(int level)
  112. {
  113. //return the closest one
  114. while (level > 0)
  115. {
  116. if (ratingsStrings.ContainsKey(level))
  117. return ratingsStrings[level];
  118. level--;
  119. }
  120. return ratingsStrings.Values.FirstOrDefault(); //default to first one
  121. }
  122. /// <summary>
  123. /// To the strings.
  124. /// </summary>
  125. /// <returns>List{System.String}.</returns>
  126. public static List<string> ToStrings()
  127. {
  128. //return the whole list of ratings strings
  129. return ratingsStrings.Values.ToList();
  130. }
  131. /// <summary>
  132. /// To the values.
  133. /// </summary>
  134. /// <returns>List{System.Int32}.</returns>
  135. public static List<int> ToValues()
  136. {
  137. //return the whole list of ratings values
  138. return ratingsStrings.Keys.ToList();
  139. }
  140. //public Microsoft.MediaCenter.UI.Image RatingImage(string rating)
  141. //{
  142. // return Helper.GetMediaInfoImage("Rated_" + rating);
  143. //}
  144. }
  145. }