private void CheckLocalFolder(string localSubFolder, IFolder remoteRoot, IList<string> remoteFolders)
{
SleepWhileSuspended();
try
{
if (Utils.IsSymlink(new DirectoryInfo(localSubFolder)))
{
Logger.Info("Skipping symbolic link folder: " + localSubFolder);
return;
}
string folderName = Path.GetFileName(localSubFolder);
if (Utils.WorthSyncing(Path.GetDirectoryName(localSubFolder), folderName, repoInfo))
{
var syncFolderItem = database.GetFolderSyncItemFromLocalPath(localSubFolder);
if (null == syncFolderItem)
{
// The local item is not in database. It has not been uploaded yet.
syncFolderItem = SyncItemFactory.CreateFromLocalPath(localSubFolder, true, repoInfo, database);
}
if (remoteFolders.Contains(syncFolderItem.RemoteLeafname))
{
// The same folder exists locally and remotely.
// Are they synchronized, or were they just created (or moved) at the same time?
if (database.ContainsFolder(syncFolderItem))
{
// Check modification dates of local folder and remote folder.
// TODO
}
else
{
// The folder just appeared both on the local and remote sides.
// Rename local folder then download remote folder.
IFolder remoteFolder = (IFolder)session.GetObjectByPath(syncFolderItem.RemotePath);
var path = syncFolderItem.LocalPath;
var newPath = Utils.CreateConflictFoldername(path, repoInfo.User);
Directory.Move(path, newPath);
// Delete file from database.
database.RemoveFile(syncFolderItem);
repo.OnConflictResolved();
// Download folder from server.
DownloadDirectory(remoteFolder, syncFolderItem.RemotePath, path);
}
}
else
{
// This local folder is not on the CMIS server now, so
// check whether it used to exist on server or not.
if (database.ContainsFolder(syncFolderItem))
{
activityListener.ActivityStarted();
RemoveFolderLocally(localSubFolder);
activityListener.ActivityStopped();
}
else
{
// New local folder, upload recursively.
activityListener.ActivityStarted();
UploadFolderRecursively(remoteRoot, localSubFolder);
activityListener.ActivityStopped();
}
}
}
}
catch (Exception e)
{
ProcessRecoverableException("Could not crawl sync local folder: " + localSubFolder, e);
}
}
}