private async Task RestoreFromDto(IList <FileSystemItemDto> dtos, Guid parentKey) { FileSystemItem parentItem; if (!FileSystemItems.TryGetValue(parentKey, out parentItem)) { throw new InvalidOperationException($"Parent folder {parentKey} not found."); } var parentFolder = parentItem as FileSystemFolder; if (parentFolder == null) { throw new InvalidOperationException($"Key {parentKey} does not refer to a folder."); } foreach (var item in dtos.Where(d => d.ParentKey == parentKey)) { switch (item.Kind) { case FileSystemItemKind.Folder: AddFileSystemItem(new FileSystemFolder(item.Key, item.Name, parentFolder)); await RestoreFromDto(dtos, item.Key); break; case FileSystemItemKind.File: AddFileSystemItem(new FileSystemFile(item.Key, item.Name, parentFolder)); break; default: throw new InvalidOperationException("Expected files and folders only"); } } }
public async Task <IFileSystemItem> GetItem(Guid key) { await EnsureInitialized(); FileSystemItem item; if (FileSystemItems.TryGetValue(key, out item)) { return(item); } return(null); }