using System.Collections.Generic; using System; using System.Linq; namespace Cryville.Crtr.Browsing.UI { internal static class MetaPropertyExtensions { public static IEnumerable> EnumerateProperty(this MetaProperty prop, bool shortDistinct = false) { if (prop.Values.ContainsKey("distinct-primary") && shortDistinct) { yield return new KeyValuePair(prop.Name, prop.Values["distinct-primary"]); if (prop.Values.ContainsKey("distinct-secondary")) { yield return new KeyValuePair(prop.Name, prop.Values["distinct-secondary"]); if (prop.Values.ContainsKey("distinct-tertiary")) { yield return new KeyValuePair(prop.Name, prop.Values["distinct-tertiary"]); } } } else yield return new KeyValuePair(prop.Name, prop.MainValue); } public static IEnumerable> EnumerateProperties(this IResourceMeta meta, bool shortDistinct = false) { foreach (var prop in meta.Properties) { foreach (var item in EnumerateProperty(prop, shortDistinct)) yield return item; } } public static IEnumerable> EnumerateBasicProperties(this IResourceMeta meta, bool shortDistinct = false) { foreach (var prop in EnumerateProperties(meta, shortDistinct)) { if (prop.Value is string || prop.Value is IFormattable) { yield return new KeyValuePair(prop.Key, prop.Value); } } } public static IEnumerable> EnumerateProperties(this IResourceMeta meta, bool shortDistinct = false) { return EnumerateProperties(meta, shortDistinct) .Where(prop => prop.Value is T) .Select(prop => new KeyValuePair(prop.Key, (T)prop.Value)); } } }