public static IEnumerable<object> GroupPresets(IEnumerable<ISavedPresetEntry> entries, string mainDirectory) {
var list = entries.Select(x => new {
Entry = x,
Directory = GetHead(x.Filename, mainDirectory)
}).ToList();
foreach (var directory in list.Select(x => x.Directory).Where(x => x != mainDirectory).Distinct()) {
var directoryValue = directory;
var subList = list.Where(x => x.Directory == directoryValue).Select(x => x.Entry).ToList();
if (subList.Count > 1){
yield return new HierarchicalGroup(Path.GetFileName(directory), GroupPresets(subList, directory));
} else if (list.Any()) {
subList[0].SetParent(mainDirectory);
yield return subList[0];
}
}
foreach (var entry in list.Where(x => x.Directory == mainDirectory)) {
entry.Entry.SetParent(mainDirectory);
yield return entry.Entry;
}
}