CmisSync.Lib.Producer.Watcher.CreatedChangedDeletedFileSystemEventHandler.PopEventsFromList C# (CSharp) Method

PopEventsFromList() private method

private PopEventsFromList ( ) : void
return void
        private void PopEventsFromList() {
            try {
                lock (this.listLock) {
                    this.timer.Stop();
                    if (this.events.Count == 0) {
                        return;
                    }

                    while (this.events.Count > 0 && (DateTime.UtcNow - this.events[0].Item3).Milliseconds >= this.threshold) {
                        var entry = this.events[0];
                        this.events.RemoveAt(0);
                        if (entry.Item1.ChangeType == WatcherChangeTypes.Created) {
                            IFileSystemInfo fsInfo = entry.Item4 ? (IFileSystemInfo)this.fsFactory.CreateDirectoryInfo(entry.Item1.FullPath) : (IFileSystemInfo)this.fsFactory.CreateFileInfo(entry.Item1.FullPath);
                            try {
                                Guid? fsUuid = fsInfo.Uuid;
                                if (fsUuid != null && fsUuid != Guid.Empty) {
                                    var correspondingDeletion = this.events.Find((Tuple<FileSystemEventArgs, Guid, DateTime, bool> obj) => obj.Item2 == (Guid)fsUuid && obj.Item1.ChangeType == WatcherChangeTypes.Deleted);
                                    if (correspondingDeletion != null) {
                                        this.queue.AddEvent(new FSMovedEvent(correspondingDeletion.Item1.FullPath, entry.Item1.FullPath, entry.Item4));
                                        this.events.Remove(correspondingDeletion);
                                        continue;
                                    }
                                }
                            } catch (ExtendedAttributeException) {
                            } catch (FileNotFoundException) {
                                continue;
                            } catch (DirectoryNotFoundException) {
                                continue;
                            }
                        } else if (entry.Item1.ChangeType == WatcherChangeTypes.Deleted && entry.Item2 != Guid.Empty) {
                            var correspondingCreation = this.events.Find((Tuple<FileSystemEventArgs, Guid, DateTime, bool> obj) => obj.Item2 == entry.Item2 && obj.Item1.ChangeType == WatcherChangeTypes.Created);
                            if (correspondingCreation != null) {
                                this.queue.AddEvent(new FSMovedEvent(entry.Item1.FullPath, correspondingCreation.Item1.FullPath, entry.Item4));
                                this.events.Remove(correspondingCreation);
                                continue;
                            }
                        }

                        this.queue.AddEvent(new FSEvent(entry.Item1.ChangeType, entry.Item1.FullPath, entry.Item4));
                    }

                    if (this.events.Count > 0) {
                        this.ResetTimerInterval();
                        this.timer.Start();
                    }
                }
            } catch (Exception ex) {
                Logger.Warn(string.Format("Pop file system event produces exception => force crawl sync"), ex);
                this.queue.AddEvent(new StartNextSyncEvent(true));
            }
        }
    }