using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace MediaBrowser.Common.Extensions
{
///
/// Class BaseExtensions
///
public static class BaseExtensions
{
///
/// Tries the add.
///
/// The type of the T key.
/// The type of the T value.
/// The dictionary.
/// The key.
/// The value.
/// true if XXXX, false otherwise
public static bool TryAdd(this Dictionary dictionary, TKey key, TValue value)
{
if (dictionary.ContainsKey(key))
{
return false;
}
dictionary.Add(key, value);
return true;
}
///
/// Provides an additional overload for string.split
///
/// The val.
/// The separator.
/// The options.
/// System.String[][].
public static string[] Split(this string val, char separator, StringSplitOptions options)
{
return val.Split(new[] { separator }, options);
}
///
/// Shuffles an IEnumerable
///
///
/// The list.
/// IEnumerable{``0}.
public static IEnumerable Shuffle(this IEnumerable list)
{
return list.OrderBy(x => Guid.NewGuid());
}
///
/// Gets the M d5.
///
/// The STR.
/// Guid.
public static Guid GetMD5(this string str)
{
using (var provider = new MD5CryptoServiceProvider())
{
return new Guid(provider.ComputeHash(Encoding.Unicode.GetBytes(str)));
}
}
///
/// Gets the MB id.
///
/// The STR.
/// A type.
/// Guid.
/// aType
public static Guid GetMBId(this string str, Type aType)
{
if (aType == null)
{
throw new ArgumentNullException("aType");
}
return (aType.FullName + str.ToLower()).GetMD5();
}
///
/// Helper method for Dictionaries since they throw on not-found keys
///
///
///
/// The dictionary.
/// The key.
/// The default value.
/// ``1.
public static U GetValueOrDefault(this Dictionary dictionary, T key, U defaultValue)
{
U val;
if (!dictionary.TryGetValue(key, out val))
{
val = defaultValue;
}
return val;
}
///
/// Gets the attribute value.
///
/// The STR.
/// The attrib.
/// System.String.
/// attrib
public static string GetAttributeValue(this string str, string attrib)
{
if (attrib == null)
{
throw new ArgumentNullException("attrib");
}
string srch = "[" + attrib + "=";
int start = str.IndexOf(srch, StringComparison.OrdinalIgnoreCase);
if (start > -1)
{
start += srch.Length;
int end = str.IndexOf(']', start);
return str.Substring(start, end - start);
}
return null;
}
}
}