Exemple #1
0
        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);
        }
Exemple #2
0
 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));
 }
Exemple #3
0
 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)));
 }
Exemple #4
0
 public static async Task <IReadOnlyList <IStorageItem> > GetItemsInNaturalOrderAsync(
     this StorageFolder item, StorageItemSortPreference sortPreference = StorageItemSortPreference.None
     )
 {
     return(InNaturalOrder(await item.GetItemsAsync(), sortPreference));
 }