Exemple #1
0
        public QueryHistoryProvider()
        {
            _historySourceList = new SourceList <RawQueryHistory>();

            var counter = _historySourceList.CountChanged.Subscribe(i => IsEmpty = i == 0);

            var limiter = _historySourceList.LimitSizeTo(100).Subscribe();

            _historySourceList.AddRange(LoadFileData());

            var sharedList = _historySourceList
                             .Connect()
                             .DeferUntilLoaded()
                             .Sort(SortExpressionComparer <RawQueryHistory> .Descending(t => t.LastRunAt))
                             .ObserveOnDispatcher()
                             .Bind(out _queryHistories)
                             .Subscribe();

            var disposable = _queryHistories
                             .ObserveCollectionChanges()
                             .Throttle(TimeSpan.FromSeconds(2))
                             .Subscribe(pattern => { SaveFileData(_queryHistories); });

            _compositeDisposable = new CompositeDisposable(counter, limiter, sharedList, disposable);
        }
Exemple #2
0
        /// <summary>
        /// Aggregates observables from <paramref name="collection"/> using selector for observables <paramref name="observablePropertySelector"/>
        /// and aggregator for values from observables <paramref name="aggregator"/>
        /// </summary>
        public static IObservable <TRes> AggregateLatest <T, TRes>(
            this ReadOnlyObservableCollection <T> collection,
            Func <T, IObservable <TRes> > observablePropertySelector,
            Func <IList <TRes>, TRes> aggregator)
        {
            return(Observable.Create <TRes>(observer =>
            {
                var aggregateLatestSubscription = collection.AggregateLatest(observablePropertySelector, aggregator, observer);
                var collectionChangesSubscription = collection.ObserveCollectionChanges().Subscribe(_ =>
                {
                    aggregateLatestSubscription.Dispose();
                    aggregateLatestSubscription = collection.AggregateLatest(observablePropertySelector, aggregator, observer);
                });

                return Disposable.Create(() =>
                {
                    collectionChangesSubscription.Dispose();
                    aggregateLatestSubscription.Dispose();
                });
            }));
        }