38 lines
1.8 KiB
C#
38 lines
1.8 KiB
C#
using System.Collections.Generic;
|
|
using System;
|
|
using System.Linq;
|
|
|
|
namespace Cryville.Crtr.Browsing.UI {
|
|
internal static class MetaPropertyExtensions {
|
|
public static IEnumerable<KeyValuePair<string, object>> EnumerateProperty(this MetaProperty prop, bool shortDistinct = false) {
|
|
if (prop.Values.ContainsKey("distinct-primary") && shortDistinct) {
|
|
yield return new KeyValuePair<string, object>(prop.Name, prop.Values["distinct-primary"]);
|
|
if (prop.Values.ContainsKey("distinct-secondary")) {
|
|
yield return new KeyValuePair<string, object>(prop.Name, prop.Values["distinct-secondary"]);
|
|
if (prop.Values.ContainsKey("distinct-tertiary")) {
|
|
yield return new KeyValuePair<string, object>(prop.Name, prop.Values["distinct-tertiary"]);
|
|
}
|
|
}
|
|
}
|
|
else yield return new KeyValuePair<string, object>(prop.Name, prop.MainValue);
|
|
}
|
|
public static IEnumerable<KeyValuePair<string, object>> 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<KeyValuePair<string, object>> 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<string, object>(prop.Key, prop.Value);
|
|
}
|
|
}
|
|
}
|
|
public static IEnumerable<KeyValuePair<string, T>> EnumerateProperties<T>(this IResourceMeta meta, bool shortDistinct = false) {
|
|
return EnumerateProperties(meta, shortDistinct)
|
|
.Where(prop => prop.Value is T)
|
|
.Select(prop => new KeyValuePair<string, T>(prop.Key, (T)prop.Value));
|
|
}
|
|
}
|
|
}
|