private void AddPathsToFolder(IEnumerable <string> paths, RemoteFolder rootFolder) { var spitPaths = paths.Where(p => !string.IsNullOrEmpty(p)) .Select(p => p.Split(new[] { '/' }, 2)); var pathLookup = spitPaths.GroupBy(p => p[0], p => p.Length > 1 ? p[1]: null); foreach (var path in pathLookup) { var key = path.Key; var shortedPaths = path.ToArray(); if (shortedPaths.Length == 1 && string.IsNullOrEmpty(shortedPaths[0])) { rootFolder.Files.Add(new RemotePath { Name = key, ParentFolder = rootFolder }); continue; } var subfolder = rootFolder.SubFolders.FirstOrDefault(f => f.Name == key); if (subfolder == null) { subfolder = new RemoteFolder { Name = key, ParentFolder = rootFolder }; rootFolder.SubFolders.Add(subfolder); } AddPathsToFolder(shortedPaths, subfolder); } }
private async void UpdateFiles() { filesRootFolder = new RemoteFolder { Name = "root" }; var filePaths = await api.GetFiles(); AddPathsToFolder(filePaths, filesRootFolder); OnPropertyChanged(nameof(FilesRootFolder)); }