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)); }
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); }
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); } }
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(); }
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; }
private PhotographerFile GetFile(PhotographerFolder folder, string path) { var file = folder.PhotographerFiles.Single(f => f.Path == path); return(file); }
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); } }
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); } }
private List <PhotographerFolder> GetSubfolders(PhotographerFolder currFolder) { var folderTree = CurrUser.PhotographerFolders.Where(f => IsSubfolder(currFolder, f) == true).ToList(); return(folderTree); }