CmisSync.Lib.Sync.CmisRepo.SynchronizedFolder.CrawlSync C# (CSharp) Method

CrawlSync() private method

Synchronize by checking all folders/files one-by-one. This strategy is used if the CMIS server does not support the ChangeLog feature. for all remote folders: if exists locally: recurse else if in database: delete recursively from server // if BIDIRECTIONAL else download recursively for all remote files: if exists locally: if remote is more recent than local: download else upload // if BIDIRECTIONAL else: if in database: delete from server // if BIDIRECTIONAL else download for all local files: if not present remotely: if in database: delete else: upload // if BIDIRECTIONAL else: if has changed locally: upload // if BIDIRECTIONAL for all local folders: if not present remotely: if in database: delete recursively from local else: upload recursively // if BIDIRECTIONAL
private CrawlSync ( IFolder remoteFolder, string remotePath, string localFolder ) : bool
remoteFolder IFolder
remotePath string
localFolder string
return bool
            private bool CrawlSync(IFolder remoteFolder, string remotePath, string localFolder)
            {
                SleepWhileSuspended();

                /*if (IsGetDescendantsSupported)  Disabled because it causes server-side problems for folders with a huge number of files.
                {
                    IList<ITree<IFileableCmisObject>> desc;
                    try
                    {
                        desc = remoteFolder.GetDescendants(-1);
                    }
                    catch (DotCMIS.Exceptions.CmisConnectionException ex)
                    {
                        if (ex.InnerException is System.Xml.XmlException)
                        {
                            Logger.Warn(String.Format("CMIS::getDescendants() response could not be parsed: {0}", ex.InnerException.Message));
                        }
                        throw;
                    }
                    CrawlDescendants(remoteFolder, desc, localFolder);
                }*/

                // Lists of files/folders, to delete those that have been removed on the server.
                IList<string> remoteFiles = new List<string>();
                IList<string> remoteSubfolders = new List<string>();

                // Crawl remote children.
                Logger.InfoFormat("Crawl remote folder {0}", remotePath);
                bool success = CrawlRemote(remoteFolder, remotePath, localFolder, remoteFiles, remoteSubfolders);

                // Crawl local files.
                Logger.InfoFormat("Crawl local files in the local folder {0}", localFolder);
                CheckLocalFiles(localFolder, remoteFolder, remoteFiles);

                // Crawl local folders.
                Logger.InfoFormat("Crawl local folder {0}", localFolder);
                CheckLocalFolders(localFolder, remoteFolder, remoteSubfolders);

                return success;
            }