Esempio n. 1
0
        private bool IsDirectSubfolder(PhotographerFolder rootFolder, PhotographerFolder folder)
        {
            if (rootFolder.Path.Length >= folder.Path.Length)
            {
                return(false);
            }

            int slashIndex = folder.Path.LastIndexOf('/');

            if (slashIndex == 0)
            {
                slashIndex = 1;
            }

            return(rootFolder.Path == folder.Path.Substring(0, slashIndex));
        }
Esempio n. 2
0
        private bool IsSubfolder(PhotographerFolder rootFolder, PhotographerFolder folder)
        {
            if (rootFolder.Path.Length >= folder.Path.Length)
            {
                return(false);
            }
            bool issub;

            if (rootFolder.Path.Length == 1)
            {
                issub = folder.Path[0] == '/';
            }
            else
            {
                issub = folder.Path[rootFolder.Path.Length] == '/';
            }
            return(rootFolder.Path == folder.Path.Substring(0, rootFolder.Path.Length) && issub);
        }
Esempio n. 3
0
        private void ManageChangedFile(PhotographerFolder folder, Metadata deletedItem, ListFolderResult changesInFolder)
        {
            var dbFile        = GetFile(folder, deletedItem.AsDeleted.PathLower);
            var fileDropboxId = dbFile.DropboxFileId;
            var newFiles      = changesInFolder.Entries.Where(item => item.IsFile);

            if (newFiles.Count() == 0)
            {
                // this means that the file was just deleted
                // need to delete file with "dropbox id" = fileDropboxId from db !!!
                Db.PhotographerFiles.Remove(dbFile);
                Db.SaveChanges();

                RedundantMetadata.Add(deletedItem);
                //changesInFolder.Entries.Remove(deletedItem);
                // return or break, dunno
                return;
            }
            var existingFile = newFiles.SingleOrDefault(f => f.AsFile.Id == fileDropboxId);

            if (existingFile != null) // it is a renamed file
            {
                // rename file with "dropbox id" = fileDropboxId in folder.PhotographerFiles collection
                dbFile.Name = existingFile.Name;
                dbFile.Path = existingFile.PathLower;
                Db.SaveChanges();

                // removing file from changesInFolder
                RedundantMetadata.AddRange(new List <Metadata> {
                    deletedItem, existingFile
                });
                //changesInFolder.Entries.Remove(deletedItem);
                //changesInFolder.Entries.Remove(existingFile);
            }
            else // it is a deleted file
            {
                // need to delete file with "dropbox id" = fileDropboxId from db !!!
                Db.PhotographerFiles.Remove(dbFile);
                Db.SaveChanges();

                RedundantMetadata.Add(deletedItem);
                //changesInFolder.Entries.Remove(deletedItem);
            }
        }
Esempio n. 4
0
        private async Task AddFileFromDropboxToDB(Metadata file, PhotographerFolder destFolder)
        {
            long fileSize        = Convert.ToInt64(file.AsFile.Size);
            var  thumbnailResult = await Dbx.Files.GetThumbnailAsync(file.PathLower);

            var imageByteArr = await thumbnailResult.GetContentAsByteArrayAsync();

            var photoFile = new PhotographerFile
            {
                Name                 = file.Name,
                Size                 = fileSize,
                Depth                = destFolder.Depth,
                Path                 = file.PathLower,
                ThumbnailImage       = imageByteArr,
                DropboxFileId        = file.AsFile.Id,
                PhotographerFolderId = destFolder.PhotographerFolderId,
                PhotographerFolder   = destFolder
            };

            destFolder.PhotographerFiles.Add(photoFile);
            Db.SaveChanges();
        }
