コード例 #1
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);
            }
        }
コード例 #2
0
        private async Task SyncDropboxFolder(string folderpath)
        {
            var folder = CurrUser.PhotographerFolders.SingleOrDefault(f => f.Path == folderpath);

            if (folder == null)
            {
                // folder doesnt exist
                return;
            }

            RedundantMetadata.Clear();

            var changesInFolder = await Dbx.Files.ListFolderContinueAsync(folder.DropboxCursor);

            // update current folder "dropbox cursor" in db (changesInFolder.Cursor)
            folder.DropboxCursor = changesInFolder.Cursor;
            Db.SaveChanges();

            if (changesInFolder.Entries.Count == 0)
            {
                // this folder is synched with dropbox account
                // syncing subfolders if needed
                if (folderpath == "/")
                {
                    folderpath = string.Empty;
                }
                var subfolders = await Dbx.Files.ListFolderAsync(folderpath);

                foreach (var subfolder in subfolders.Entries.Where(subf => subf.IsFolder))
                {
                    await SyncDropboxFolder(subfolder.PathLower);
                }
                return;
            }

            // adding to list of synced folders
            SyncedDropboxFolders.Add(folder);

            foreach (var deletedItem in changesInFolder.Entries.Where(c => c.IsDeleted))
            {
                var pathDeleted = deletedItem.AsDeleted.PathLower;
                if (!IsFolder(pathDeleted)) // it is a deleted or renamed file
                {
                    ManageChangedFile(folder, deletedItem, changesInFolder);
                }
                else // it is a deleted or renamed folder
                {
                    await ManageChangedFolder(folder, deletedItem, changesInFolder);
                }
            }

            foreach (var redundantMet in RedundantMetadata)
            {
                changesInFolder.Entries.Remove(redundantMet);
            }

            // first iterating to all subfolders of current folder to check for changes
            var nestedFolders = CurrUser.PhotographerFolders.Where(f => IsDirectSubfolder(folder, f) == true).ToList();

            foreach (var nestedFolder in nestedFolders)
            {
                await SyncDropboxFolder(nestedFolder.Path);
            }

            // adding items that are left in changesInFolder to db
            foreach (var newfile in changesInFolder.Entries.Where(e => e.IsFile))
            {
                await AddFileFromDropboxToDB(newfile, folder);
            }

            foreach (var newFolder in changesInFolder.Entries.Where(e => e.IsFolder))
            {
                await AddFolderBranchFromDropboxToDB(newFolder, folder.Depth + 1);
            }
        }
コード例 #3
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);
            }
        }