/// <summary>
        /// For a reload of the existing, underlying data.
        /// </summary>
        public IObservable <PageReadResult <TItem> > Reload()
        {
            // cancel all pending reads, this should improve performance
            this.CancelPending();

            // build the request
            var pageRequest = new PageReadRequest()
            {
                Offset = 0, Take = _list.Count
            };

            // and now do the update
            return(EnqueueReadObservable(pageRequest, true));
        }
Example #2
0
        /// <summary>
        /// For a reload of the existing, underlying data.
        /// </summary>
        public void Reload()
        {
            // cancel all pending reads, this should improve performance
            this.CancelPending();

            // build the request
            var pageRequest = new PageReadRequest()
            {
                Offset = 0, Take = _offset
            };

            // and now do the update
            EnqueueReadObservable(pageRequest, true);
        }
Example #3
0
        /// <summary>
        /// Force a reload of any cached data.
        /// </summary>
        /// <returns></returns>
        public IObservable <Unit> Reload()
        {
            // bin off any pending items...
            CancelPending();

            // build the request
            var pageRequest = new PageReadRequest()
            {
                Offset = 0, Take = _cache.Count
            };

            // and now do the update
            return(EnqueueReadObservable(pageRequest, true).Select(_ => Unit.Default));
        }
Example #4
0
        public void NothingToReadMeansNoPagingRequestTest()
        {
            var offset = 0;
            var take   = 10;
            var total  = 99;

            _changeSetController.SetAlignedValues(offset, offset, false);

            var requestRequest = new PageReadRequest()
            {
                Offset = offset, Take = take
            };

            var result = default(PageReadResult <CollectionModel>);


            var items = new List <CollectionModel>()
            {
                new CollectionModel(), new CollectionModel()
            };

            var res = new PageReadResult <CollectionModel>(offset, 5, items)
            {
                Total = total
            };

            var pcReturn = Observable.Return(res);

            _pagingController.Setup(p => p.ReadPage(offset, take)).Returns(pcReturn);

            var busyStates = new List <bool>();

            _changeSetController.BusyObservable.Subscribe(b => busyStates.Add(b));

            var readPage = _changeSetController.ReadPageObservable(requestRequest).Subscribe(r => result = r);

            Assert.Equal(res.Offset, result.Offset);
            Assert.Equal(0, result.AmountRead);
            Assert.Null(result.Total);          // we don't know the total since never read..
            Assert.Equal(3, busyStates.Count);
            Assert.False(busyStates[0]);
            Assert.True(busyStates[1]);
            Assert.False(busyStates[2]);

            _pagingController.Verify(p => p.ReadPage(offset, take), Times.Never);
        }
Example #5
0
        public void ReadRequestPassedThroughTest()
        {
            PageReadRequest readRequest = default(PageReadRequest);

            Func <PageReadRequest, IObservable <PageReadResult <CollectionModel> > > func = (r) =>
            {
                readRequest = r;
                return(Observable.Return(default(PageReadResult <CollectionModel>)));
            };

            _pagingController = new ObservablePagingController <CollectionModel>(func);

            var offset = 10;
            var take   = 10;

            var read = _pagingController.ReadPage(offset, take);

            Assert.Equal(offset, readRequest.Offset);
            Assert.Equal(take, readRequest.Take);
        }
Example #6
0
        /// <summary>
        /// Test request observable used for generating exceptions and results
        /// </summary>
        /// <param name="request"></param>
        /// <param name="exception"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        private IObservable <PageReadResult <CollectionModel> > GetData(PageReadRequest request, Exception exception, PageReadResult <CollectionModel> result)
        {
            _invokeCount = 0;

            return(Observable.Create <PageReadResult <CollectionModel> >(o =>
            {
                ++_invokeCount;

                if (_invokeCount == 1)
                {
                    o.OnError(exception);
                }
                else
                {
                    o.OnNext(result);
                    o.OnCompleted();
                }

                return Disposable.Empty;
            }));
        }
Example #7
0
        public void NormalReadFunctionsCorrectlyTest()
        {
            var offset = 0;
            var take   = 10;
            var total  = 99;

            _changeSetController.SetAlignedValues(offset, offset + take, true);

            var requestRequest = new PageReadRequest()
            {
                Offset = offset, Take = take
            };

            var result = default(PageReadResult <CollectionModel>);

            var items = new List <CollectionModel>()
            {
                new CollectionModel(), new CollectionModel()
            };

            var res = new PageReadResult <CollectionModel>(offset, 5, items);

            res.Total = total;

            var pcReturn = Observable.Return(res);

            _pagingController.Setup(p => p.ReadPage(offset, take)).Returns(pcReturn);

            var readPage = _changeSetController.ReadPageObservable(requestRequest).Subscribe(r => result = r);

            Assert.Equal(res.Offset, result.Offset);
            Assert.Equal(res.Total, result.Total);
            Assert.Equal(res.Items[0], result.Items[0]);
            Assert.Equal(res.Items[1], result.Items[1]);
            Assert.Equal(total, _changeSetController.Total);

            _pagingController.Verify(p => p.ReadPage(offset, take), Times.Once);
        }
Example #8
0
        public void RequestsLargerThanMaxSizeAreTrimmedTest()
        {
            const int maxPageSize = 5;

            PageReadRequest readRequest = default(PageReadRequest);

            Func <PageReadRequest, IObservable <PageReadResult <CollectionModel> > > func = (r) =>
            {
                readRequest = r;
                return(Observable.Return(default(PageReadResult <CollectionModel>)));
            };

            _pagingController = new ObservablePagingController <CollectionModel>(func, maxPageSize: maxPageSize);

            var offset = 10;
            var take   = 10;

            var read = _pagingController.ReadPage(offset, take);


            Assert.Equal(offset, readRequest.Offset);
            Assert.Equal(maxPageSize, readRequest.Take);
        }
Example #9
0
 /// <summary>
 /// Calculate the read range.
 /// </summary>
 /// <param name="pageReadRequest"></param>
 /// <param name="forceReload"></param>
 /// <param name="alignedStart"></param>
 /// <param name="alignedEnd"></param>
 /// <returns></returns>
 /// <remarks>
 /// Be considerable to a forced reload to ensure the complete data is re-read.</remarks>
 protected override bool GetReadRange(PageReadRequest pageReadRequest, bool forceReload, ref int alignedStart, ref int alignedEnd)
 {
     return(this.CalcReadRange(pageReadRequest, forceReload ? 0 : _offset, ref alignedStart, ref alignedEnd));
 }
Example #10
0
 protected override bool GetReadRange(PageReadRequest pageReadRequest, bool forceReload, ref int alignedStart, ref int alignedEnd)
 {
     alignedStart = _start;
     alignedEnd   = _end;
     return(_isTrue);
 }
 public IObservable <PageReadResult <T> > ReadPageObservable(PageReadRequest pageReadRequest)
 {
     throw new NotImplementedException();
 }