using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text.RegularExpressions; using Kyoo.Models; namespace Kyoo { public interface IMergable { public T Merge(T other); } public static class Utility { public static string ToSlug(string name) { if (name == null) return null; //First to lower case name = name.ToLowerInvariant(); //Remove all accents //var bytes = Encoding.GetEncoding("Cyrillic").GetBytes(showTitle); //showTitle = Encoding.ASCII.GetString(bytes); //Replace spaces name = Regex.Replace(name, @"\s", "-", RegexOptions.Compiled); //Remove invalid chars name = Regex.Replace(name, @"[^\w\s\p{Pd}]", "", RegexOptions.Compiled); //Trim dashes from end name = name.Trim('-', '_'); //Replace double occurences of - or \_ name = Regex.Replace(name, @"([-_]){2,}", "$1", RegexOptions.Compiled); return name; } public static void SetImage(Show show, string imgUrl, ImageType type) { switch(type) { case ImageType.Poster: show.ImgPrimary = imgUrl; break; case ImageType.Thumbnail: show.ImgThumb = imgUrl; break; case ImageType.Logo: show.ImgLogo = imgUrl; break; case ImageType.Background: show.ImgBackdrop = imgUrl; break; } } public static IEnumerable MergeLists(IEnumerable first, IEnumerable second, Func isEqual = null) { if (first == null) return second; if (second == null) return first; List list = first.ToList(); if (isEqual == null) isEqual = (x, y) => x.Equals(y); return list.Concat(second.Where(x => !list.Any(y => isEqual(x, y)))); } public static T Complete(T first, T second) { Type type = typeof(T); foreach (PropertyInfo property in type.GetProperties()) { MethodInfo getter = property.GetGetMethod(); MethodInfo setter = property.GetSetMethod(); object value = getter != null ? getter.Invoke(second, null) : property.GetValue(second); object defaultValue = property.PropertyType.IsValueType ? Activator.CreateInstance(property.PropertyType) : null; if (value?.Equals(defaultValue) == false) { if (setter != null) setter.Invoke(first, new[] {value}); else property.SetValue(second, value); } } return first; } } }