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;
}