public static async Task UpdateAllSubNodeAsync(this TreeViewNode Node) { if (Node == null) { throw new ArgumentNullException(nameof(Node), "Node could not be null"); } if (Node.Children.Count > 0) { List <string> FolderList = WIN_Native_API.GetStorageItemsAndReturnPath((Node.Content as TreeViewNodeContent).Path, SettingControl.IsDisplayHiddenItem, ItemFilters.Folder); List <string> PathList = Node.Children.Select((Item) => (Item.Content as TreeViewNodeContent).Path).ToList(); List <string> AddList = FolderList.Except(PathList).ToList(); List <string> RemoveList = PathList.Except(FolderList).ToList(); foreach (string AddPath in AddList) { await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () => { Node.Children.Add(new TreeViewNode { Content = new TreeViewNodeContent(AddPath), HasUnrealizedChildren = WIN_Native_API.CheckContainsAnyItem(AddPath, ItemFilters.Folder), IsExpanded = false }); }); } foreach (string RemovePath in RemoveList) { await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () => { if (Node.Children.Where((Item) => Item.Content is TreeViewNodeContent).FirstOrDefault((Item) => (Item.Content as TreeViewNodeContent).Path.Equals(RemovePath, StringComparison.OrdinalIgnoreCase)) is TreeViewNode RemoveNode) { Node.Children.Remove(RemoveNode); } }); } foreach (TreeViewNode SubNode in Node.Children) { await SubNode.UpdateAllSubNodeAsync().ConfigureAwait(true); } } else { Node.HasUnrealizedChildren = WIN_Native_API.CheckContainsAnyItem((Node.Content as TreeViewNodeContent).Path, ItemFilters.Folder); } }
public async Task <bool> CheckContainsAnyItemAsync(bool IncludeHiddenItem = false, bool IncludeSystemItem = false, ItemFilters Filter = ItemFilters.File | ItemFilters.Folder) { if (WIN_Native_API.CheckLocationAvailability(Path)) { return(await Task.Run(() => { return WIN_Native_API.CheckContainsAnyItem(Path, IncludeHiddenItem, IncludeSystemItem, Filter); })); } else { LogTracer.Log($"Native API could not found the path: \"{Path}\", fall back to UWP storage API"); try { if (await GetStorageItemAsync() is StorageFolder Folder) { if (Filter.HasFlag(ItemFilters.File)) { return((await Folder.GetFilesAsync(CommonFileQuery.DefaultQuery, 0, 1)).Any()); } if (Filter.HasFlag(ItemFilters.Folder)) { return((await Folder.GetFoldersAsync(CommonFolderQuery.DefaultQuery, 0, 1)).Any()); } } return(false); } catch (Exception ex) { LogTracer.Log(ex, $"{nameof(CheckContainsAnyItemAsync)} failed for uwp API"); return(false); } } }