public AssetViewModel GetAssetDetails(AssetViewModel assetView) { assetView.AgentName = _agentRepository.Find(null, a => a.Id == assetView.AgentId).Items?.FirstOrDefault()?.Name; assetView.FileName = _serverFileRepository.Find(null, f => f.Id == assetView.FileId).Items?.FirstOrDefault()?.Name; return(assetView); }
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 PaginatedList <FileFolderViewModel> FindAllFilesFoldersView(Guid?driveId, Predicate <FileFolderViewModel> predicate = null, string sortColumn = "", OrderByDirectionType direction = OrderByDirectionType.Ascending, int skip = 0, int take = 100) { PaginatedList <FileFolderViewModel> paginatedList = new PaginatedList <FileFolderViewModel>(); var folderItemsList = base.Find(null, j => j.IsDeleted == false && j.StorageDriveId == driveId); if (folderItemsList != null && folderItemsList.Items != null && folderItemsList.Items.Count > 0) { var folderItemRecord = from a in folderItemsList.Items join b in dbContext.ServerFolders on a.ParentFolderId equals b.Id into table1 from b in table1.DefaultIfEmpty() join c in dbContext.ServerFolders on a.Id equals c.ParentFolderId into table2 from c in table1.DefaultIfEmpty() join d in dbContext.ServerDrives on a.StorageDriveId equals d.Id into table3 from d in table3.DefaultIfEmpty() select new FileFolderViewModel { Name = a?.Name, Id = a?.Id, ContentType = "Folder", CreatedBy = a?.CreatedBy, CreatedOn = a?.CreatedOn, FullStoragePath = a?.StoragePath, HasChild = c?.ParentFolderId != null ? true : false, IsFile = false, ParentId = a?.ParentFolderId, StoragePath = b?.StoragePath != null ? b?.StoragePath : d?.Name, Size = a?.SizeInBytes, StorageDriveId = a?.StorageDriveId }; if (!string.IsNullOrWhiteSpace(sortColumn)) { if (direction == OrderByDirectionType.Ascending) { folderItemRecord = folderItemRecord.OrderBy(j => j.GetType().GetProperty(sortColumn).GetValue(j)).ToList(); } else if (direction == OrderByDirectionType.Descending) { folderItemRecord = folderItemRecord.OrderByDescending(j => j.GetType().GetProperty(sortColumn).GetValue(j)).ToList(); } } var fileItemsList = _serverFileRepository.Find(null, j => j.IsDeleted == false && j.ServerDriveId == driveId); if (fileItemsList != null && fileItemsList.Items != null && fileItemsList.Items.Count > 0) { var fileItemRecord = from a in fileItemsList.Items join b in dbContext.ServerFolders on a.StorageFolderId equals b.Id into table1 from b in table1.DefaultIfEmpty() join c in dbContext.ServerDrives on a.ServerDriveId equals c.Id into table2 from c in table2.DefaultIfEmpty() select new FileFolderViewModel { Name = a?.Name, Id = a?.Id, ContentType = a?.ContentType, CreatedBy = a?.CreatedBy, CreatedOn = a?.CreatedOn, FullStoragePath = a?.StoragePath, HasChild = false, IsFile = true, ParentId = a?.StorageFolderId, StoragePath = b?.StoragePath != null ? b?.StoragePath : c?.Name, Size = a?.SizeInBytes, StorageDriveId = a?.ServerDriveId }; if (!string.IsNullOrWhiteSpace(sortColumn)) { if (direction == OrderByDirectionType.Ascending) { fileItemRecord = fileItemRecord.OrderBy(j => j.GetType().GetProperty(sortColumn).GetValue(j)).ToList(); } else if (direction == OrderByDirectionType.Descending) { fileItemRecord = fileItemRecord.OrderByDescending(j => j.GetType().GetProperty(sortColumn).GetValue(j)).ToList(); } } List <FileFolderViewModel> filterRecord = null; List <FileFolderViewModel> itemRecord = null; if (folderItemRecord != null || folderItemRecord.Any()) { itemRecord = folderItemRecord.ToList(); itemRecord.AddRange(fileItemRecord); } else { itemRecord = fileItemRecord.ToList(); } if (predicate != null) { filterRecord = itemRecord.ToList().FindAll(predicate); } else { filterRecord = itemRecord.ToList(); } paginatedList.Items = filterRecord.Skip(skip).Take(take).ToList(); paginatedList.Completed = fileItemsList.Completed; paginatedList.Impediments = fileItemsList.Impediments; paginatedList.PageNumber = fileItemsList.PageNumber; paginatedList.PageSize = fileItemsList.PageSize; paginatedList.ParentId = fileItemsList.ParentId; paginatedList.Started = fileItemsList.Started; paginatedList.TotalCount = filterRecord?.Count; } else { List <FileFolderViewModel> filterRecord = null; if (predicate != null) { filterRecord = folderItemRecord.ToList().FindAll(predicate); } else { filterRecord = folderItemRecord.ToList(); } paginatedList.Items = filterRecord.Skip(skip).Take(take).ToList(); paginatedList.Completed = folderItemsList.Completed; paginatedList.Impediments = folderItemsList.Impediments; paginatedList.PageNumber = folderItemsList.PageNumber; paginatedList.PageSize = folderItemsList.PageSize; paginatedList.ParentId = folderItemsList.ParentId; paginatedList.Started = folderItemsList.Started; paginatedList.TotalCount = filterRecord?.Count; } } return(paginatedList); }