Example #1
0
        protected override async Task <LoadMoreItemsResult> LoadMoreItemsAsyncCore(CancellationToken cancel, uint count)
        {
            LoadMoreItemsResult result = new LoadMoreItemsResult();

            if (string.IsNullOrWhiteSpace(keyword))
            {
                result.Count = 0;
                return(result);
            }
            var searchResult = await ApiService.Instance.SearchAsync(keyword, pageIndex ++);

            if (searchResult == null || searchResult.Documents.Length == 0)
            {
                hasMore      = false;
                result.Count = 0;
            }
            else
            {
                foreach (var item in searchResult.Documents)
                {
                    Add(item);
                }
                result.Count = (uint)searchResult.Documents.Length;
            }
            return(result);
        }
Example #2
0
        /// <summary>
        /// 加载更多
        /// IsLoading 作为标志位
        /// </summary>
        /// <param name="count"></param>
        /// <returns></returns>
        private async Task <LoadMoreItemsResult> LoadMoreItemsFromDataSourceAsync(CancellationToken passedToken, uint count)
        {
            var result = new LoadMoreItemsResult();

            IsLoading  = true;
            this.token = passedToken;
            BindableCollection <T> tempList = null;

            try
            {
                var startIndex = (uint)Count;
                tempList = await func(passedToken, startIndex);

                var itemsAddedCount = AddRange(tempList);
                _hasMoreItems = (_dataSourceCount > Count);

                result.Count = itemsAddedCount;
            }
            finally
            {
                IsLoading = false;
            }

            return(result);
        }
        private async Task <LoadMoreItemsResult> LoadDataAsync(uint count)
        {
            if (!IsLoading)
            {
                LoadFeedList(Username);
            }
            var ret = new LoadMoreItemsResult {
                Count = count
            };

            return(ret);
        }
Example #4
0
        private async Task <LoadMoreItemsResult> LoadDataAsync(uint count)
        {
            if (!IsLoading)
            {
                await LoadTrophies(Username);
            }
            var ret = new LoadMoreItemsResult {
                Count = count
            };

            return(ret);
        }
        private async Task <LoadMoreItemsResult> LoadDataAsync(uint count)
        {
            if (!IsLoading)
            {
                LoadInvites();
            }
            var ret = new LoadMoreItemsResult {
                Count = count
            };

            return(ret);
        }
Example #6
0
        protected override async Task <LoadMoreItemsResult> LoadMoreItemsAsyncCore(CancellationToken cancel, uint count)
        {
            LoadMoreItemsResult result = new LoadMoreItemsResult();
            var channels = await ApiService.Instance.GetChannelsAsync(page ++);

            if (channels != null && channels.Channels != null)
            {
                result.Count = (uint)channels.Channels.Length;
                foreach (var item in channels.Channels)
                {
                    Add(item);
                }
            }
            return(result);
        }
        public Windows.Foundation.IAsyncOperation <LoadMoreItemsResult> LoadMoreItemsAsync(uint count)
        {
            if (isRunning) //not thread safe
            {
                throw new InvalidOperationException("Only one operation in flight at a time");
            }

            isRunning = true;

            int itemsCount = 0;

            return(AsyncInfo.Run(async c =>
            {
                try
                {
                    currentPage++;
                    FlickrRepository repository = new FlickrRepository();
                    var result = await repository.LoadImages(currentPage, title);

                    var photos = new PhotoCollection();
                    if (result != null)
                    {
                        photos = result;
                        HasMoreItems = result.Any();
                        itemsCount = result.Count;
                    }

                    foreach (var item in photos)
                    {
                        this.Add(item);
                    }

                    isRunning = false;
                }
                catch (Exception ex)
                {
                    HasMoreItems = false;
                    exManager.PublishError(ex.Message);
                }

                LoadMoreItemsResult res = new LoadMoreItemsResult()
                {
                    Count = (uint)itemsCount
                };
                return res;
            }));
        }
Example #8
0
        public IAsyncOperation <LoadMoreItemsResult> LoadMoreItemsAsync(uint count)
        {
            Debug.WriteLine($"LoadMoreItemsAsync {count}");

            // Load more...
            return(Task.Run(async() =>
            {
                var res = new LoadMoreItemsResult {
                    Count = 10
                };
                var disp = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher;
                await disp.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    GrowList(10);
                });
                return res;
            }).AsAsyncOperation());
        }
