Example #1
0
 private IObservable <SwatcherCreatedEventArgs> CreateCreatedEventStream()
 {
     return(_createdSubject.AsObservable()
            .SelectConfiguredItemTypes(Config)
            .Do(x => CreatedEventsInProgress.Add(x.FullPath))
            .Publish()
            .RefCount());
 }
Example #2
0
 private IObservable <SwatcherEventArgs> ChangedEventsNotResultingFromACreatedEventStream(
     IObservable <SwatcherEventArgs> changedEvents,
     IObservable <IList <SwatcherCreatedEventArgs> > createdEventWindows)
 {
     return(changedEvents.CombineLatestFromLeft(createdEventWindows,
                                                (c, w) => new
     {
         Changed = c,
         Created = w
     })
            .Where(x => ItemExists(x.Changed))
            .Where(x => IsWatchedItemType(x.Changed, Config))
            .Where(x => !CreatedEventsInProgress.Contains(x.Changed.FullPath))
            .Where(x => x.Created.All(created => created.FullPath != x.Changed.FullPath))
            .Select(x => x.Changed));
 }
Example #3
0
        internal Swatcher(ISwatcherConfig config, IWindowsFacade windowsFacade)
        {
            Config        = config;
            WindowsFacade = windowsFacade;

            var createdEventStream         = CreateCreatedEventStream();
            var finishedCreatedEventStream = CreateFinishedCreatedEventStream(createdEventStream);

            finishedCreatedEventStream
            .Delay(TimeSpan.FromSeconds(2.5))
            .Subscribe(x => CreatedEventsInProgress.Remove(x.FullPath));

            var createdEventWindows         = CreateCreatedEventWindowStream(createdEventStream);
            var finishedCreatedEventWindows = CreateFinishedCreatedEventWindows(finishedCreatedEventStream);

            var changedEventStream  = CreateChangedEventStream();
            var changedEventWindows = CreatedChangedEventWindows(changedEventStream);

            Renamed = CreatePublicRenamedStream(Config);
            Deleted = CreatePublicDeletedStream();
            Created = CreatePublicCreatedStream(finishedCreatedEventStream);
            Changed = CreatePublicChangedStream(changedEventStream,
                                                changedEventWindows, createdEventWindows, finishedCreatedEventWindows);

            ChangedEventPatternSource =
                Changed.Select(x => new EventPattern <SwatcherEventArgs>(this, x)).ToEventPattern();
            ChangedEventPatternSource.OnNext += OnItemChanged;

            DeletedEventPatternSource =
                Deleted.Select(x => new EventPattern <SwatcherEventArgs>(this, x)).ToEventPattern();
            DeletedEventPatternSource.OnNext += OnItemDeleted;

            CreatedEventPatternSource =
                Created.Select(x => new EventPattern <SwatcherCreatedEventArgs>(this, x)).ToEventPattern();
            CreatedEventPatternSource.OnNext += OnItemCreated;

            RenamedEventPatternSource =
                Renamed.Select(x => new EventPattern <SwatcherRenamedEventArgs>(this, x)).ToEventPattern();
            RenamedEventPatternSource.OnNext += OnItemRenamed;
        }