public async Task <JsonResult> MakeDirAsync(FullPath path, string name, IEnumerable <string> dirs) { var response = new AddResponseModel(); if (!string.IsNullOrEmpty(name)) { var newDir = new FileSystemDirectory(Path.Combine(path.Directory.FullName, name)); await newDir.CreateAsync(); response.Added.Add(await BaseModel.CreateAsync(newDir, path.RootVolume)); } foreach (string dir in dirs) { string dirName = dir.StartsWith("/") ? dir.Substring(1) : dir; var newDir = new FileSystemDirectory(Path.Combine(path.Directory.FullName, dirName)); await newDir.CreateAsync(); response.Added.Add(await BaseModel.CreateAsync(newDir, path.RootVolume)); string relativePath = newDir.FullName.Substring(path.RootVolume.RootDirectory.Length); response.Hashes.Add($"/{dirName}", path.RootVolume.VolumeId + HttpEncoder.EncodePath(relativePath)); } return(await Json(response)); }
public async Task <JsonResult> MakeDirAsync(FullPath path, string name) { var newDir = new FileSystemDirectory(Path.Combine(path.Directory.FullName, name)); await newDir.CreateAsync(); var response = new AddResponseModel(); response.Added.Add(await BaseModel.Create(this, newDir, path.RootVolume)); return(await Json(response)); }
public async Task <JsonResult> ExtractAsync(FullPath fullPath, bool newFolder) { var response = new AddResponseModel(); if (fullPath.IsDirectory || fullPath.File.Extension.ToLower() != ".zip") { throw new NotSupportedException("Only .zip files are currently supported."); } string rootPath = fullPath.File.Directory.FullName; if (newFolder) { rootPath = Path.Combine(rootPath, Path.GetFileNameWithoutExtension(fullPath.File.Name)); var rootDir = new FileSystemDirectory(rootPath); if (!await rootDir.ExistsAsync) { await rootDir.CreateAsync(); } response.Added.Add(await BaseModel.CreateAsync(rootDir, fullPath.RootVolume)); } using (var archive = ZipFile.OpenRead(fullPath.File.FullName)) { string separator = Path.DirectorySeparatorChar.ToString(); foreach (ZipArchiveEntry entry in archive.Entries) { try { //Replce zip entry path separator by system path separator string file = Path.Combine(rootPath, entry.FullName) .Replace("/", separator).Replace("\\", separator); if (file.EndsWith(separator)) //directory { var dir = new FileSystemDirectory(file); if (!await dir.ExistsAsync) { await dir.CreateAsync(); } if (!newFolder) { response.Added.Add(await BaseModel.CreateAsync(dir, fullPath.RootVolume)); } } else { entry.ExtractToFile(file, true); if (!newFolder) { response.Added.Add(await BaseModel.CreateAsync(new FileSystemFile(file), fullPath.RootVolume)); } } } catch //(Exception ex) { //throw new Exception(entry.FullName, ex); } } } return(await Json(response)); }