private void InsertPostList(IEnumerable <Post> posts, int delay = 0) { IEnumerable <PostViewModel> newPosts = posts .Where(x => !_seenPosts.Contains(x.Number)) .Select(x => new PostViewModel(x) { Tapped = new ModelCommand(() => { if (App.IsPostTapAllowed) { PostTapped(x.Number); } }), NumberTapped = new ModelCommand(() => { if (App.IsPostTapAllowed) { OpenQuoteRegion(x.Number); } }), ViewQuotes = new ModelCommand(() => { if (App.IsPostTapAllowed) { OpenQuoteRegion(x.Number); } }), QuoteTapped = new ModelCommand <ulong>(postID => OpenQuoteRegion(postID)) }).ToList(); bool hasScrollTarget = false; PostViewModel scrollTarget = null; foreach (PostViewModel post in newPosts) { _seenPosts.Add(post.Number); if (post.Number == _scrollTarget) { hasScrollTarget = true; scrollTarget = post; } } AllPosts.AddRange(newPosts, delay); ImagePosts.AddRange(newPosts.Where(x => x.HasImage), delay); SelectedPosts.AddRange(newPosts.Where(x => x.Number == _quotedPost || x.QuotesPost(_quotedPost)), delay); if (hasScrollTarget) { AllPosts.Flush(); ScrollTargetLoaded(this, scrollTarget); } }
private void OpenQuoteRegion(ulong postID) { if (IsPosting) { return; } // We have to use .All() to get posts that are queued, but not yet inserted too. IEnumerable <PostViewModel> posts = AllPosts.All().Where(x => x.Number == postID || x.QuotesPost(postID)); SelectedPosts.Clear(); SelectedPosts.IsPaused = false; SelectedPosts.AddRange(posts, 20); QuotedTitle = ">>" + postID; _quotedPost = postID; GoToState(PostsPageViewState.Quotes); }