use of com.gh4a.utils.RxUtils in project gh4a by slapperwan.
the class IssueListActivity method filterMilestone.
private void filterMilestone() {
if (mMilestones != null) {
showMilestonesDialog();
} else {
final IssueMilestoneService service = ServiceFactory.get(IssueMilestoneService.class, false);
registerTemporarySubscription(ApiHelpers.PageIterator.toSingle(page -> service.getRepositoryMilestones(mRepoOwner, mRepoName, "open", page)).compose(RxUtils::doInBackground).compose(RxUtils.wrapWithProgressDialog(this, R.string.loading_msg)).subscribe(milestones -> {
mMilestones = milestones;
showMilestonesDialog();
}, this::handleLoadFailure));
}
}
use of com.gh4a.utils.RxUtils in project gh4a by slapperwan.
the class IssueEditActivity method loadMilestones.
private void loadMilestones() {
final IssueMilestoneService service = ServiceFactory.get(IssueMilestoneService.class, false);
registerTemporarySubscription(ApiHelpers.PageIterator.toSingle(page -> service.getRepositoryMilestones(mRepoOwner, mRepoName, "open", page)).compose(RxUtils::doInBackground).compose(RxUtils.wrapWithProgressDialog(this, R.string.loading_msg)).subscribe(result -> {
mAllMilestone = result;
showMilestonesDialog();
}, this::handleLoadFailure));
}
use of com.gh4a.utils.RxUtils in project gh4a by slapperwan.
the class UserPasswordLoginDialogFragment method makeLoginSingle.
private Single<Pair<String, User>> makeLoginSingle(LoginService.AuthorizationRequest request) {
return getService().createAuthorization(request).map(ApiHelpers::throwOnFailure).compose(RxUtils::doInBackground).flatMap(response -> {
UserService userService = ServiceFactory.get(UserService.class, true, null, response.token(), null);
Single<User> userSingle = userService.getUser().map(ApiHelpers::throwOnFailure).compose(RxUtils::doInBackground);
return Single.zip(Single.just(response), userSingle, (r, user) -> Pair.create(r.token(), user));
});
}
use of com.gh4a.utils.RxUtils in project gh4a by slapperwan.
the class ReactionBar method toggleReaction.
private static Single<Optional<Reaction>> toggleReaction(String content, long id, List<Reaction> existingDetails, Callback callback, Item item, ReactionDetailsCache cache) {
final Single<Optional<Reaction>> resultSingle;
if (id == 0) {
resultSingle = callback.addReaction(item, content).map(Optional::of);
} else {
ReactionService service = ServiceFactory.get(ReactionService.class, false);
resultSingle = service.deleteReaction(id).map(response -> Optional.absent());
}
return resultSingle.compose(RxUtils::doInBackground).doOnSuccess(reactionOpt -> {
if (reactionOpt.isPresent()) {
existingDetails.add(reactionOpt.get());
} else {
for (int i = 0; i < existingDetails.size(); i++) {
Reaction reaction = existingDetails.get(i);
if (reaction.id() == id) {
existingDetails.remove(i);
break;
}
}
}
cache.putEntry(item, existingDetails);
});
}
use of com.gh4a.utils.RxUtils in project gh4a by slapperwan.
the class EventListFragment method onItemClick.
@Override
public void onItemClick(GitHubEvent event) {
if (EventAdapter.hasInvalidPayload(event)) {
return;
}
GitHubEvent.RepoIdentifier eventRepo = event.repo();
String repoOwner = "";
String repoName = "";
Intent intent = null;
Single<Optional<Intent>> intentSingle = null;
if (eventRepo != null) {
String[] repoNamePart = eventRepo.repoWithUserName().split("/");
if (repoNamePart.length == 2) {
repoOwner = repoNamePart[0];
repoName = repoNamePart[1];
}
}
if (Arrays.binarySearch(REPO_EVENTS, event.type()) >= 0 && eventRepo == null) {
Toast.makeText(getActivity(), R.string.repo_not_found_toast, Toast.LENGTH_LONG).show();
return;
}
switch(event.type()) {
case CommitCommentEvent:
{
CommitCommentPayload payload = (CommitCommentPayload) event.payload();
GitComment comment = payload.comment();
if (comment != null) {
intentSingle = CommitCommentLoadTask.load(getActivity(), repoOwner, repoName, comment.commitId(), new IntentUtils.InitialCommentMarker(comment.id()));
}
break;
}
case CreateEvent:
{
CreatePayload payload = (CreatePayload) event.payload();
String ref = null;
if (payload.refType() == ReferenceType.Branch || payload.refType() == ReferenceType.Tag) {
ref = payload.ref();
}
intent = RepositoryActivity.makeIntent(getActivity(), repoOwner, repoName, ref);
break;
}
case DeleteEvent:
intent = RepositoryActivity.makeIntent(getActivity(), repoOwner, repoName);
break;
case DownloadEvent:
{
DownloadPayload payload = (DownloadPayload) event.payload();
Download download = payload.download();
UiUtils.enqueueDownloadWithPermissionCheck((BaseActivity) getActivity(), download.htmlUrl(), download.contentType(), download.name(), download.description(), null);
break;
}
case FollowEvent:
{
FollowPayload payload = (FollowPayload) event.payload();
intent = UserActivity.makeIntent(getActivity(), payload.target());
break;
}
case ForkEvent:
{
ForkPayload payload = (ForkPayload) event.payload();
Repository forkee = payload.forkee();
if (forkee != null) {
intent = RepositoryActivity.makeIntent(getActivity(), forkee);
} else {
Toast.makeText(getActivity(), R.string.repo_not_found_toast, Toast.LENGTH_LONG).show();
}
break;
}
case ForkApplyEvent:
intent = RepositoryActivity.makeIntent(getActivity(), repoOwner, repoName);
break;
case GistEvent:
{
GistPayload payload = (GistPayload) event.payload();
intent = GistActivity.makeIntent(getActivity(), payload.gist().id());
break;
}
case GollumEvent:
{
GollumPayload payload = (GollumPayload) event.payload();
intent = WikiListActivity.makeIntent(getActivity(), repoOwner, repoName, payload.pages().isEmpty() ? null : payload.pages().get(0));
break;
}
case IssueCommentEvent:
{
IssueCommentPayload payload = (IssueCommentPayload) event.payload();
Issue issue = payload.issue();
PullRequest request = issue != null ? issue.pullRequest() : null;
IntentUtils.InitialCommentMarker initialComment = payload.comment() != null ? new IntentUtils.InitialCommentMarker(payload.comment().id()) : null;
if (request != null && request.htmlUrl() != null) {
intent = PullRequestActivity.makeIntent(getActivity(), repoOwner, repoName, issue.number(), initialComment != null ? PullRequestActivity.PAGE_CONVERSATION : -1, initialComment);
} else if (issue != null) {
intent = IssueActivity.makeIntent(getActivity(), repoOwner, repoName, issue.number(), initialComment);
}
break;
}
case IssuesEvent:
{
IssuesPayload payload = (IssuesPayload) event.payload();
startActivity(IssueActivity.makeIntent(getActivity(), repoOwner, repoName, payload.issue().number()));
break;
}
case MemberEvent:
intent = RepositoryActivity.makeIntent(getActivity(), repoOwner, repoName);
break;
case PublicEvent:
intent = RepositoryActivity.makeIntent(getActivity(), repoOwner, repoName);
break;
case PullRequestEvent:
{
PullRequestPayload payload = (PullRequestPayload) event.payload();
intent = PullRequestActivity.makeIntent(getActivity(), repoOwner, repoName, payload.number());
break;
}
case PullRequestReviewCommentEvent:
{
PullRequestReviewCommentPayload payload = (PullRequestReviewCommentPayload) event.payload();
PullRequest pr = payload.pullRequest();
ReviewComment comment = payload.comment();
IntentUtils.InitialCommentMarker initialComment = comment != null ? new IntentUtils.InitialCommentMarker(comment.id()) : null;
if (pr != null) {
if (initialComment != null) {
intentSingle = PullRequestReviewCommentLoadTask.load(getActivity(), repoOwner, repoName, pr.number(), initialComment);
} else {
intent = PullRequestActivity.makeIntent(getActivity(), repoOwner, repoName, pr.number(), -1, null);
}
} else if (comment != null) {
intent = CommitActivity.makeIntent(getActivity(), repoOwner, repoName, comment.commitId(), initialComment);
}
break;
}
case PushEvent:
{
PushPayload payload = (PushPayload) event.payload();
List<GitCommit> commits = payload.commits();
if (commits != null && !commits.isEmpty()) {
if (commits.size() > 1) {
// if commit > 1, then show compare activity
intent = CompareActivity.makeIntent(getActivity(), repoOwner, repoName, payload.before(), payload.head());
} else {
// only 1 commit, then show the commit details
intent = CommitActivity.makeIntent(getActivity(), repoOwner, repoName, commits.get(0).sha());
}
} else {
intent = RepositoryActivity.makeIntent(getActivity(), repoOwner, repoName);
}
break;
}
case ReleaseEvent:
{
ReleasePayload payload = (ReleasePayload) event.payload();
Release release = payload.release();
if (release != null) {
intent = ReleaseInfoActivity.makeIntent(getActivity(), repoOwner, repoName, release.id());
}
break;
}
case WatchEvent:
intent = RepositoryActivity.makeIntent(getActivity(), repoOwner, repoName);
break;
}
if (intent != null) {
startActivity(intent);
} else if (intentSingle != null) {
intentSingle.compose(RxUtils::doInBackground).compose(RxUtils.wrapWithProgressDialog(getActivity(), R.string.loading_msg)).subscribe(result -> {
if (result.isPresent() && isAdded()) {
startActivity(result.get());
}
}, error -> Log.d(Gh4Application.LOG_TAG, "Loading click intent failed", error));
}
}
Aggregations