private static IReadOnlyList <T> Sort <T>( IEnumerable <T> list, StorageItemSortPreference sortPreference, Func <T, string> getName, Func <T, bool> isDirectory ) { var items = list.ToList(); items.Sort((left, right) => { if (sortPreference == StorageItemSortPreference.None || isDirectory(left) == isDirectory(right)) { return(NaturalOrder.Comparer.Compare(getName(left), getName(right))); } if (isDirectory(left)) { return(sortPreference == StorageItemSortPreference.DirectoriesFirst ? LeftFirst : RightFirst); } else { return(sortPreference == StorageItemSortPreference.DirectoriesFirst ? RightFirst : LeftFirst); } }); return(items); }
public static IReadOnlyList <Win32Interop.IO.FileOrDirectoryInfo> InNaturalOrder( this IEnumerable <Win32Interop.IO.FileOrDirectoryInfo> list, StorageItemSortPreference sortPreference = StorageItemSortPreference.None ) { return(Sort(list, sortPreference, info => info.Name, info => info.ItemType == Win32Interop.IO.FileOrDirectoryType.Directory)); }
public static IReadOnlyList <T> InNaturalOrder <T>( this IEnumerable <T> list, StorageItemSortPreference sortPreference = StorageItemSortPreference.None ) where T : IStorageItem { return(Sort(list, sortPreference, info => info.Name, info => info.IsOfType(StorageItemTypes.Folder))); }
public static async Task <IReadOnlyList <IStorageItem> > GetItemsInNaturalOrderAsync( this StorageFolder item, StorageItemSortPreference sortPreference = StorageItemSortPreference.None ) { return(InNaturalOrder(await item.GetItemsAsync(), sortPreference)); }