Ratings.cs 5.7 KB

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