private void MergeAndSendEvents(Dictionary<string, Tuple<AbstractFolderEvent, AbstractFolderEvent>> eventMap) {
foreach (var entry in eventMap) {
if (entry.Value == null) {
continue;
} else if (entry.Value.Item1 == null && entry.Value.Item2 == null) {
continue;
} else if (entry.Value.Item1 == null) {
if (entry.Value.Item2.Remote != MetaDataChangeType.NONE) {
this.queue.AddEvent(entry.Value.Item2);
}
} else if (entry.Value.Item2 == null) {
if (entry.Value.Item1.Local != MetaDataChangeType.NONE) {
this.queue.AddEvent(entry.Value.Item1);
}
} else {
var localEvent = entry.Value.Item1;
var remoteEvent = entry.Value.Item2;
var newEvent = FileOrFolderEventFactory.CreateEvent(
remoteEvent is FileEvent ? (IFileableCmisObject)(remoteEvent as FileEvent).RemoteFile : (IFileableCmisObject)(remoteEvent as FolderEvent).RemoteFolder,
localEvent is FileEvent ? (IFileSystemInfo)(localEvent as FileEvent).LocalFile : (IFileSystemInfo)(localEvent as FolderEvent).LocalFolder,
remoteEvent.Remote,
localEvent.Local,
remoteEvent.Remote == MetaDataChangeType.MOVED ? (remoteEvent is FileMovedEvent ? (remoteEvent as FileMovedEvent).OldRemoteFilePath : (remoteEvent as FolderMovedEvent).OldRemoteFolderPath) : null,
localEvent.Local == MetaDataChangeType.MOVED ? (localEvent is FileMovedEvent ? (IFileSystemInfo)(localEvent as FileMovedEvent).OldLocalFile : (IFileSystemInfo)(localEvent as FolderMovedEvent).OldLocalFolder) : null,
this);
if (newEvent is FileEvent) {
(newEvent as FileEvent).LocalContent = (localEvent as FileEvent).LocalContent;
(newEvent as FileEvent).RemoteContent = (remoteEvent as FileEvent).RemoteContent;
}
this.queue.AddEvent(newEvent);
}
}
}
}