Exemplo n.º 1
0
        // this method renames the desired file
        public bool RenameFile(string newName, string fileId)
        {
            DAL.Entities.File file = _database.GetRepository <DAL.Entities.File>().Get(fileId);
            if (file == null)
            {
                throw new StatusCodeException($"The file with ID = {fileId} doesn't exists.", StatusCodes.Status404NotFound);
            }

            string oldPath   = file.Path;
            string extension = ElementHelperClass.DefineFileExtension(oldPath);
            string newPath   = oldPath.Substring(0, oldPath.LastIndexOf('\\') + 1) + newName + extension;

            file.Path = newPath;
            if (!System.IO.File.Exists(newPath))
            {
                System.IO.File.Move(oldPath, newPath);
                _database.GetRepository <DAL.Entities.File>().Update(file);
                _database.Save();
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 2
0
        // this method upload files on the hard drive and saves them in the database
        public async Task <ICollection <ElementVM> > UploadFiles(IFormFileCollection files, FolderVM parentFolder)
        {
            List <ElementVM> elements = new List <ElementVM>();

            foreach (var uploadedFile in files)
            {
                string path = parentFolder.Path + '\\' + uploadedFile.FileName;

                if (!System.IO.File.Exists(path))
                {
                    DAL.Entities.File file = new DAL.Entities.File
                    {
                        Id       = Guid.NewGuid().ToString(),
                        Path     = path,
                        IsShared = parentFolder.IsShared,
                        FolderId = parentFolder.Id
                    };
                    _database.GetRepository <DAL.Entities.File>().Create(file);

                    ElementVM elem = new ElementVM
                    {
                        Id           = file.Id,
                        IsFolder     = false,
                        ElemName     = uploadedFile.FileName,
                        LastModified = DateTime.Now.ToShortDateString(),
                        Type         = ElementHelperClass.DefineFileType(ElementHelperClass.DefineFileExtension(uploadedFile.FileName)),
                        Size         = ElementHelperClass.Recount(new Tuple <double, ElementVM.Unit>(uploadedFile.Length, ElementVM.Unit.B)),
                        IsShared     = file.IsShared
                    };
                    elements.Add(elem);
                }

                using (var fileStream = new FileStream(path, FileMode.Create))
                {
                    await uploadedFile.CopyToAsync(fileStream);
                }
            }
            _database.Save();
            return(elements);
        }
Exemplo n.º 3
0
        // this method return path to current folder as list
        public Stack <FolderShortInfoVM> GetFolderPath(string currFolderId, string userId)
        {
            Stack <FolderShortInfoVM> folderPath = new Stack <FolderShortInfoVM>();

            bool rootFolder = false;

            do
            {
                Folder folder = _database.GetRepository <Folder>().Get(currFolderId);
                if (folder == null)
                {
                    throw new StatusCodeException("Unable to define folder path.", StatusCodes.Status500InternalServerError);
                }

                FolderVM vm = new FolderVM {
                    IsShared = folder.IsShared, OwnerId = folder.OwnerId
                };
                if (CheckAccessToView(vm, userId) || HasSharedChildren(currFolderId))
                {
                    FolderShortInfoVM folderInfo = new FolderShortInfoVM {
                        Id = folder.Id, Name = ElementHelperClass.DefineFileName(folder.Path)
                    };
                    currFolderId = folder.ParentFolderId;
                    if (folder.ParentFolderId == null)
                    {
                        rootFolder      = true;
                        folderInfo.Name = "Your drive";
                    }
                    folderPath.Push(folderInfo);
                }
                else
                {
                    rootFolder = true;
                }
            } while (!rootFolder);

            return(folderPath);
        }
Exemplo n.º 4
0
        // this method returns file by id
        public FileVM GetFileById(string id)
        {
            FileVM file = _mapper.Map <DAL.Entities.File, FileVM>(_database.GetRepository <DAL.Entities.File>().Get(id));

            if (file == null)
            {
                throw new StatusCodeException($"The file with ID = {id} doesn't exists.", StatusCodes.Status404NotFound);
            }

            file.OwnerId = _database.GetRepository <Folder>().Get(file.FolderId).OwnerId;
            file.Name    = ElementHelperClass.DefineFileName(file.Path);

            var    provider = new FileExtensionContentTypeProvider();
            string contentType;

            if (!provider.TryGetContentType(file.Name, out contentType))
            {
                contentType = "application/octet-stream";
            }
            file.ContentType = contentType;

            return(file);
        }
Exemplo n.º 5
0
        // this method returns all folders and files that are contained in the needed folder
        public ICollection <ElementVM> GetElementsFromFolder(FolderVM folderVM, string userId)
        {
            if (folderVM == null)
            {
                throw new StatusCodeException("The needed folder doesn't exists.", StatusCodes.Status404NotFound);
            }

            DirectoryInfo dir = new DirectoryInfo(folderVM.Path);

            FileInfo[]      files;
            DirectoryInfo[] dirs;

            files = dir.GetFiles();
            dirs  = dir.GetDirectories();

            List <ElementVM> models = new List <ElementVM>();

            List <Folder>            childFolders = _database.GetRepository <Folder>().Find(f => f.ParentFolderId == folderVM.Id).ToList();
            List <DAL.Entities.File> childFiles   = _database.GetRepository <DAL.Entities.File>().Find(f => f.FolderId == folderVM.Id).ToList();

            foreach (var elem in dirs)
            {
                Folder folder = childFolders.Find(f => f.Path == elem.FullName);
                if (folder != null)
                {
                    if (CheckAccessToView(new FolderVM {
                        OwnerId = folder.OwnerId, IsShared = folder.IsShared
                    }, userId))
                    {
                        ElementVM model = new ElementVM
                        {
                            Id           = folder.Id,
                            IsFolder     = true,
                            Type         = ElementVM.FileType.Folder,
                            ElemName     = elem.Name,
                            LastModified = elem.LastWriteTime.ToShortDateString(),
                            Size         = null,
                            IsShared     = folder.IsShared
                        };

                        models.Add(model);
                    }
                }
            }

            foreach (var elem in files)
            {
                DAL.Entities.File file = childFiles.Find(f => f.Path == elem.FullName);
                if (file != null)
                {
                    FileVM vm = new FileVM {
                        IsShared = file.IsShared, OwnerId = _database.GetRepository <Folder>().Get(file.FolderId).OwnerId
                    };
                    if (CheckAccessToView(vm, userId))
                    {
                        // for a more convenient display of file size, call the conversion function
                        Tuple <double, ElementVM.Unit> size = new Tuple <double, ElementVM.Unit>(elem.Length, ElementVM.Unit.B);
                        size = ElementHelperClass.Recount(size);
                        ElementVM.FileType type = ElementHelperClass.DefineFileType(elem.Extension);

                        ElementVM model = new ElementVM
                        {
                            Id           = childFiles.Find(f => f.Path == elem.FullName).Id,
                            IsFolder     = false,
                            Type         = type,
                            ElemName     = elem.Name,
                            LastModified = elem.LastWriteTime.ToShortDateString(),
                            Size         = size,
                            IsShared     = file.IsShared
                        };
                        models.Add(model);
                    }
                }
            }

            return(models);
        }