Ratings.cs 5.5 KB

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