Esempio n. 5
0
        private async Task TraverseRecursive(DropboxClient dbx, string filepath, DropboxFolder folder, ApplicationUser currUser)
        {
            var list = await dbx.Files.ListFolderAsync(filepath);

            string dropboxFolderId;

            if (filepath == string.Empty)
            {
                dropboxFolderId = "";
            }
            else
            {
                var folderMetadata = await dbx.Files.GetMetadataAsync(filepath);

                dropboxFolderId = folderMetadata.AsFolder.Id;
            }

            // adding folder to table PhotographerFolders
            var photoFolder = new PhotographerFolder
            {
                Name              = folder.Name,
                Depth             = folder.Depth,
                Path              = folder.Path,
                DropboxCursor     = list.Cursor,
                DropboxFolderId   = dropboxFolderId,
                ApplicationUserId = currUser.Id,
                ApplicationUser   = currUser,
                PhotographerFiles = new List <PhotographerFile>()
            };

            db.PhotographerFolders.Add(photoFolder);
            db.SaveChanges();

            foreach (var item in list.Entries.Where(i => i.IsFile))
            {
                if (fileExtensionsHelper.IsAllowedFileExtension(item.PathLower))
                {
                    long fileSize = Convert.ToInt64(item.AsFile.Size);

                    var thumbnailResult = await dbx.Files.GetThumbnailAsync(item.PathLower);

                    var imageByteArr = await thumbnailResult.GetContentAsByteArrayAsync();

                    DropboxFile dropboxFile = new DropboxFile(item.PathLower, item.Name, fileSize, folder.Depth, imageByteArr);
                    folder.AddFile(dropboxFile);

                    // adding file to table PhotographerFiles
                    var photoFile = new PhotographerFile
                    {
                        Name                 = item.Name,
                        Size                 = fileSize,
                        Depth                = folder.Depth,
                        Path                 = item.PathLower,
                        ThumbnailImage       = imageByteArr,
                        DropboxFileId        = item.AsFile.Id,
                        PhotographerFolderId = photoFolder.PhotographerFolderId,
                        PhotographerFolder   = photoFolder
                    };
                    db.PhotographerFiles.Add(photoFile);
                    db.SaveChanges();
                    photoFolder.PhotographerFiles.Add(photoFile);
                }
            }
            db.SaveChanges();

            currUser.PhotographerFolders.Add(photoFolder);

            int newDepth = folder.Depth;

            newDepth++;
            foreach (var item in list.Entries.Where(i => i.IsFolder))
            {
                DropboxFolder dropboxFolder = new DropboxFolder(item.PathLower, item.Name, newDepth);
                folder.AddFolder(dropboxFolder);

                await TraverseRecursive(dbx, item.PathLower, dropboxFolder, currUser);
            }
        }
 public DuplicateGrantingError(ApplicationUser user, PhotographerFolder folder)
 {
     User   = user;
     Folder = folder;
 }
Esempio n. 7
0
        private PhotographerFile GetFile(PhotographerFolder folder, string path)
        {
            var file = folder.PhotographerFiles.Single(f => f.Path == path);

            return(file);
        }
Esempio n. 8
0
        private async Task AddFolderBranchFromDropboxToDB(Metadata folder, int depth)
        {
            var folderContents = await Dbx.Files.ListFolderAsync(folder.PathLower);

            var photoFolder = new PhotographerFolder
            {
                Name              = folder.Name,
                Depth             = depth,
                Path              = folder.PathLower,
                DropboxCursor     = folderContents.Cursor,
                DropboxFolderId   = folder.AsFolder.Id,
                ApplicationUserId = CurrUser.Id,
                ApplicationUser   = CurrUser,
                PhotographerFiles = new List <PhotographerFile>()
            };

            Db.PhotographerFolders.Add(photoFolder);
            Db.SaveChanges();

            foreach (var item in folderContents.Entries.Where(i => i.IsFile))
            {
                if (fileExtensionsHelper.IsAllowedFileExtension(item.PathLower))
                {
                    long fileSize = Convert.ToInt64(item.AsFile.Size);

                    var thumbnailResult = await Dbx.Files.GetThumbnailAsync(item.PathLower);

                    var imageByteArr = await thumbnailResult.GetContentAsByteArrayAsync();

                    //DropboxFile dropboxFile = new DropboxFile(item.PathLower, item.Name, fileSize, folder.Depth, imageByteArr);
                    //folder.AddFile(dropboxFile);

                    // adding file to table PhotographerFiles
                    var photoFile = new PhotographerFile
                    {
                        Name                 = item.Name,
                        Size                 = fileSize,
                        Depth                = depth,
                        Path                 = item.PathLower,
                        ThumbnailImage       = imageByteArr,
                        DropboxFileId        = item.AsFile.Id,
                        PhotographerFolderId = photoFolder.PhotographerFolderId,
                        PhotographerFolder   = photoFolder
                    };
                    Db.PhotographerFiles.Add(photoFile);
                    Db.SaveChanges();
                    photoFolder.PhotographerFiles.Add(photoFile);
                }
            }
            Db.SaveChanges();

            CurrUser.PhotographerFolders.Add(photoFolder);

            int newDepth = depth;

            newDepth++;
            foreach (var item in folderContents.Entries.Where(i => i.IsFolder))
            {
                await AddFolderBranchFromDropboxToDB(item, newDepth);
            }
        }
