using MediaBrowser.Common.Extensions;
using MediaBrowser.Model.Logging;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace MediaBrowser.Controller.Localization
{
///
/// Class Ratings
///
public static class Ratings
{
static internal ILogger Logger { get; set; }
///
/// The ratings def
///
private static RatingsDefinition ratingsDef;
///
/// The _ratings dict
///
private static Dictionary _ratingsDict;
///
/// Gets the ratings dict.
///
/// The ratings dict.
public static Dictionary RatingsDict
{
get { return _ratingsDict ?? (_ratingsDict = Initialize(false)); }
}
///
/// The ratings strings
///
private static readonly Dictionary ratingsStrings = new Dictionary();
///
/// Initializes the specified block unrated.
///
/// if set to true [block unrated].
/// Dictionary{System.StringSystem.Int32}.
public static Dictionary Initialize(bool blockUnrated)
{
//build our ratings dictionary from the combined local one and us one
ratingsDef = new RatingsDefinition(Path.Combine(Kernel.Instance.ApplicationPaths.LocalizationPath, "Ratings-" + Kernel.Instance.Configuration.MetadataCountryCode + ".txt"), Logger);
//global value of None
var dict = new Dictionary {{"None", -1}};
foreach (var pair in ratingsDef.RatingsDict)
{
dict.TryAdd(pair.Key, pair.Value);
}
if (Kernel.Instance.Configuration.MetadataCountryCode.ToUpper() != "US")
{
foreach (var pair in new USRatingsDictionary())
{
dict.TryAdd(pair.Key, pair.Value);
}
}
//global values of CS
dict.TryAdd("CS", 1000);
dict.TryAdd("", 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;
ratingsStrings.TryAdd(pair.Value, pair.Key);
}
}
ratingsStrings.TryAdd(999, "CS");
return dict;
}
///
/// Switches the unrated.
///
/// if set to true [block].
public static void SwitchUnrated(bool block)
{
RatingsDict.Remove("");
RatingsDict.Add("", block ? 1000 : 0);
}
///
/// Levels the specified rating STR.
///
/// The rating STR.
/// System.Int32.
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
}
///
/// Strips the country.
///
/// The rating.
/// System.String.
private static string StripCountry(string rating)
{
int start = rating.IndexOf('-');
return start > 0 ? rating.Substring(start + 1) : rating;
}
///
/// Returns a that represents this instance.
///
/// The level.
/// A that represents this instance.
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
}
///
/// To the strings.
///
/// List{System.String}.
public static List ToStrings()
{
//return the whole list of ratings strings
return ratingsStrings.Values.ToList();
}
///
/// To the values.
///
/// List{System.Int32}.
public static List 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);
//}
}
}