package com.fastaccess.ui.modules.repos.issues.create;
import android.app.Activity;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.fastaccess.R;
import com.fastaccess.data.dao.CreateIssueModel;
import com.fastaccess.data.dao.IssueRequestModel;
import com.fastaccess.data.dao.model.Issue;
import com.fastaccess.data.dao.model.PullRequest;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.provider.rest.RestProvider;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
/**
* Created by Kosh on 19 Feb 2017, 12:18 PM
*/
public class CreateIssuePresenter extends BasePresenter<CreateIssueMvp.View> implements CreateIssueMvp.Presenter {
@Override public void onActivityForResult(int resultCode, int requestCode, Intent intent) {
if (resultCode == Activity.RESULT_OK && requestCode == BundleConstant.REQUEST_CODE) {
if (intent != null && intent.getExtras() != null) {
CharSequence charSequence = intent.getExtras().getCharSequence(BundleConstant.EXTRA);
if (!InputHelper.isEmpty(charSequence)) {
sendToView(view -> view.onSetCode(charSequence));
}
}
}
}
@Override public void onSubmit(@NonNull String title, @NonNull CharSequence description,
@NonNull String login, @NonNull String repo,
@Nullable Issue issue, @Nullable PullRequest pullRequestModel) {
boolean isEmptyTitle = InputHelper.isEmpty(title);
if (getView() != null) {
getView().onTitleError(isEmptyTitle);
}
if (!isEmptyTitle) {
if (issue == null && pullRequestModel == null) {
CreateIssueModel createIssue = new CreateIssueModel();
createIssue.setBody(InputHelper.toString(description));
createIssue.setTitle(title);
makeRestCall(RestProvider.getIssueService().createIssue(login, repo, createIssue),
issueModel -> {
if (issueModel != null) {
sendToView(view -> view.onSuccessSubmission(issueModel));
} else {
sendToView(view -> view.showMessage(R.string.error, R.string.error_creating_issue));
}
});
} else {
if (issue != null) {
issue.setBody(InputHelper.toString(description));
issue.setTitle(title);
int number = issue.getNumber();
IssueRequestModel requestModel = IssueRequestModel.clone(issue, false);
makeRestCall(RestProvider.getIssueService().editIssue(login, repo, number, requestModel),
issueModel -> {
if (issueModel != null) {
sendToView(view -> view.onSuccessSubmission(issueModel));
} else {
sendToView(view -> view.showMessage(R.string.error, R.string.error_creating_issue));
}
});
}
if (pullRequestModel != null) {
int number = pullRequestModel.getNumber();
pullRequestModel.setBody(InputHelper.toString(description));
pullRequestModel.setTitle(title);
IssueRequestModel requestModel = IssueRequestModel.clone(pullRequestModel, false);
makeRestCall(RestProvider.getPullRequestService().editPullRequest(login, repo, number, requestModel)
.flatMap(pullRequest1 -> RestProvider.getIssueService().getIssue(login, repo, number),
(pullRequest1, issueReaction) -> {//hack to get reactions from issue api
if (issueReaction != null) {
pullRequest1.setReactions(issueReaction.getReactions());
}
return pullRequest1;
}), pr -> {
if (pr != null) {
sendToView(view -> view.onSuccessSubmission(pr));
} else {
sendToView(view -> view.showMessage(R.string.error, R.string.error_creating_issue));
}
});
}
}
}
}
}