diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-10 13:46:11 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-10 13:46:11 -0400 |
| commit | d2933cab7355b9a77ec802e4bc1efae9a3bf9743 (patch) | |
| tree | 47fa43815595866304cacb84aab8755778f952ef | |
| parent | c174859b528bc4e167f5cc34d5ff0e6a117901ed (diff) | |
fixed ratings. moved them to static text files
17 files changed, 264 insertions, 438 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index c732e27d6..68a56607e 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -202,6 +202,7 @@ namespace MediaBrowser.Api.UserLibrary /// </summary> private readonly ILibraryManager _libraryManager; private readonly ILibrarySearchEngine _searchEngine; + private readonly ILocalizationManager _localization; /// <summary> /// Initializes a new instance of the <see cref="ItemsService" /> class. @@ -451,17 +452,47 @@ namespace MediaBrowser.Api.UserLibrary // Min official rating if (!string.IsNullOrEmpty(request.MinOfficialRating)) { - var level = Ratings.Level(request.MinOfficialRating); + var level = _localization.GetRatingLevel(request.MinOfficialRating); - items = items.Where(i => Ratings.Level(i.CustomRating ?? i.OfficialRating) >= level); + if (level.HasValue) + { + items = items.Where(i => + { + var rating = i.CustomRating ?? i.OfficialRating; + + if (string.IsNullOrEmpty(rating)) + { + return true; + } + + var itemLevel = _localization.GetRatingLevel(rating); + + return !itemLevel.HasValue || itemLevel.Value >= level.Value; + }); + } } // Max official rating if (!string.IsNullOrEmpty(request.MaxOfficialRating)) { - var level = Ratings.Level(request.MaxOfficialRating); + var level = _localization.GetRatingLevel(request.MinOfficialRating); - items = items.Where(i => Ratings.Level(i.CustomRating ?? i.OfficialRating) <= level); + if (level.HasValue) + { + items = items.Where(i => + { + var rating = i.CustomRating ?? i.OfficialRating; + + if (string.IsNullOrEmpty(rating)) + { + return true; + } + + var itemLevel = _localization.GetRatingLevel(rating); + + return !itemLevel.HasValue || itemLevel.Value <= level.Value; + }); + } } // Exclude item types diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 64d3810fa..974b3f864 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -143,6 +143,7 @@ namespace MediaBrowser.Controller.Entities public static ILibraryManager LibraryManager { get; set; } public static IServerConfigurationManager ConfigurationManager { get; set; } public static IProviderManager ProviderManager { get; set; } + public static ILocalizationManager LocalizationManager { get; set; } /// <summary> /// Returns a <see cref="System.String" /> that represents this instance. @@ -1081,9 +1082,10 @@ namespace MediaBrowser.Controller.Entities /// Determines if a given user has access to this item /// </summary> /// <param name="user">The user.</param> + /// <param name="localizationManager">The localization manager.</param> /// <returns><c>true</c> if [is parental allowed] [the specified user]; otherwise, <c>false</c>.</returns> - /// <exception cref="System.ArgumentNullException"></exception> - public bool IsParentalAllowed(User user) + /// <exception cref="System.ArgumentNullException">user</exception> + public bool IsParentalAllowed(User user, ILocalizationManager localizationManager) { if (user == null) { @@ -1095,12 +1097,22 @@ namespace MediaBrowser.Controller.Entities return true; } - if (user.Configuration.BlockNotRated && string.IsNullOrEmpty(CustomRating ?? OfficialRating)) + var rating = CustomRating ?? OfficialRating; + + if (user.Configuration.BlockNotRated && string.IsNullOrEmpty(rating)) { return false; } - return Ratings.Level(CustomRating ?? OfficialRating) <= user.Configuration.MaxParentalRating.Value; + var value = localizationManager.GetRatingLevel(rating); + + // Could not determine the integer value + if (!value.HasValue) + { + return true; + } + + return value.Value <= user.Configuration.MaxParentalRating.Value; } /// <summary> @@ -1117,7 +1129,7 @@ namespace MediaBrowser.Controller.Entities throw new ArgumentNullException("user"); } - return IsParentalAllowed(user); + return IsParentalAllowed(user, LocalizationManager); } /// <summary> diff --git a/MediaBrowser.Controller/Localization/AURatingsDictionary.cs b/MediaBrowser.Controller/Localization/AURatingsDictionary.cs deleted file mode 100644 index 882302f10..000000000 --- a/MediaBrowser.Controller/Localization/AURatingsDictionary.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; - -namespace MediaBrowser.Controller.Localization -{ - /// <summary> - /// Class AURatingsDictionary - /// </summary> - public class AURatingsDictionary : Dictionary<string, int> - { - /// <summary> - /// Initializes a new instance of the <see cref="AURatingsDictionary" /> class. - /// </summary> - public AURatingsDictionary() - { - Add("AU-G", 1); - Add("AU-PG", 5); - Add("AU-M", 6); - Add("AU-M15+", 7); - Add("AU-R18+", 9); - Add("AU-X18+", 10); - } - } -} diff --git a/MediaBrowser.Controller/Localization/GBRatingsDictionary.cs b/MediaBrowser.Controller/Localization/GBRatingsDictionary.cs deleted file mode 100644 index 414abdd59..000000000 --- a/MediaBrowser.Controller/Localization/GBRatingsDictionary.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; - -namespace MediaBrowser.Controller.Localization -{ - /// <summary> - /// Class GBRatingsDictionary - /// </summary> - public class GBRatingsDictionary : Dictionary<string, int> - { - /// <summary> - /// Initializes a new instance of the <see cref="GBRatingsDictionary" /> class. - /// </summary> - public GBRatingsDictionary() - { - Add("GB-U", 1); - Add("GB-PG", 5); - Add("GB-12", 6); - Add("GB-12A", 7); - Add("GB-15", 8); - Add("GB-18", 9); - Add("GB-R18", 15); - } - } -} diff --git a/MediaBrowser.Controller/Localization/ILocalizationManager.cs b/MediaBrowser.Controller/Localization/ILocalizationManager.cs index 487c4a48e..ecafec48a 100644 --- a/MediaBrowser.Controller/Localization/ILocalizationManager.cs +++ b/MediaBrowser.Controller/Localization/ILocalizationManager.cs @@ -24,5 +24,11 @@ namespace MediaBrowser.Controller.Localization /// </summary> /// <returns>IEnumerable{ParentalRating}.</returns> IEnumerable<ParentalRating> GetParentalRatings(); + /// <summary> + /// Gets the rating level. + /// </summary> + /// <param name="rating">The rating.</param> + /// <returns>System.Int32.</returns> + int? GetRatingLevel(string rating); } } diff --git a/MediaBrowser.Controller/Localization/NLRatingsDictionary.cs b/MediaBrowser.Controller/Localization/NLRatingsDictionary.cs deleted file mode 100644 index 7a20f50ba..000000000 --- a/MediaBrowser.Controller/Localization/NLRatingsDictionary.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; - -namespace MediaBrowser.Controller.Localization -{ - /// <summary> - /// Class NLRatingsDictionary - /// </summary> - public class NLRatingsDictionary : Dictionary<string, int> - { - /// <summary> - /// Initializes a new instance of the <see cref="NLRatingsDictionary" /> class. - /// </summary> - public NLRatingsDictionary() - { - Add("NL-AL", 1); - Add("NL-MG6", 2); - Add("NL-6", 3); - Add("NL-9", 5); - Add("NL-12", 6); - Add("NL-16", 8); - } - } -} diff --git a/MediaBrowser.Controller/Localization/Ratings.cs b/MediaBrowser.Controller/Localization/Ratings.cs deleted file mode 100644 index bc4ebab4e..000000000 --- a/MediaBrowser.Controller/Localization/Ratings.cs +++ /dev/null @@ -1,184 +0,0 @@ -using System.Globalization; -using MediaBrowser.Controller.Configuration; -using System.Collections.Generic; -using System.IO; -using System.Linq; - -namespace MediaBrowser.Controller.Localization -{ - /// <summary> - /// Class Ratings - /// </summary> - public static class Ratings - { - public static IServerConfigurationManager ConfigurationManager; - - /// <summary> - /// The ratings def - /// </summary> - private static RatingsDefinition ratingsDef; - /// <summary> - /// The _ratings dict - /// </summary> - private static Dictionary<string, int> _ratingsDict; - /// <summary> - /// Gets the ratings dict. - /// </summary> - /// <value>The ratings dict.</value> - public static Dictionary<string, int> RatingsDict - { - get { return _ratingsDict ?? (_ratingsDict = Initialize(false, ConfigurationManager)); } - } - /// <summary> - /// The ratings strings - /// </summary> - private static readonly Dictionary<int, string> ratingsStrings = new Dictionary<int, string>(); - - /// <summary> - /// Tries the add. - /// </summary> - /// <typeparam name="TKey">The type of the T key.</typeparam> - /// <typeparam name="TValue">The type of the T value.</typeparam> - /// <param name="dictionary">The dictionary.</param> - /// <param name="key">The key.</param> - /// <param name="value">The value.</param> - /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> - private static void TryAdd<TKey, TValue>(Dictionary<TKey, TValue> dictionary, TKey key, TValue value) - { - if (dictionary.ContainsKey(key)) - { - return; - } - - dictionary.Add(key, value); - } - - /// <summary> - /// Initializes the specified block unrated. - /// </summary> - /// <param name="blockUnrated">if set to <c>true</c> [block unrated].</param> - /// <returns>Dictionary{System.StringSystem.Int32}.</returns> - public static Dictionary<string, int> Initialize(bool blockUnrated, IServerConfigurationManager configurationManager) - { - //build our ratings dictionary from the combined local one and us one - ratingsDef = new RatingsDefinition(Path.Combine(configurationManager.ApplicationPaths.LocalizationPath, "Ratings-" + configurationManager.Configuration.MetadataCountryCode + ".txt"), configurationManager); - //global value of None - var dict = new Dictionary<string, int> { { "None", -1 } }; - foreach (var pair in ratingsDef.RatingsDict) - { - TryAdd(dict, pair.Key, pair.Value); - } - if (configurationManager.Configuration.MetadataCountryCode.ToUpper() != "US") - { - foreach (var pair in new USRatingsDictionary()) - { - TryAdd(dict, pair.Key, pair.Value); - } - } - //global values of CS - TryAdd(dict, "CS", 1000); - - TryAdd(dict, "", blockUnrated ? 1000 : 0); - - //and rating reverse lookup dictionary (non-redundant ones) - ratingsStrings.Clear(); - var lastLevel = -10; - ratingsStrings.Add(-1, LocalizedStrings.Instance.GetString("Any")); - foreach (var pair in ratingsDef.RatingsDict.OrderBy(p => p.Value)) - { - if (pair.Value > lastLevel) - { - lastLevel = pair.Value; - TryAdd(ratingsStrings, pair.Value, pair.Key); - } - } - - TryAdd(ratingsStrings, 999, "CS"); - - return dict; - } - - /// <summary> - /// Switches the unrated. - /// </summary> - /// <param name="block">if set to <c>true</c> [block].</param> - public static void SwitchUnrated(bool block) - { - RatingsDict.Remove(""); - RatingsDict.Add("", block ? 1000 : 0); - } - - /// <summary> - /// Levels the specified rating STR. - /// </summary> - /// <param name="ratingStr">The rating STR.</param> - /// <returns>System.Int32.</returns> - public static int Level(string ratingStr) - { - if (ratingStr == null) ratingStr = ""; - if (RatingsDict.ContainsKey(ratingStr)) - return RatingsDict[ratingStr]; - - string stripped = StripCountry(ratingStr); - if (RatingsDict.ContainsKey(stripped)) - return RatingsDict[stripped]; - - return RatingsDict[""]; //return "unknown" level - } - - /// <summary> - /// Strips the country. - /// </summary> - /// <param name="rating">The rating.</param> - /// <returns>System.String.</returns> - private static string StripCountry(string rating) - { - int start = rating.IndexOf('-'); - return start > 0 ? rating.Substring(start + 1) : rating; - } - - /// <summary> - /// Returns a <see cref="System.String" /> that represents this instance. - /// </summary> - /// <param name="level">The level.</param> - /// <returns>A <see cref="System.String" /> that represents this instance.</returns> - public static string ToString(int level) - { - //return the closest one - while (level > 0) - { - if (ratingsStrings.ContainsKey(level)) - return ratingsStrings[level]; - - level--; - } - return ratingsStrings.Values.FirstOrDefault(); //default to first one - } - /// <summary> - /// To the strings. - /// </summary> - /// <returns>List{System.String}.</returns> - public static List<string> ToStrings() - { - //return the whole list of ratings strings - return ratingsStrings.Values.ToList(); - } - - /// <summary> - /// To the values. - /// </summary> - /// <returns>List{System.Int32}.</returns> - public static List<int> ToValues() - { - //return the whole list of ratings values - return ratingsStrings.Keys.ToList(); - } - - //public Microsoft.MediaCenter.UI.Image RatingImage(string rating) - //{ - // return Helper.GetMediaInfoImage("Rated_" + rating); - //} - - - } -} diff --git a/MediaBrowser.Controller/Localization/RatingsDefinition.cs b/MediaBrowser.Controller/Localization/RatingsDefinition.cs deleted file mode 100644 index e5302bee6..000000000 --- a/MediaBrowser.Controller/Localization/RatingsDefinition.cs +++ /dev/null @@ -1,122 +0,0 @@ -using MediaBrowser.Controller.Configuration; -using System; -using System.Collections.Generic; -using System.IO; - -namespace MediaBrowser.Controller.Localization -{ - /// <summary> - /// Class RatingsDefinition - /// </summary> - public class RatingsDefinition - { - /// <summary> - /// Initializes a new instance of the <see cref="RatingsDefinition" /> class. - /// </summary> - /// <param name="file">The file.</param> - /// <param name="configurationManager">The configuration manager.</param> - public RatingsDefinition(string file, IServerConfigurationManager configurationManager) - { - this.file = file; - if (!Load()) - { - Init(configurationManager.Configuration.MetadataCountryCode.ToUpper()); - } - } - - /// <summary> - /// Inits the specified country. - /// </summary> - /// <param name="country">The country.</param> - protected void Init(string country) - { - //intitialze based on country - switch (country) - { - case "US": - RatingsDict = new USRatingsDictionary(); - break; - case "GB": - RatingsDict = new GBRatingsDictionary(); - break; - case "NL": - RatingsDict = new NLRatingsDictionary(); - break; - case "AU": - RatingsDict = new AURatingsDictionary(); - break; - default: - RatingsDict = new USRatingsDictionary(); - break; - } - Save(); - } - - /// <summary> - /// The file - /// </summary> - readonly string file; - - /// <summary> - /// Save to file - /// </summary> - public void Save() - { - // Use simple text serialization - no need for xml - using (var fs = new StreamWriter(file)) - { - foreach (var pair in RatingsDict) - { - fs.WriteLine(pair.Key + "," + pair.Value); - } - } - } - - /// <summary> - /// Load from file - /// </summary> - /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> - protected bool Load() - { - // Read back in our simple serialized format - RatingsDict = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase); - try - { - using (var fs = new StreamReader(file)) - { - while (!fs.EndOfStream) - { - var line = fs.ReadLine() ?? ""; - var values = line.Split(','); - if (values.Length == 2) - { - - int value; - - if (int.TryParse(values[1], out value)) - { - RatingsDict[values[0].Trim()] = value; - } - else - { - //Logger.Error("Invalid line in ratings file " + file + "(" + line + ")"); - } - } - } - } - } - catch - { - // Couldn't load - probably just not there yet - return false; - } - return true; - } - - /// <summary> - /// The ratings dict - /// </summary> - public Dictionary<string, int> RatingsDict = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase); - - } -} diff --git a/MediaBrowser.Controller/Localization/USRatingsDictionary.cs b/MediaBrowser.Controller/Localization/USRatingsDictionary.cs deleted file mode 100644 index 2c7a69841..000000000 --- a/MediaBrowser.Controller/Localization/USRatingsDictionary.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Collections.Generic; - -namespace MediaBrowser.Controller.Localization -{ - /// <summary> - /// Class USRatingsDictionary - /// </summary> - public class USRatingsDictionary : Dictionary<string,int> - { - /// <summary> - /// Initializes a new instance of the <see cref="USRatingsDictionary" /> class. - /// </summary> - public USRatingsDictionary() - { - Add("G", 1); - Add("E", 1); - Add("EC", 1); - Add("TV-G", 1); - Add("TV-Y", 2); - Add("TV-Y7", 3); - Add("TV-Y7-FV", 4); - Add("PG", 5); - Add("TV-PG", 5); - Add("PG-13", 7); - Add("T", 7); - Add("TV-14", 8); - Add("R", 9); - Add("M", 9); - Add("TV-MA", 9); - Add("NC-17", 10); - Add("AO", 15); - Add("RP", 15); - Add("UR", 15); - Add("NR", 15); - Add("X", 15); - Add("XXX", 100); - } - } -} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 1e2a095ce..96989f568 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -131,15 +131,9 @@ <Compile Include="Library\ILibraryManager.cs" /> <Compile Include="Library\IUserManager.cs" /> <Compile Include="Library\Profiler.cs" /> - <Compile Include="Localization\AURatingsDictionary.cs" /> <Compile Include="Localization\BaseStrings.cs" /> - <Compile Include="Localization\GBRatingsDictionary.cs" /> <Compile Include="Localization\LocalizedStringData.cs" /> <Compile Include="Localization\LocalizedStrings.cs" /> - <Compile Include="Localization\NLRatingsDictionary.cs" /> - <Compile Include="Localization\Ratings.cs" /> - <Compile Include="Localization\RatingsDefinition.cs" /> - <Compile Include="Localization\USRatingsDictionary.cs" /> <Compile Include="MediaInfo\FFMpegManager.cs" /> <Compile Include="Persistence\IDisplayPreferencesRepository.cs" /> <Compile Include="Persistence\IItemRepository.cs" /> diff --git a/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs b/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs index 8705d912f..1965531af 100644 --- a/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs +++ b/MediaBrowser.Server.Implementations/Localization/LocalizationManager.cs @@ -1,10 +1,15 @@ -using MediaBrowser.Controller.Localization; +using MediaBrowser.Common.IO; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Localization; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Globalization; using MoreLinq; +using System; using System.Collections.Generic; using System.Globalization; +using System.IO; using System.Linq; +using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.Localization { @@ -14,6 +19,37 @@ namespace MediaBrowser.Server.Implementations.Localization public class LocalizationManager : ILocalizationManager { /// <summary> + /// The _configuration manager + /// </summary> + private readonly IServerConfigurationManager _configurationManager; + + /// <summary> + /// The us culture + /// </summary> + private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); + + /// <summary> + /// Initializes a new instance of the <see cref="LocalizationManager"/> class. + /// </summary> + /// <param name="configurationManager">The configuration manager.</param> + public LocalizationManager(IServerConfigurationManager configurationManager) + { + _configurationManager = configurationManager; + } + + /// <summary> + /// Gets the localization path. + /// </summary> + /// <value>The localization path.</value> + public string LocalizationPath + { + get + { + return Path.Combine(_configurationManager.ApplicationPaths.ProgramDataPath, "localization"); + } + } + + /// <summary> /// Gets the cultures. /// </summary> /// <returns>IEnumerable{CultureDto}.</returns> @@ -56,10 +92,125 @@ namespace MediaBrowser.Server.Implementations.Localization /// <returns>IEnumerable{ParentalRating}.</returns> public IEnumerable<ParentalRating> GetParentalRatings() { - return Ratings.RatingsDict - .Select(k => new ParentalRating {Name = k.Key, Value = k.Value}) - .OrderBy(p => p.Value) - .Where(p => p.Value > 0); + var path = GetRatingsFile(); + + return File.ReadAllLines(path).Select(i => + { + if (!string.IsNullOrWhiteSpace(i)) + { + var parts = i.Split(','); + + if (parts.Length == 2) + { + int value; + + if (int.TryParse(parts[1], NumberStyles.Integer, UsCulture, out value)) + { + return new ParentalRating { Name = parts[0], Value = value }; + } + } + } + + return null; + + }) + .Where(i => i != null) + .OrderBy(p => p.Value); + } + + /// <summary> + /// Gets the ratings file. + /// </summary> + /// <returns>System.String.</returns> + private string GetRatingsFile() + { + var countryCode = _configurationManager.Configuration.MetadataCountryCode; + + if (string.IsNullOrEmpty(countryCode)) + { + countryCode = "us"; + } + + return GetRatingsFile(countryCode).Result ?? GetRatingsFile("us").Result; + } + + /// <summary> + /// Gets the ratings file. + /// </summary> + /// <param name="countryCode">The country code.</param> + /// <returns>Task{System.String}.</returns> + private async Task<string> GetRatingsFile(string countryCode) + { + countryCode = countryCode.ToLower(); + + var path = Path.Combine(LocalizationPath, "ratings-" + countryCode + ".txt"); + + if (!File.Exists(path)) + { + // Extract embedded resource + + var type = GetType(); + var resourcePath = type.Namespace + ".Ratings." + countryCode + ".txt"; + + using (var stream = type.Assembly.GetManifestResourceStream(resourcePath)) + { + if (stream == null) + { + return null; + } + + var parentPath = Path.GetDirectoryName(path); + + if (!Directory.Exists(parentPath)) + { + Directory.CreateDirectory(parentPath); + } + + using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, StreamDefaults.DefaultFileStreamBufferSize, true)) + { + await stream.CopyToAsync(fs).ConfigureAwait(false); + } + } + } + + return path; + } + + /// <summary> + /// Gets the rating level. + /// </summary> + /// <param name="rating">The rating.</param> + /// <returns>System.Int32.</returns> + /// <exception cref="System.ArgumentNullException">rating</exception> + public int? GetRatingLevel(string rating) + { + if (string.IsNullOrEmpty(rating)) + { + throw new ArgumentNullException("rating"); + } + + var ratingsDictionary = GetParentalRatings().ToDictionary(i => i.Name); + + if (ratingsDictionary.ContainsKey(rating)) + return ratingsDictionary[rating].Value; + + var stripped = StripCountry(rating); + + if (ratingsDictionary.ContainsKey(stripped)) + return ratingsDictionary[stripped].Value; + + return null; + } + + /// <summary> + /// Strips the country. + /// </summary> + /// <param name="rating">The rating.</param> + /// <returns>System.String.</returns> + private static string StripCountry(string rating) + { + int start = rating.IndexOf('-'); + return start > 0 ? rating.Substring(start + 1) : rating; } } } diff --git a/MediaBrowser.Server.Implementations/Localization/Ratings/au.txt b/MediaBrowser.Server.Implementations/Localization/Ratings/au.txt new file mode 100644 index 000000000..a68a3f5f3 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Localization/Ratings/au.txt @@ -0,0 +1,6 @@ +AU-G,1 +AU-PG,5 +AU-M,6 +AU-M15+,8 +AU-R18+,9 +AU-X18+,10
\ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Ratings/gb.txt b/MediaBrowser.Server.Implementations/Localization/Ratings/gb.txt new file mode 100644 index 000000000..91d9c87cd --- /dev/null +++ b/MediaBrowser.Server.Implementations/Localization/Ratings/gb.txt @@ -0,0 +1,7 @@ +GB-U,1 +GB-PG,5 +GB-12,6 +GB-12A,7 +GB-15,8 +GB-18,9 +GB-R18,15
\ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Ratings/nl.txt b/MediaBrowser.Server.Implementations/Localization/Ratings/nl.txt new file mode 100644 index 000000000..f69cc2bcc --- /dev/null +++ b/MediaBrowser.Server.Implementations/Localization/Ratings/nl.txt @@ -0,0 +1,6 @@ +NL-AL,1 +NL-MG6,2 +NL-6,3 +NL-9,5 +NL-12,6 +NL-16,8
\ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/Ratings/us.txt b/MediaBrowser.Server.Implementations/Localization/Ratings/us.txt new file mode 100644 index 000000000..3f5311e0e --- /dev/null +++ b/MediaBrowser.Server.Implementations/Localization/Ratings/us.txt @@ -0,0 +1,22 @@ +G,1 +E,1 +EC,1 +TV-G,1 +TV-Y,2 +TV-Y7,3 +TV-Y7-FV,4 +PG,5 +TV-PG,5 +PG-13,7 +T,7 +TV-14,8 +R,9 +M,9 +TV-MA,9 +NC-17,10 +AO,15 +RP,15 +UR,15 +NR,15 +X,15 +XXX,100
\ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 60afc8413..869fc1686 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -204,6 +204,10 @@ </ProjectReference> </ItemGroup> <ItemGroup> + <EmbeddedResource Include="Localization\Ratings\us.txt" /> + <EmbeddedResource Include="Localization\Ratings\au.txt" /> + <EmbeddedResource Include="Localization\Ratings\gb.txt" /> + <EmbeddedResource Include="Localization\Ratings\nl.txt" /> <Content Include="swagger-ui\css\hightlight.default.css"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 80f63df36..583053fa4 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -172,6 +172,8 @@ namespace MediaBrowser.ServerApplication /// <value>The media encoder.</value> private IMediaEncoder MediaEncoder { get; set; } + private ILocalizationManager LocalizationManager { get; set; } + /// <summary> /// Gets or sets the user data repository. /// </summary> @@ -286,8 +288,8 @@ namespace MediaBrowser.ServerApplication ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager); RegisterSingleInstance(ServerManager); - var localizationManager = new LocalizationManager(); - RegisterSingleInstance<ILocalizationManager>(localizationManager); + LocalizationManager = new LocalizationManager(ServerConfigurationManager); + RegisterSingleInstance(LocalizationManager); var displayPreferencesTask = Task.Run(async () => await ConfigureDisplayPreferencesRepositories().ConfigureAwait(false)); var itemsTask = Task.Run(async () => await ConfigureItemRepositories().ConfigureAwait(false)); @@ -367,9 +369,9 @@ namespace MediaBrowser.ServerApplication BaseItem.ConfigurationManager = ServerConfigurationManager; BaseItem.LibraryManager = LibraryManager; BaseItem.ProviderManager = ProviderManager; + BaseItem.LocalizationManager = LocalizationManager; User.XmlSerializer = XmlSerializer; User.UserManager = UserManager; - Ratings.ConfigurationManager = ServerConfigurationManager; LocalizedStrings.ApplicationPaths = ApplicationPaths; } |
