private async Task <TPaginated> GetPageUncheckedAsync(int index)
        {
            lock (PageCache)
            {
                if (index < PageCache.Count && PageCache[index] != null)
                {
                    return(PageCache[index]);
                }
            }

            var newParameters = Parameters != null ? new HttpValueCollection(Parameters) : new HttpValueCollection();

            newParameters.SetPage(index + 1);
            newParameters.SetLimit(ResultsPerPage);

            var page = await CoinbaseClient.GetAsync <TPaginated>(Endpoint, newParameters, Converters).ConfigureAwait(false);

            if (page.CurrentPage <= page.NumPages)
            {
                Contract.Assert(index == (page.CurrentPage - 1));

                lock (PageCache)
                {
                    while (index >= PageCache.Count)
                    {
                        PageCache.Add(null);
                    }

                    PageCache[index] = page;
                }
            }

            return(page);
        }
Beispiel #2
0
        // todo: do we need this functionality?
        internal static TViewModel RegisterView <TViewModel>(
            Page page)

            where TViewModel : class, IViewModel
        {
            var viewType = page.GetType();

            var registrationInfo = new NavigationRegistration
            {
                ViewModelType = typeof(TViewModel),
                ViewType      = viewType
            };

            RegisterInternal(registrationInfo);

            var cachedPage = new CachedPage(page);

            PageCache.Add(cachedPage);

            var viewModel = dependencyResolver.Resolve <TViewModel>();

            if (viewModel != null)
            {
                TaskHelper.RunSync(
                    viewModel.InitializeAsync);
            }

            return(viewModel);
        }