Esempio n. 9
0
        private async Task ManageChangedFolder(PhotographerFolder folder, Metadata deletedItem, ListFolderResult changesInFolder)
        {
            var dbFolder        = GetFolder(deletedItem.AsDeleted.PathLower);
            var folderDropboxId = dbFolder.DropboxFolderId;
            var newFolders      = changesInFolder.Entries.Where(item => item.IsFolder);

            if (newFolders.Count() == 0)
            {
                // this means that the folder was just deleted
                // need to delete folder with "dropbox id" = folderDropboxId from db !!!
                // also delete all subfolders of deleted folder
                var allSubFolders = GetSubfolders(dbFolder);
                allSubFolders.Add(dbFolder);
                Db.PhotographerFolders.RemoveRange(allSubFolders);
                Db.SaveChanges();

                RedundantMetadata.Add(deletedItem);
                //changesInFolder.Entries.Remove(deletedItem);
                // return or break, dunno
                return;
            }
            var existingFolder = newFolders.SingleOrDefault(f => f.AsFolder.Id == folderDropboxId);

            if (existingFolder != null) // it is a renamed folder
            {
                // TODO
                // foreach nested file and folder change path to new path
                var allSubFolders = GetSubfolders(dbFolder);
                await RenamePath(allSubFolders, existingFolder, deletedItem);

                // TODO

                // rename folder with "dropbox id" = folderDropboxId in CurrUser.PhotographerFolders collection and assign new cursor
                var listSubFolder = await Dbx.Files.ListFolderAsync(existingFolder.PathLower);

                dbFolder.DropboxCursor = listSubFolder.Cursor;
                dbFolder.Name          = existingFolder.Name;
                dbFolder.Path          = existingFolder.PathLower;
                foreach (var dbFile in dbFolder.PhotographerFiles)
                {
                    var newfolderFilePath = existingFolder.PathLower + "/" + dbFile.Name;
                    dbFile.Path            = newfolderFilePath;
                    Db.Entry(dbFile).State = System.Data.Entity.EntityState.Modified;
                }

                Db.SaveChanges();

                // removing folder from changesInFolder
                RedundantMetadata.AddRange(new List <Metadata> {
                    deletedItem, existingFolder
                });
                //changesInFolder.Entries.Remove(deletedItem);
                //changesInFolder.Entries.Remove(existingFolder);
            }
            else // it is a deleted folder
            {
                // need to delete folder with "dropbox id" = fileDropboxId from db !!!
                // also delete all subfolders of deleted folder
                var allSubFolders = GetSubfolders(dbFolder);
                allSubFolders.Add(dbFolder);
                Db.PhotographerFolders.RemoveRange(allSubFolders);
                Db.SaveChanges();

                RedundantMetadata.Add(deletedItem);
                //changesInFolder.Entries.Remove(deletedItem);
            }
        }
Esempio n. 10
0
        private List <PhotographerFolder> GetSubfolders(PhotographerFolder currFolder)
        {
            var folderTree = CurrUser.PhotographerFolders.Where(f => IsSubfolder(currFolder, f) == true).ToList();

            return(folderTree);
        }