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); }
/// <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); }
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); }
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; })); }
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()); }
/// <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); }
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(); } } }
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(); } }