Ejemplo n.º 1
0
        public override CollectionDataView GetDataView(CollectionQuery query)
        {
            lock (cachedData)
            {
                var cacheState = GetCacheState(query);

                if (cacheState != CachedDataViewState.CompleteHit && isLoading == false && HasAllDataBeenLoaded(query) == false)
                {
                    isLoading = true;
                    pump.QueueAsyncAction(LoadMoreAsync(query, lastContinuationToken), (t) =>
                    {
                        if (t.Exception != null)
                        {
                            throw new AggregateException(t.Exception);
                        }
                        lock (cachedData)
                        {
                            CachedDataSet results;
                            if (cachedData.TryGetValue(query.CacheKey, out results) == false)
                            {
                                results = new CachedDataSet();
                                results.Items.AddRange(t.Result.Items);
                                cachedData.Add(query.CacheKey, results);
                            }
                            else
                            {
                                results.Items.AddRange(t.Result.Items);
                            }

                            if (t.Result.ContinuationToken == null)
                            {
                                results.IsComplete = true;
                            }
                        }

                        lastContinuationToken = t.Result.ContinuationToken;
                        isLoading             = false;
                        FireDataChanged();
                    });
                }

                if (cacheState == CachedDataViewState.CompleteHit)
                {
                    return(CreateFromCache(query, true, HasAllDataBeenLoaded(query) && IsEndOfCache(query)));
                }
                else if (cacheState == CachedDataViewState.CompleteMiss)
                {
                    return(new CollectionDataView(new List <object>(), HasAllDataBeenLoaded(query), HasAllDataBeenLoaded(query), query.Skip));
                }
                else
                {
                    return(CreateFromCache(query, HasAllDataBeenLoaded(query), HasAllDataBeenLoaded(query)));
                }
            }
        }
Ejemplo n.º 2
0
        public override CollectionDataView GetDataView(CollectionQuery query)
        {
            lock(cachedData)
            {
                var cacheState = GetCacheState(query);

                if (cacheState != CachedDataViewState.CompleteHit && isLoading == false && HasAllDataBeenLoaded(query) == false)
                {
                    isLoading = true;
                    pump.QueueAsyncAction(LoadMoreAsync(query, lastContinuationToken), (t) =>
                     {
                         if (t.Exception != null) throw new AggregateException(t.Exception);
                         lock (cachedData)
                         {
                             CachedDataSet results;
                             if (cachedData.TryGetValue(query.CacheKey, out results) == false)
                             {
                                 results = new CachedDataSet();
                                 results.Items.AddRange(t.Result.Items);
                                 cachedData.Add(query.CacheKey, results);
                             }
                             else
                             {
                                 results.Items.AddRange(t.Result.Items);
                             }

                             if (t.Result.ContinuationToken == null)
                             {
                                 results.IsComplete = true;
                             }
                         }

                         lastContinuationToken = t.Result.ContinuationToken;
                         isLoading = false;
                         FireDataChanged();
                     });
                }

                if (cacheState == CachedDataViewState.CompleteHit)
                {
                    return CreateFromCache(query, true, HasAllDataBeenLoaded(query) && IsEndOfCache(query));
                }
                else if (cacheState == CachedDataViewState.CompleteMiss)
                {
                    return new CollectionDataView(new List<object>(), HasAllDataBeenLoaded(query), HasAllDataBeenLoaded(query), query.Skip);
                }
                else
                {
                    return CreateFromCache(query, HasAllDataBeenLoaded(query), HasAllDataBeenLoaded(query));
                }
            }
        }