CmisSync.Lib.Sync.CmisRepo.SynchronizedFolder.CrawlCmisObject C# (CSharp) Метод

CrawlCmisObject() приватный Метод

Synchronize changes made to a particular CMIS object.
private CrawlCmisObject ( ICmisObject cmisObject ) : void
cmisObject ICmisObject
Результат void
            private void CrawlCmisObject(ICmisObject cmisObject)
            {
                if (cmisObject is DotCMIS.Client.Impl.Folder)
                {
                    var remoteSubFolder = cmisObject as IFolder;

                    // Look for the local equivalent.
                    var localFolderItem = database.GetFolderSyncItemFromRemotePath(remoteSubFolder.Path);
                    while (true)
                    {
                        // If other local folders have the same id, they are obsolete and must be deteled.
                        var foldersToDelete = database.GetAllFoldersWithCmisId(cmisObject.Id).Where(p => p.RemotePath != remoteSubFolder.Path);
                        foreach (var folderToDelete in foldersToDelete)
                        {
                            RemoveFolderLocally(folderToDelete.LocalPath);
                        };

                        if (localFolderItem != null || remoteSubFolder.IsRootFolder) break;

                        // Go up one level before performing the same thing.
                        remoteSubFolder = remoteSubFolder.Parents[0]; //TODO: Fix Parents[0] for multi-parent repositories
                        localFolderItem = database.GetFolderSyncItemFromRemotePath(remoteSubFolder.Path);
                    };

                    CrawlSync(remoteSubFolder, remoteSubFolder.Path, localFolderItem.LocalPath);
                }
                else if (cmisObject is DotCMIS.Client.Impl.Document)
                {
                    var remoteDocument = cmisObject as IDocument;

                    // Apply the change on all paths via which it is applicable.
                    foreach (IFolder remoteIFolder in remoteDocument.Parents)
                    {
                        if (PathIsApplicable(remoteIFolder.Path))
                        {
                            Logger.Debug("Document change is applicable:" + remoteIFolder);

                            var localFolderItem = database.GetFolderSyncItemFromRemotePath(remoteIFolder.Path);
                            var localFolder = localFolderItem.LocalPath;

                            var remoteDocumentPath = CmisUtils.PathCombine(remoteIFolder.Path, repoInfo.CmisProfile.localFilename(remoteDocument));
                            var documentItem = SyncItemFactory.CreateFromRemoteDocument(remoteDocumentPath, remoteDocument, repoInfo, database);

                            CrawlRemoteDocument(remoteDocument, documentItem.RemotePath, localFolder, null);
                        }
                    }
                }
            }