public IObservable <IPullRequestModel> GetPullRequest(string owner, string name, int number) { return(Observable.Defer(() => { return hostCache.GetAndRefreshObject(PRPrefix + '|' + number, () => Observable.CombineLatest( ApiClient.GetPullRequest(owner, name, number), ApiClient.GetPullRequestFiles(owner, name, number).ToList(), ApiClient.GetIssueComments(owner, name, number).ToList(), GetPullRequestReviews(owner, name, number).ToObservable(), GetPullRequestReviewComments(owner, name, number).ToObservable(), (pr, files, comments, reviews, reviewComments) => new { PullRequest = pr, Files = files, Comments = comments, Reviews = reviews, ReviewComments = reviewComments }) .Select(x => PullRequestCacheItem.Create( x.PullRequest, (IReadOnlyList <PullRequestFile>)x.Files, (IReadOnlyList <IssueComment>)x.Comments, (IReadOnlyList <IPullRequestReviewModel>)x.Reviews, (IReadOnlyList <IPullRequestReviewCommentModel>)x.ReviewComments)), TimeSpan.Zero, TimeSpan.FromDays(7)) .Select(Create); })); }
public IObservable <IPullRequestModel> GetPullRequest(ILocalRepositoryModel repo, int number) { return(Observable.Defer(() => { return hostCache.GetAndRefreshObject(PRPrefix + '|' + number, () => Observable.CombineLatest( apiClient.GetPullRequest(repo.CloneUrl.Owner, repo.CloneUrl.RepositoryName, number), apiClient.GetPullRequestFiles(repo.CloneUrl.Owner, repo.CloneUrl.RepositoryName, number).ToList(), apiClient.GetIssueComments(repo.CloneUrl.Owner, repo.CloneUrl.RepositoryName, number).ToList(), apiClient.GetPullRequestReviewComments(repo.CloneUrl.Owner, repo.CloneUrl.RepositoryName, number).ToList(), (pr, files, comments, reviewComments) => new { PullRequest = pr, Files = files, Comments = comments, ReviewComments = reviewComments }) .Select(x => PullRequestCacheItem.Create( x.PullRequest, (IReadOnlyList <PullRequestFile>)x.Files, (IReadOnlyList <IssueComment>)x.Comments, (IReadOnlyList <PullRequestReviewComment>)x.ReviewComments)), TimeSpan.Zero, TimeSpan.FromDays(7)) .Select(Create); })); }