CmisSync.Lib.Watcher.GetChangeQueue C# (CSharp) Метод

GetChangeQueue() публичный Метод

Get the change queue.
public GetChangeQueue ( ) : Queue
Результат Queue
        public Queue<WatcherEvent> GetChangeQueue()
        {
            lock (changeLock)
            {
                Queue<WatcherEvent> changeQueue = new Queue<WatcherEvent>();
                int changeListCount = changeList.Count;
                for (int i = 0; i < changeListCount; i++)
                {
                    WatcherEvent watcherEvent = changeList[i];
                    FileSystemEventArgs change = watcherEvent.GetFileSystemEventArgs();
                    string fileName = System.IO.Path.GetFileName(change.FullPath);
                    string dirName = System.IO.Path.GetDirectoryName(change.FullPath);
                    bool redundantChange = false;
                    if (change.ChangeType == WatcherChangeTypes.Deleted)
                    {
                        //Detect a file/folder move...
                        FileSystemEventArgs nextChange = ((i + 1) < changeListCount) ? changeList[i + 1].GetFileSystemEventArgs() : null;
                        if (nextChange != null)
                        {
                            string nextFileName = System.IO.Path.GetFileName(nextChange.FullPath);
                            string nextDirName = System.IO.Path.GetDirectoryName(nextChange.FullPath);
                            if (nextChange.ChangeType == WatcherChangeTypes.Created &&
                            nextFileName.Equals(fileName) && !nextDirName.Equals(dirName))
                            {
                                //Move detected...
                                change = new MovedEventArgs(WatcherChangeTypes.Renamed, dirName, nextDirName, fileName);
                                ++i; //Skip nextChange
                            }
                        }
                    }
                    else if (change.ChangeType == WatcherChangeTypes.Changed)
                    {
                        //Detect redundant changes...
                        for (int j = i - 1; j >= 0; j--)
                        {
                            //Iterate backwards through the list of changes, find the most recent operation on this specific file
                            if (change.FullPath.Equals(changeList[j].GetFileSystemEventArgs().FullPath))
                            {
                                //If the most recent operation is a created or changed operation this operation is redundant
                                if (changeList[j].GetFileSystemEventArgs().ChangeType == WatcherChangeTypes.Created ||
                                    changeList[j].GetFileSystemEventArgs().ChangeType == WatcherChangeTypes.Changed)
                                {
                                    redundantChange = true;
                                }
                                break;
                            }
                        }
                    }
                    if (redundantChange)
                    {
                        Logger.DebugFormat("Local file change {0} discarded because redundant", change.ChangeType);
                    }
                    else
                    {
                        changeQueue.Enqueue(watcherEvent);
                    }
                }
                return changeQueue;
            }
        }