using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; 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); } /// /// Provides a non-blocking method to start a process and wait asynchronously for it to exit /// /// The process. /// Task{System.Boolean}. public static Task RunAsync(this Process process) { var tcs = new TaskCompletionSource(); process.EnableRaisingEvents = true; process.Exited += (sender, args) => tcs.SetResult(true); process.Start(); return tcs.Task; } /// /// 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; } } }