Exemple #1
0
        public LogSourceService()
        {
            _logEventsLock = new object();
            _sourcesLock   = new object();
            _sources       = new ObservableCowList <ILogSource>();
            _logEvents     = new ObservableCowList <LogEvent>();

            Sources   = _sources;
            LogEvents = _logEvents;
        }
        public LogFilterResultsService(ILogSourceService logSourceService, ILogFilterService logFilterService)
        {
            _logEvents = new ObservableCowList <LogEvent>();
            Result     = _logEvents;

            var sourceLogEvents   = logSourceService.LogEvents.AsBehaviorObservable().Publish();
            var filterChanges     = logFilterService.Filter.Publish();
            var sourceResetEvents = sourceLogEvents.Where(e => e.Action == NotifyListChangedAction.Reset).Select(e => e.Items);

            Observable.Merge(
                Observable.WithLatestFrom(
                    sourceResetEvents,
                    filterChanges,
                    (items, filter) => (items, filter)
                    ),
                Observable.WithLatestFrom(
                    filterChanges,
                    sourceLogEvents.Select(e => e.Items),
                    (filter, items) => (items, filter)
                    )
                )
            .Select(x =>
            {
                (var items, var filter) = x;
                return(Observable.Concat(
                           InvokeFilter(NotifyListChangedAction.Reset, items, filter),
                           sourceLogEvents
                           .TakeWhile(e => e.Action == NotifyListChangedAction.Add)
                           .Select(e => InvokeFilter(e.Action, e.NewItems, filter))
                           .SelectMany(a => a)
                           ));
            })
            .Switch().Subscribe(x =>
            {
                (var action, var items) = x;
                switch (action)
                {
                case NotifyListChangedAction.Add:
                    _logEvents.Add(items);
                    break;

                case NotifyListChangedAction.Reset:
                    _logEvents.Reset(items);
                    break;

                default:
                    throw new NotSupportedException();
                }
            });

            filterChanges.Connect();
            sourceLogEvents.Connect();
        }
Exemple #3
0
        public LogFilterService()
        {
            _filter  = new BehaviorSubject <Func <LogEvent, bool> >(LogFilter.PassAll);
            _filters = new ObservableCowList <IObservable <Func <LogEvent, bool> > >();

            _filters
            .AsItemsBehaviorObservable()
            .Select(items => items.CombineLatest(CombineFilters))
            .Switch()
            .DistinctUntilChanged()
            .Subscribe(_filter);

            Filter = _filter.AsObservable();
        }