public object LocalFileStorageOperation(FileManagerDirectoryContent args) { if (args.Action == "delete" || args.Action == "rename") { if ((args.TargetPath == null) && (args.Path == "")) { FileManagerResponse response = new FileManagerResponse(); response.Error = new ErrorDetails { Code = "401", Message = "Restricted to modify the root folder." }; return(this.operation.ToCamelCase(response)); } } var serverDrive = GetDrive(); var entityId = Guid.Parse(args.Id); ServerFile serverFile = new ServerFile(); ServerFolder serverFolder = new ServerFolder(); if (args.IsFile) { serverFile = serverFileRepository.GetOne(entityId); } else { serverFolder = serverFolderRepository.GetOne(entityId); } switch (args.Action) { case "read": //reads the file(s) or folder(s) from the given path //update FileAttribute (retrieval) var fileAttribute = fileAttributeRepository.Find(null).Items?.Where(q => q.Name == FileAttributes.RetrievalCount.ToString() && q.ServerFileId == entityId).FirstOrDefault(); fileAttribute.AttributeValue += 1; fileAttributeRepository.Update(fileAttribute); return(this.operation.ToCamelCase(this.operation.GetFiles(args.Path, args.ShowHiddenItems))); case "delete": //deletes the selected file(s) or folder(s) from the given path if (args.IsFile.Equals(true)) { DeleteFile(args.Path); serverDrive.StorageSizeInBytes -= args.Size; } else { //removes the size of folder and any files from server drive property var files = serverFileRepository.Find(null).Items?.Where(q => q.StorageFolderId == entityId); long fileSize = 0; foreach (var file in files) { fileSize += file.SizeInBytes; } serverDrive.StorageSizeInBytes -= args.Size - fileSize; DeleteFolder(args.Path); } serverDriveRepository.Update(serverDrive); webhookPublisher.PublishAsync("Files.DriveUpdated", serverDrive.Id.ToString(), serverDrive.Name); return(this.operation.ToCamelCase(this.operation.Delete(args.Path, args.Names))); case "copy": //copies the selected file(s) or folder(s) from a path and then pastes them into a given target path if (args.IsFile.Equals(true)) { foreach (var file in args.UploadFiles) { var folderId = GetFolderId(args.Path); //add serverFile entity SaveServerFileViewModel viewModel = new SaveServerFileViewModel() { Id = Guid.Parse(args.Id), ContentType = file.ContentType, CorrelationEntity = "", //TODO: update or remove CorrelationEntityId = Guid.Empty, //TODO: update or remove HashCode = null, SizeInBytes = file.Length, StorageFolderId = folderId, StoragePath = args.Path, StorageProvider = "LocalFileStorage", File = file }; SaveFile(viewModel); } } else { //add serverFolder entity AddFolder(args); } AddBytesToServerDrive(serverDrive, args.Size); return(this.operation.ToCamelCase(this.operation.Copy(args.Path, args.TargetPath, args.Names, args.RenameFiles, args.TargetData))); case "move": //cuts the selected file(s) or folder(s) from a path and then pastes them into a given target path if (args.IsFile.Equals(true)) { foreach (var file in args.UploadFiles) { var folderId = GetFolderId(args.Path); UpdateServerFileViewModel viewModel = new UpdateServerFileViewModel() { ContentType = file.ContentType, CorrelationEntity = "", //TODO: remove or update CorrelationEntityId = Guid.Empty, //TODO: remove or update HashCode = null, File = file, SizeInBytes = file.Length, StorageFolderId = folderId, StoragePath = Path.Combine(args.Path, file.FileName), StorageProvider = "LocalFileStorage" }; UpdateFile(viewModel); } } else { //update ServerFolder entity serverFolder.ParentFolderId = Guid.Parse(args.ParentId); serverFolder.StoragePath = args.Path; serverFolderRepository.Update(serverFolder); webhookPublisher.PublishAsync("Files.FolderUpdated", serverFolder.Id.ToString(), serverFolder.Name); } return(this.operation.ToCamelCase(this.operation.Move(args.Path, args.TargetPath, args.Names, args.RenameFiles, args.TargetData))); case "details": //gets the details of the selected file(s) or folder(s) return(this.operation.ToCamelCase(this.operation.Details(args.Path, args.Names, args.Data))); case "create": //creates a new folder in a given path //add ServerFolder entity AddFolder(args); AddBytesToServerDrive(serverDrive, args.Size); return(this.operation.ToCamelCase(this.operation.Create(args.Path, args.Name))); case "search": //gets the list of file(s) or folder(s) from a given path based on the searched key string //add to retrieval count value to file attribute entity for each file //update FileAttribute (retrieval) foreach (var file in args.UploadFiles) { fileAttribute = fileAttributeRepository.Find(null).Items?.Where(q => q.Name == FileAttributes.RetrievalCount.ToString() && q.ServerFileId == entityId).FirstOrDefault(); fileAttribute.AttributeValue += 1; fileAttributeRepository.Update(fileAttribute); } return(this.operation.ToCamelCase(this.operation.Search(args.Path, args.SearchString, args.ShowHiddenItems, args.CaseSensitive))); case "rename": //renames a file or folder if (args.IsFile.Equals(true)) { //update ServerFile entity foreach (var file in args.UploadFiles) { var folderId = GetFolderId(args.Path); UpdateServerFileViewModel viewModel = new UpdateServerFileViewModel() { ContentType = file.ContentType, CorrelationEntity = "", //TODO: remove or update CorrelationEntityId = Guid.Empty, //TODO: remove or update HashCode = null, File = file, SizeInBytes = file.Length, StorageFolderId = folderId, StoragePath = Path.Combine(args.Path, file.FileName), StorageProvider = "LocalFileStorage" }; UpdateFile(viewModel); } } else { //update ServerFolder entity serverFolder.ParentFolderId = Guid.Parse(args.ParentId); serverFolder.StoragePath = args.Path; serverFolderRepository.Update(serverFolder); webhookPublisher.PublishAsync("Files.FolderUpdated", serverFolder.Id.ToString(), serverFolder.Name); } return(this.operation.ToCamelCase(this.operation.Rename(args.Path, args.Name, args.NewName))); } return(null); }
public void UpdateFile(UpdateServerFileViewModel request) { Guid entityId = (Guid)request.Id; var file = request.File; string path = request.StoragePath; Guid? organizationId = organizationManager.GetDefaultOrganization().Id; var serverFile = serverFileRepository.GetOne(entityId); if (serverFile == null) { throw new EntityDoesNotExistException("Server file entity could not be found"); } var hash = GetHash(path); //update FileAttribute entities List <FileAttribute> fileAttributes = new List <FileAttribute>(); var attributes = fileAttributeRepository.Find(null).Items?.Where(q => q.ServerFileId == entityId); if (attributes != null) { if (hash != serverFile.HashCode) { foreach (var attribute in attributes) { attribute.AttributeValue += 1; fileAttributeRepository.Update(attribute); fileAttributes.Add(attribute); } } } else { throw new EntityDoesNotExistException("File attribute entities could not be found for this file"); } //update ServerFile entity properties serverFile.ContentType = file.ContentType; serverFile.CorrelationEntity = request.CorrelationEntity; serverFile.CorrelationEntityId = request.CorrelationEntityId; serverFile.HashCode = hash; serverFile.Name = file.FileName; serverFile.OrganizationId = organizationId; serverFile.SizeInBytes = file.Length; serverFile.StorageFolderId = request.StorageFolderId; serverFile.StoragePath = request.StoragePath; serverFile.StorageProvider = request.StorageProvider; serverFile.FileAttributes = fileAttributes; serverFileRepository.Update(serverFile); webhookPublisher.PublishAsync("Files.FileUpdated", serverFile.Id.ToString(), serverFile.Name); ////update file stored in Server //CheckDirectoryExists(path, organizationId); //path = Path.Combine(path, request.Id.ToString()); //if (file.Length > 0 && hash != serverFile.HashCode) //{ // FileClass.Delete(path); // using (var stream = new FileStream(path, FileMode.Create, FileAccess.Write)) // { // file.CopyTo(stream); // } // ConvertToBinaryObject(path); //} }