private AbstractFolderEvent CreateLocalEventBasedOnStorage(IFileSystemInfo fsObject, IMappedObject storedParent, IMappedObject storedMappedChild) {
AbstractFolderEvent createdEvent = null;
if (storedParent == null) {
throw new ArgumentNullException("storedParent", "stored parent is null. Stored child: " + storedMappedChild.ToString() + Environment.NewLine + "local object is: " + fsObject.FullName);
}
if (storedMappedChild.ParentId == storedParent.RemoteObjectId) {
// Renamed, Updated or Equal
#if __COCOA__
if (fsObject.Name.Normalize(NormalizationForm.FormD) == storedMappedChild.Name.Normalize(NormalizationForm.FormD) && fsObject.LastWriteTimeUtc == storedMappedChild.LastLocalWriteTimeUtc) {
#else
if (fsObject.Name == storedMappedChild.Name &&
fsObject.LastWriteTimeUtc == storedMappedChild.LastLocalWriteTimeUtc &&
fsObject.ReadOnly == storedMappedChild.IsReadOnly) {
#endif
// Equal
createdEvent = null;
} else {
// Updated or Renamed
createdEvent = FileOrFolderEventFactory.CreateEvent(null, fsObject, localChange: MetaDataChangeType.CHANGED, src: this);
}
} else {
// Moved
IFileSystemInfo oldLocalPath = fsObject is IFileInfo ? (IFileSystemInfo)this.fsFactory.CreateFileInfo(this.storage.GetLocalPath(storedMappedChild)) : (IFileSystemInfo)this.fsFactory.CreateDirectoryInfo(this.storage.GetLocalPath(storedMappedChild));
createdEvent = FileOrFolderEventFactory.CreateEvent(null, fsObject, localChange: MetaDataChangeType.MOVED, oldLocalObject: oldLocalPath, src: this);
}
return createdEvent;
}
private IMappedObject FindStoredObjectByFileSystemInfo(List<IMappedObject> storedObjects, IFileSystemInfo fsInfo) {
Guid? childGuid = fsInfo.Uuid;
if (childGuid != null) {
return storedObjects.Find(o => o.Guid == (Guid)childGuid);
}
return null;
}
}
}