Ratings.cs 5.5 KB

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