Banshee.LibraryWatcher.SourceWatcher.Watch C# (CSharp) Method

Watch() private method

private Watch ( ) : void
return void
        private void Watch ()
        {
            watcher.EnableRaisingEvents = true;

            while (active) {
                WatcherChangeTypes change_types = 0;
                while (queue.Count > 0) {
                    QueueItem item;
                    lock (queue) {
                        item = queue.Dequeue ();
                    }

                    int sleep =  (int) (item.When + delay - DateTime.Now).TotalMilliseconds;
                    if (sleep > 0) {
                        Hyena.Log.DebugFormat ("Watcher: sleeping {0}ms", sleep);
                        Thread.Sleep (sleep);
                    }

                    if (item.ChangeType == WatcherChangeTypes.Changed) {
                        UpdateTrack (item.FullPath);
                    } else if (item.ChangeType == WatcherChangeTypes.Created) {
                        AddTrack (item.FullPath);
                    } else if (item.ChangeType == WatcherChangeTypes.Deleted) {
                        RemoveTrack (item.FullPath);
                    } else if (item.ChangeType == WatcherChangeTypes.Renamed) {
                        RenameTrack (item.OldFullPath, item.FullPath);
                    }

                    change_types |= item.ChangeType;
                }

                if ((change_types & WatcherChangeTypes.Deleted) > 0) {
                    library.NotifyTracksDeleted ();
                }
                if ((change_types & (WatcherChangeTypes.Renamed |
                    WatcherChangeTypes.Created | WatcherChangeTypes.Changed)) > 0) {
                    library.NotifyTracksChanged ();
                }

                handle.WaitOne ();
                handle.Reset ();
            }
        }