public Single<FullIssue> refresh() {
        return store.refreshIssue(repo, issueNumber)
                .flatMap(issue -> {
                    if (issue.pullRequest() != null) {
                        return getPullRequest(repo.owner().login(), repo.name(), issueNumber)
                                .map(pullRequest -> issue.toBuilder()
                                        .pullRequest(pullRequest)
                                        .build());
                    }

                    return Single.just(issue);
                })
                .flatMap(issue -> getAllComments(repo.owner().login(), repo.name(), issue)
                        .zipWith(Single.just(issue),
                                (comments, issue1) -> new FullIssue(issue1, comments, Collections.emptyList())))
                .zipWith(getAllEvents(repo.owner().login(), repo.name(), issueNumber),
                        (fullIssue, issueEvents) -> new FullIssue(fullIssue.getIssue(),
                                fullIssue.getComments(), issueEvents))
                .map(fullIssue -> {
                    Issue issue = fullIssue.getIssue();
                    bodyImageGetter.encode(issue.id(), issue.bodyHtml());
                    for (GitHubComment comment : fullIssue.getComments()) {
                        commentImageGetter.encode(comment.id(), comment.bodyHtml());
                    }
                    return fullIssue;
                });
    }
Fetches an issue and it's comments, event and pull request if applicable.

@return {@link Single} for a {@link FullIssue}
app/src/main/java/com/github/pockethub/android/core/issue/RefreshIssueTask.java