Example #9
0
        /// <summary>
        /// Effectively this implementation ignores count argument.
        /// It just loads another page of data if needed
        /// </summary>
        private async Task <LoadMoreItemsResult> PerformPageLoading(int count)
        {
            IIncrementalLoadResponse <TItem> response = await _incrementalLoadSource.Fetch(count);

            if (!_isInitialLoadDone)
            {
                _totalItemCount    = response.TotalItemCount;
                _isInitialLoadDone = true;
            }

            foreach (TItem item in response.Items)
            {
                this.Add(item);
            }

            LoadMoreItemsResult result =
                new LoadMoreItemsResult
            {
                Count = (uint)response.Items.Count()
            };

            return(result);
        }
        // This function is called by the incremental loading helpers and it instructs the API readers to read "next page".
        public async Task <LoadMoreItemsResult> ReadApiAheadAsync()
        {
            var holder = new LoadMoreItemsResult();

            var currentSize    = photos.Count;
            var responseObject = await apiReader.GetResponseAsync(keywords);

            photos.AddRange(responseObject.photos.photo);

            // Mark the count of elements loaded.
            holder.Count = (uint)responseObject.photos.photo.Count;

            // Create the ViewModel
            foreach (var photo in photos)
            {
                // Store the important photo details.
                var item = new FlickrResponseViewModel();
                item.Description = photo.title;
                item.Id          = photo.id;
                item.UserId      = photo.owner;
                item.PhotoId     = photo.id;
                item.PhotoSecret = photo.secret;

                var url = $"https://farm{photo.farm}.staticflickr.com/{photo.server}/{photo.id}_{photo.secret}.jpg";

                // Small image 320x320 for efficient loading on search results page.
                var smallImageUrl = $"https://farm{photo.farm}.staticflickr.com/{photo.server}/{photo.id}_{photo.secret}_n.jpg";
                item.ImageUri      = new Uri(url);
                item.SmallImageUri = new Uri(smallImageUrl);

                viewModel.Add(item);
            }

            // Raise the event to update UI
            UpdateUIForItems(currentSize, perPage);
            return(holder);
        }
Example #11
0
        protected override async Task <LoadMoreItemsResult> LoadMoreItemsAsync(CancellationToken c, uint count)
        {
            try
            {
                if (!HasMoreItems)
                {
                    return new LoadMoreItemsResult()
                           {
                               Count = 0
                           }
                }
                ;
                LoadMoreItemsResult toret = new LoadMoreItemsResult()
                {
                    Count = 0
                };
                PixivCS.Objects.SearchIllustResult searchres = null;
                try
                {
                    if (nexturl == "begin")
                    {
                        searchres = await new PixivCS
                                    .PixivAppAPI(OverAll.GlobalBaseAPI)
                                    .GetSearchIllustAsync(word, searchTarget, sort, duration);
                    }
                    else
                    {
                        Uri next = new Uri(nexturl);
                        string getparam(string param) => HttpUtility.ParseQueryString(next.Query).Get(param);

                        var test = getparam("duration");
                        searchres = await new PixivCS
                                    .PixivAppAPI(OverAll.GlobalBaseAPI)
                                    .GetSearchIllustAsync(getparam("word"), getparam("search_target"),
                                                          getparam("sort"), getparam("duration"), getparam("filter"), getparam("offset"));
                    }
                }
                catch
                {
                    return(toret);
                }
                nexturl = searchres.NextUrl?.ToString() ?? "";
                foreach (var recillust in searchres.Illusts)
                {
                    await Task.Run(() => pause.WaitOne());

                    if (_emergencyStop)
                    {
                        nexturl = "";
                        Clear();
                        return(new LoadMoreItemsResult()
                        {
                            Count = 0
                        });
                    }
                    WaterfallItem recommendi     = WaterfallItem.FromObject(recillust);
                    var           recommendmodel = ViewModels.WaterfallItemViewModel.FromItem(recommendi);
                    await recommendmodel.LoadImageAsync();

                    Add(recommendmodel);
                    toret.Count++;
                }
                return(toret);
            }
            finally
            {
                _busy = false;
                if (_emergencyStop)
                {
                    nexturl = "";
                    Clear();
                    GC.Collect();
                }
            }
        }
