private void RecursiveFolderCopy(IFolder remoteFolder, string remotePath, string localFolder)
{
SleepWhileSuspended();
IItemEnumerable<ICmisObject> children;
try
{
children = remoteFolder.GetChildren();
}
catch (CmisBaseException e)
{
ProcessRecoverableException("Could not get children objects: " + remoteFolder.Path, e);
return;
}
// List all children.
foreach (ICmisObject cmisObject in children)
{
string remoteSubPath = remotePath + CmisUtils.CMIS_FILE_SEPARATOR + cmisObject.Name;
if (cmisObject is DotCMIS.Client.Impl.Folder)
{
// Case of a folder: Download recursively.
IFolder remoteSubFolder = (IFolder)cmisObject;
var localSubFolderItem = database.GetFolderSyncItemFromRemotePath(remoteSubFolder.Path);
if (null == localSubFolderItem)
{
localSubFolderItem = SyncItemFactory.CreateFromRemoteFolder(remoteSubFolder.Path, repoInfo, database);
}
if (Utils.WorthSyncing(localFolder, PathRepresentationConverter.RemoteToLocal(remoteSubFolder.Name), repoInfo))
{
DownloadDirectory(remoteSubFolder, remoteSubPath, localSubFolderItem.LocalPath);
}
}
else if (cmisObject is DotCMIS.Client.Impl.Document)
{
// Case of a document: Download it.
Document document = (Document)cmisObject;
if (Utils.WorthSyncing(localFolder, repoInfo.CmisProfile.localFilename(document), repoInfo))
{
DownloadFile(document, remoteSubPath, localFolder);
}
}
else
{
Logger.Debug("Unknown object type: " + cmisObject.ObjectType.DisplayName
+ " for object " + remoteFolder + "/" + cmisObject.Name);
}
}
}