public DropBoxLink(DropBoxLinkParams dropBoxLinkParams, IEventAggregator aggregator) { this.aggregator = aggregator; var client = new DropboxClientFactory(dropBoxLinkParams.AccessToken).GetInstance(); var localFolderRoot = new LocalFolderRoot(dropBoxLinkParams.LocalFolderPath); this.cloudStorage = new DropBoxCloudStorage(client, dropBoxLinkParams.Card, dropBoxLinkParams.PrivateKeyPassword); this.localFolder = new LocalFolder(localFolderRoot, "Source"); this.localFolderWatcher = new LocalFolderWatcher(this.localFolder); this.serverFolder = new ServerFolder(); this.serverFolderWatcher = new DropboxFolderWatcher(client, this.serverFolder); this.operationsFactory = new OperationsFactory(this.cloudStorage, this.localFolder); this.serverFolder.Subscribe(this); this.localFolder.Subscribe(this); }
public void DeleteFolder(string path) { ServerFolder folder = serverFolderRepository.Find(null).Items?.Where(q => q.StoragePath == path).FirstOrDefault(); serverFolderRepository.Delete((Guid)folder.Id); webhookPublisher.PublishAsync("Files.FolderDeleted", folder.Id.ToString(), folder.Name); //delete any files that are in the folder var files = serverFileRepository.Find(null).Items?.Where(q => q.StorageFolderId == folder.Id); if (files != null) { foreach (var file in files) { DeleteFile(file.StoragePath); webhookPublisher.PublishAsync("Files.FileDeleted", file.Id.ToString(), file.Name); } } }
public FileFolderViewModel Map(ServerFolder entity, string path, bool hasChild) { FileFolderViewModel fileFolderView = new FileFolderViewModel { Id = entity.Id, Name = entity.Name, ContentType = "Folder", CreatedBy = entity.CreatedBy, CreatedOn = entity.CreatedOn, UpdatedOn = entity.UpdatedOn, FullStoragePath = entity.StoragePath, HasChild = hasChild, IsFile = false, ParentId = entity.ParentFolderId, StoragePath = path, Size = entity.SizeInBytes, StorageDriveId = entity.StorageDriveId }; return(fileFolderView); }
public void AddFolder(FileManagerDirectoryContent args) { string path = Path.Combine(args.Path, args.NewName); var folderId = GetFolderId(path); var id = new Guid(); ServerFolder serverFolder = new ServerFolder() { Id = id, ParentFolderId = folderId, CreatedBy = httpContextAccessor.HttpContext.User.Identity.Name, CreatedOn = DateTime.UtcNow, Name = args.Name, OrganizationId = organizationManager.GetDefaultOrganization().Id, SizeInBytes = args.Size, StorageDriveId = GetDrive().Id, StoragePath = path }; serverFolderRepository.Add(serverFolder); webhookPublisher.PublishAsync("Files.NewFolderCreated", serverFolder.Id.ToString(), serverFolder.Name); }
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 ServerFiles(ServerFolder folder) { ServerConfigFile = Path.Combine(FileName.Server.Config); }