Example #12
0
        protected override async Task <LoadMoreItemsResult> LoadMoreItemsAsync(CancellationToken c, uint count)
        {
            try
            {
                if (!HasMoreItems)
                {
                    return new LoadMoreItemsResult()
                           {
                               Count = 0
                           }
                }
                ;
                LoadMoreItemsResult toret = new LoadMoreItemsResult()
                {
                    Count = 0
                };
                PixivCS.Objects.IllustComments commentres = null;
                try
                {
                    if (nexturl == "begin")
                    {
                        commentres = await new PixivCS
                                     .PixivAppAPI(OverAll.GlobalBaseAPI)
                                     .GetIllustCommentsAsync(illustid, IncludeTotalComments: true);
                    }
                    else
                    {
                        Uri next = new Uri(nexturl);
                        string getparam(string param) => HttpUtility.ParseQueryString(next.Query).Get(param);

                        commentres = await new PixivCS
                                     .PixivAppAPI(OverAll.GlobalBaseAPI)
                                     .GetIllustCommentsAsync(illustid, getparam("offset"), bool.Parse(getparam("include_total_comments")));
                    }
                }
                catch
                {
                    return(toret);
                }
                nexturl = commentres.NextUrl?.ToString() ?? "";
                foreach (var recillust in commentres.Comments)
                {
                    await Task.Run(() => pause.WaitOne());

                    if (_emergencyStop)
                    {
                        nexturl = "";
                        Clear();
                        return(new LoadMoreItemsResult()
                        {
                            Count = 0
                        });
                    }
                    IllustCommentItem recommendi = IllustCommentItem.FromObject(recillust);
                    var recommendmodel           = ViewModels.CommentViewModel.FromItem(recommendi);
                    //查找是否存在子回复
                    var children = from item
                                   in ChildrenComments
                                   where item.ParentID == recommendmodel.ID
                                   select item;
                    children = children.ToList();
                    if (children.Count() > 0)
                    {
                        //存在子回复
                        recommendmodel.ChildrenComments = new ObservableCollection <ViewModels.CommentViewModel>();
                        foreach (var child in children)
                        {
                            if (child.ChildrenComments != null)
                            {
                                foreach (var childschild in child.ChildrenComments)
                                {
                                    childschild.Comment = string.Format("Re: {0}: {1}",
                                                                        child.UserName, childschild.Comment);
                                    recommendmodel.ChildrenComments.Add(childschild);
                                }
                                child.ChildrenComments.Clear();
                                child.ChildrenComments = null;
                                GC.Collect();
                            }
                            recommendmodel.ChildrenComments.Insert(0, child);
                            ChildrenComments.Remove(child);
                        }
                    }
                    //检查自己是不是子回复
                    if (recommendmodel.ParentID != -1)
                    {
                        //自己也是子回复
                        ChildrenComments.Add(recommendmodel);
                    }
                    else
                    {
                        //自己并非子回复
                        Add(recommendmodel);
                        toret.Count++;
                    }
                }
                return(toret);
            }
            finally
            {
                _busy = false;
                _     = AvatarLoader.LoadAvatars();
                if (_emergencyStop)
                {
                    AvatarLoader.EmergencyStop();
                    nexturl = "";
                    Clear();
                    GC.Collect();
                }
            }
        }
        protected override async Task <LoadMoreItemsResult> LoadMoreItemsAsync(CancellationToken c, uint count)
        {
            try
            {
                LoadMoreItemsResult toret = new LoadMoreItemsResult {
                    Count = 0
                };
                if (!HasMoreItems)
                {
                    return(toret);
                }
                PixivCS.Objects.IllustRecommended recommendres = null;
                try
                {
                    Debug.WriteLine($"[RecommendIllustsCollection.LoadMoreItemsAsync]\t{nexturl}");
                    if (nexturl == "begin")
                    {
                        recommendres = await new PixivAppAPI(OverAll.GlobalBaseAPI)
                                       .GetIllustRecommendedAsync();
                    }
                    else
                    {
                        Uri next = new Uri(nexturl);
                        string getparam(string param) => HttpUtility.ParseQueryString(next.Query).Get(param);

                        recommendres = await new PixivAppAPI(OverAll.GlobalBaseAPI)
                                       .GetIllustRecommendedAsync(
                            ContentType: getparam("content_type"),
                            IncludeRankingLabel: bool.Parse(getparam("include_ranking_label")),
                            Filter: getparam("filter"),
                            MinBookmarkIDForRecentIllust: getparam("min_bookmark_id_for_recent_illust"),
                            MaxBookmarkIDForRecommended: getparam("max_bookmark_id_for_recommend"),
                            Offset: getparam("offset"),
                            IncludeRankingIllusts: bool.Parse(getparam("include_ranking_illusts")),
                            IncludePrivacyPolicy: getparam("include_privacy_policy"));
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex);
                    return(toret);
                }
                nexturl = recommendres.NextUrl?.ToString() ?? "";
                Debug.WriteLine($"[RecommendIllustsCollection.LoadMoreItemsAsync]\t{nexturl}");
                if (recommendres.Illusts is null)
                {
                    Debug.WriteLine("出现了NULL");
                    // 这里调用更新身份信息的方法

                    Debug.WriteLine("Done");
                }
                else
                {
                    foreach (var recillust in recommendres.Illusts)
                    {
                        await Task.Run(pause.WaitOne);

                        Debug.WriteLine($"[RecommendIllustsCollection.LoadMoreItemsAsync]\t加载图片:{toret.Count + 1}/{recommendres.Illusts.Length}");
                        if (_emergencyStop)
                        {
                            Debug.WriteLine("_emergencyStop = " + _emergencyStop);
                            nexturl = "";
                            Clear();
                            return(new LoadMoreItemsResult {
                                Count = 0
                            });
                        }
                        WaterfallItem recommendi     = WaterfallItem.FromObject(recillust);
                        var           recommendmodel = ViewModels.WaterfallItemViewModel.FromItem(recommendi);
                        await recommendmodel.LoadImageAsync();

                        Add(recommendmodel);
                        toret.Count++;
                    }
                }
                return(toret);
            }
            finally
            {
                LoadMoreItemsAsync_Finally();
            }
        }
        protected override async Task <LoadMoreItemsResult> LoadMoreItemsAsync(CancellationToken c, uint count)
        {
            try
            {
                LoadMoreItemsResult toret = new LoadMoreItemsResult {
                    Count = 0
                };
                if (!HasMoreItems)
                {
                    return(toret);
                }
                PixivCS.Objects.UserIllusts bookmarkres = null;
                try
                {
                    if (nexturl == "begin")
                    {
                        bookmarkres = await new PixivCS
                                      .PixivAppAPI(OverAll.GlobalBaseAPI)
                                      .GetUserBookmarksIllustAsync(userID);
                    }
                    else
                    {
                        Uri next = new Uri(nexturl);
                        string getparam(string param) => HttpUtility.ParseQueryString(next.Query).Get(param);

                        bookmarkres = await new PixivCS
                                      .PixivAppAPI(OverAll.GlobalBaseAPI)
                                      .GetUserBookmarksIllustAsync(userID, getparam("restrict"),
                                                                   getparam("filter"), getparam("max_bookmark_id"));
                    }
                }
                catch
                {
                    return(toret);
                }
                nexturl = bookmarkres.NextUrl?.ToString() ?? "";
                foreach (var recillust in bookmarkres.Illusts)
                {
                    await Task.Run(() => pause.WaitOne());

                    if (_emergencyStop)
                    {
                        nexturl = "";
                        Clear();
                        return(new LoadMoreItemsResult()
                        {
                            Count = 0
                        });
                    }
                    WaterfallItem recommendi     = WaterfallItem.FromObject(recillust);
                    var           recommendmodel = ViewModels.WaterfallItemViewModel.FromItem(recommendi);
                    await recommendmodel.LoadImageAsync();

                    Add(recommendmodel);
                    toret.Count++;
                }
                return(toret);
            }
            finally
            {
                LoadMoreItemsAsync_Finally();
            }
        }