package com.fastaccess.ui.modules.repos.pull_requests.pull_request.details.files;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.MenuInflater;
import android.view.View;
import android.widget.PopupMenu;
import com.fastaccess.R;
import com.fastaccess.data.dao.CommitFileModel;
import com.fastaccess.helper.ActivityHelper;
import com.fastaccess.helper.AppHelper;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.provider.rest.RestProvider;
import com.fastaccess.ui.base.mvp.BaseMvp;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import com.fastaccess.ui.modules.repos.code.commit.details.CommitPagerActivity;
import com.fastaccess.ui.modules.repos.code.commit.viewer.FullCommitFileActivity;
import java.util.ArrayList;
/**
* Created by Kosh on 03 Dec 2016, 3:48 PM
*/
class PullRequestFilesPresenter extends BasePresenter<PullRequestFilesMvp.View> implements PullRequestFilesMvp.Presenter {
private ArrayList<CommitFileModel> files = new ArrayList<>();
private String login;
private String repoId;
private long number;
private int page;
private int previousTotal;
private int lastPage = Integer.MAX_VALUE;
@Override public int getCurrentPage() {
return page;
}
@Override public int getPreviousTotal() {
return previousTotal;
}
@Override public void setCurrentPage(int page) {
this.page = page;
}
@Override public void setPreviousTotal(int previousTotal) {
this.previousTotal = previousTotal;
}
@Override public void onError(@NonNull Throwable throwable) {
onWorkOffline();
super.onError(throwable);
}
@Override public void onCallApi(int page, @Nullable Object parameter) {
if (page == 1) {
lastPage = Integer.MAX_VALUE;
sendToView(view -> view.getLoadMore().reset());
}
setCurrentPage(page);
if (page > lastPage || lastPage == 0) {
sendToView(PullRequestFilesMvp.View::hideProgress);
return;
}
if (repoId == null || login == null) return;
makeRestCall(RestProvider.getPullRequestService().getPullRequestFiles(login, repoId, number, page),
response -> {
lastPage = response.getLast();
sendToView(view -> view.onNotifyAdapter(response.getItems(), page));
});
}
@Override public void onFragmentCreated(@NonNull Bundle bundle) {
repoId = bundle.getString(BundleConstant.ID);
login = bundle.getString(BundleConstant.EXTRA);
number = bundle.getLong(BundleConstant.EXTRA_TWO);
if (!InputHelper.isEmpty(login) && !InputHelper.isEmpty(repoId)) {
onCallApi(1, null);
}
}
@NonNull @Override public ArrayList<CommitFileModel> getFiles() {
return files;
}
@Override public void onWorkOffline() {
sendToView(BaseMvp.FAView::hideProgress);
}
@Override public void onItemClick(int position, View v, CommitFileModel item) {
if (v.getId() == R.id.open) {
PopupMenu popup = new PopupMenu(v.getContext(), v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.commit_row_menu, popup.getMenu());
popup.setOnMenuItemClickListener(item1 -> {
switch (item1.getItemId()) {
case R.id.open:
FullCommitFileActivity.start(v.getContext(), item);
break;
case R.id.share:
ActivityHelper.shareUrl(v.getContext(), item.getBlobUrl());
break;
case R.id.download:
Activity activity = ActivityHelper.getActivity(v.getContext());
if (activity == null) break;
if (ActivityHelper.checkAndRequestReadWritePermission(activity)) {
RestProvider.downloadFile(v.getContext(), item.getRawUrl());
}
break;
case R.id.copy:
AppHelper.copyToClipboard(v.getContext(), item.getBlobUrl());
break;
}
return true;
});
popup.show();
}
}
@Override public void onItemLongClick(int position, View v, CommitFileModel item) {
v.getContext().startActivity(CommitPagerActivity.createIntent(v.getContext(), repoId, login, Uri.parse(item.getContentsUrl())
.getQueryParameter("ref")));
}
}