Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public ServerFiles(ServerFolder folder)
 {
     ServerConfigFile = Path.Combine(FileName.Server.Config);
 }