Ratings.cs 6.3 KB

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