Ratings.cs 6.3 KB

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