package com.fastaccess.ui.modules.repos.code.commit.details;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.fastaccess.data.dao.MarkdownModel;
import com.fastaccess.data.dao.model.Commit;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.RxHelper;
import com.fastaccess.provider.rest.RestProvider;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import rx.Observable;
/**
* Created by Kosh on 10 Dec 2016, 9:23 AM
*/
class CommitPagerPresenter extends BasePresenter<CommitPagerMvp.View> implements CommitPagerMvp.Presenter {
private Commit commitModel;
private String sha;
private String login;
private String repoId;
private boolean showToRepoBtn;
@Nullable @Override public Commit getCommit() {
return commitModel;
}
@Override public void onError(@NonNull Throwable throwable) {
if (RestProvider.getErrorCode(throwable) == 404) {
sendToView(CommitPagerMvp.View::onFinishActivity);
} else {
onWorkOffline(sha, repoId, login);
}
super.onError(throwable);
}
@Override public void onActivityCreated(@Nullable Intent intent) {
if (intent != null && intent.getExtras() != null) {
sha = intent.getExtras().getString(BundleConstant.ID);
login = intent.getExtras().getString(BundleConstant.EXTRA);
repoId = intent.getExtras().getString(BundleConstant.EXTRA_TWO);
showToRepoBtn = intent.getExtras().getBoolean(BundleConstant.EXTRA_THREE);
if (commitModel != null) {
sendToView(CommitPagerMvp.View::onSetup);
return;
} else if (!InputHelper.isEmpty(sha) && !InputHelper.isEmpty(login) && !InputHelper.isEmpty(repoId)) {
makeRestCall(RestProvider.getRepoService()
.getCommit(login, repoId, sha)
.flatMap(commit -> {
if (commit.getGitCommit() != null && commit.getGitCommit().getMessage() != null) {
MarkdownModel markdownModel = new MarkdownModel();
markdownModel.setContext(login + "/" + repoId);
markdownModel.setText(commit.getGitCommit().getMessage());
return RestProvider.getRepoService().convertReadmeToHtml(markdownModel)
.onErrorReturn(throwable -> null);
}
return Observable.just(commit);
}, (commit, u) -> {
if (!InputHelper.isEmpty(u) && u instanceof String) {
commit.getGitCommit().setMessage(u.toString());
}
return commit;
}),
commit -> {
commitModel = commit;
commitModel.setRepoId(repoId);
commitModel.setLogin(login);
sendToView(CommitPagerMvp.View::onSetup);
manageSubscription(commitModel.save(commitModel).subscribe());
});
return;
}
}
sendToView(CommitPagerMvp.View::onSetup);
}
@Override public void onWorkOffline(@NonNull String sha, @NonNull String repoId, @NonNull String login) {
manageSubscription(RxHelper.getObserver(Commit.getCommit(sha, repoId, login))
.subscribe(commit -> {
commitModel = commit;
sendToView(CommitPagerMvp.View::onSetup);
}));
}
@Override public String getLogin() {
return login;
}
@Override public String getRepoId() {
return repoId;
}
@Override public boolean showToRepoBtn() {
return showToRepoBtn;
}
}