public override void Solve(
IFileSystemInfo localFileSystemInfo,
IObjectId remoteId,
ContentChangeType localContent,
ContentChangeType remoteContent)
{
var savedObject = this.Storage.GetObjectByRemoteId(remoteId.Id);
Guid? newParentUuid = localFileSystemInfo is IFileInfo ? (localFileSystemInfo as IFileInfo).Directory.Uuid : (localFileSystemInfo as IDirectoryInfo).Parent.Uuid;
string newParentId = this.Storage.GetObjectByGuid((Guid)newParentUuid).RemoteObjectId;
savedObject.Ignored = (remoteId as ICmisObject).AreAllChildrenIgnored();
if (localFileSystemInfo.Name == (remoteId as ICmisObject).Name) {
// Both names are equal => only move to new remote parent
try {
(remoteId as IFileableCmisObject).Move(this.Session.GetObject(savedObject.ParentId), this.Session.GetObject(newParentId));
} catch (CmisPermissionDeniedException) {
OperationsLogger.Info(string.Format("Permission Denied: Cannot move remote object {0} from {1} to {2}", remoteId.Id, savedObject.ParentId, newParentId));
return;
}
savedObject.Name = localFileSystemInfo.Name;
savedObject.ParentId = newParentId;
this.Storage.SaveMappedObject(savedObject);
this.changeChangeSolver.Solve(localFileSystemInfo, remoteId, localContent, remoteContent);
} else {
// Names are different to each other
if (localFileSystemInfo.Name == savedObject.Name) {
// Remote rename and local move => Move remote and rename locally => change change solver
try {
remoteId = (remoteId as IFileableCmisObject).Move(this.Session.GetObject(savedObject.ParentId), this.Session.GetObject(newParentId));
} catch (CmisPermissionDeniedException) {
OperationsLogger.Info(string.Format("Permission Denied: Cannot move remote object {0} from {1} to {2}", remoteId.Id, savedObject.ParentId, newParentId));
return;
}
var localParentPath = localFileSystemInfo is IFileInfo ? (localFileSystemInfo as IFileInfo).Directory.FullName : (localFileSystemInfo as IDirectoryInfo).Parent.FullName;
string newPath = Path.Combine(localParentPath, (remoteId as ICmisObject).Name);
this.MoveTo(localFileSystemInfo, localFileSystemInfo.FullName, newPath);
savedObject.Name = localFileSystemInfo.Name;
savedObject.ParentId = newParentId;
this.Storage.SaveMappedObject(savedObject);
this.changeChangeSolver.Solve(localFileSystemInfo, remoteId, localContent, remoteContent);
} else {
// Both sides have been renamed => Move remote => rename rename solver
try {
(remoteId as IFileableCmisObject).Move(this.Session.GetObject(savedObject.ParentId), this.Session.GetObject(newParentId));
} catch (CmisPermissionDeniedException) {
OperationsLogger.Info(string.Format("Permission Denied: Cannot move remote object {0} from {1} to {2}", remoteId.Id, savedObject.ParentId, newParentId));
return;
}
savedObject.ParentId = newParentId;
this.Storage.SaveMappedObject(savedObject);
this.renameRenameSolver.Solve(localFileSystemInfo, remoteId, localContent, remoteContent);
}
}
}