mirror of
https://github.com/k0shk0sh/FastHub.git
synced 2025-12-08 19:05:54 +00:00
caching repo files directory to access them faster, fix for issue labeling where it might be displayed if the user is not the owner of the repo.
This commit is contained in:
parent
831568c9b9
commit
3fd6c597c0
@ -38,6 +38,10 @@ interface RepoFilesMvp {
|
||||
void onCallApi();
|
||||
|
||||
void onInitDataAndRequest(@NonNull String login, @NonNull String repoId, @Nullable String path);
|
||||
|
||||
@Nullable ArrayList<RepoFilesModel> getCachedFiles(@NonNull String url);
|
||||
|
||||
void cacheFiles(@NonNull String url, @NonNull ArrayList<RepoFilesModel> files);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -9,10 +9,13 @@ import com.annimon.stream.Stream;
|
||||
import com.fastaccess.R;
|
||||
import com.fastaccess.data.dao.RepoFilesModel;
|
||||
import com.fastaccess.data.dao.types.FilesType;
|
||||
import com.fastaccess.helper.Logger;
|
||||
import com.fastaccess.provider.rest.RestProvider;
|
||||
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
@ -22,6 +25,7 @@ import rx.Observable;
|
||||
|
||||
class RepoFilesPresenter extends BasePresenter<RepoFilesMvp.View> implements RepoFilesMvp.Presenter {
|
||||
private ArrayList<RepoFilesModel> files = new ArrayList<>();
|
||||
private HashMap<String, ArrayList<RepoFilesModel>> cachedFiles = new LinkedHashMap<>();
|
||||
private String repoId;
|
||||
private String login;
|
||||
private String path;
|
||||
@ -62,21 +66,42 @@ class RepoFilesPresenter extends BasePresenter<RepoFilesMvp.View> implements Rep
|
||||
if (repoId == null || login == null) return;
|
||||
makeRestCall(RestProvider.getRepoService().getRepoFiles(login, repoId, path),
|
||||
response -> {
|
||||
getFiles().clear();
|
||||
files.clear();
|
||||
manageSubscription(RepoFilesModel.save(response.getItems(), login, repoId).subscribe());
|
||||
getFiles().addAll(Stream.of(response.getItems()).sortBy(model -> model.getType() == FilesType.file)
|
||||
.collect(com.annimon.stream.Collectors.toList()));
|
||||
ArrayList<RepoFilesModel> repoFilesModels = Stream.of(response.getItems())
|
||||
.sortBy(model -> model.getType() == FilesType.file)
|
||||
.collect(com.annimon.stream.Collectors.toCollection(ArrayList::new));
|
||||
cachedFiles.put(path, repoFilesModels);
|
||||
files.addAll(repoFilesModels);
|
||||
sendToView(RepoFilesMvp.View::onNotifyAdapter);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override public void onInitDataAndRequest(@NonNull String login, @NonNull String repoId, @Nullable String path) {
|
||||
this.login = login;
|
||||
this.repoId = repoId;
|
||||
if (!Objects.toString(path, "").equalsIgnoreCase(this.path)) {
|
||||
this.path = Objects.toString(path, "");
|
||||
onCallApi();
|
||||
ArrayList<RepoFilesModel> cachedFiles = getCachedFiles(Objects.toString(path, ""));
|
||||
if (cachedFiles != null && !cachedFiles.isEmpty()) {
|
||||
Logger.e(files.size());
|
||||
files.clear();
|
||||
files.addAll(cachedFiles);
|
||||
Logger.e(files.size(), cachedFiles.size());
|
||||
sendToView(RepoFilesMvp.View::onNotifyAdapter);
|
||||
} else {
|
||||
this.login = login;
|
||||
this.repoId = repoId;
|
||||
if (!Objects.toString(path, "").equalsIgnoreCase(this.path)) {
|
||||
this.path = Objects.toString(path, "");
|
||||
onCallApi();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable @Override public ArrayList<RepoFilesModel> getCachedFiles(@NonNull String url) {
|
||||
return cachedFiles.get(url);
|
||||
}
|
||||
|
||||
@Override public void cacheFiles(@NonNull String url, @NonNull ArrayList<RepoFilesModel> files) {
|
||||
Logger.e(url, files);
|
||||
cachedFiles.put(url, files);
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,6 +41,8 @@ interface IssuePagerMvp {
|
||||
|
||||
boolean isOwner();
|
||||
|
||||
boolean isRepoOwner();
|
||||
|
||||
boolean isLocked();
|
||||
|
||||
void onHandleConfirmDialog(@Nullable Bundle bundle);
|
||||
|
||||
@ -93,6 +93,15 @@ class IssuePagerPresenter extends BasePresenter<IssuePagerMvp.View> implements I
|
||||
|| (parser != null && parser.getLogin().equalsIgnoreCase(me.getLogin()));
|
||||
}
|
||||
|
||||
@Override public boolean isRepoOwner() {
|
||||
if (getIssue() == null) return false;
|
||||
UserModel userModel = getIssue() != null ? getIssue().getUser() : null;
|
||||
LoginModel me = LoginModel.getUser();
|
||||
PullsIssuesParser parser = PullsIssuesParser.getForPullRequest(getIssue().getHtmlUrl());
|
||||
return userModel != null && userModel.getLogin().equalsIgnoreCase(me.getLogin())
|
||||
|| (parser != null && parser.getLogin().equalsIgnoreCase(me.getLogin()));
|
||||
}
|
||||
|
||||
@Override public boolean isLocked() {
|
||||
return getIssue() != null && getIssue().isLocked();
|
||||
}
|
||||
|
||||
@ -116,7 +116,7 @@ public class IssuePagerView extends BaseActivity<IssuePagerMvp.View, IssuePagerP
|
||||
getMenuInflater().inflate(R.menu.issue_menu, menu);
|
||||
menu.findItem(R.id.closeIssue).setVisible(getPresenter().isOwner());
|
||||
menu.findItem(R.id.lockIssue).setVisible(getPresenter().isOwner());
|
||||
menu.findItem(R.id.labels).setVisible(getPresenter().isOwner());
|
||||
menu.findItem(R.id.labels).setVisible(getPresenter().isRepoOwner());
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@ -154,7 +154,7 @@ public class IssuePagerView extends BaseActivity<IssuePagerMvp.View, IssuePagerP
|
||||
Logger.e(isOwner);
|
||||
menu.findItem(R.id.closeIssue).setVisible(isOwner);
|
||||
menu.findItem(R.id.lockIssue).setVisible(isOwner);
|
||||
menu.findItem(R.id.labels).setVisible(isOwner);
|
||||
menu.findItem(R.id.labels).setVisible(getPresenter().isRepoOwner());
|
||||
if (isOwner) {
|
||||
//noinspection ConstantConditions ( getIssue at this stage is not null but AS doesn't know. )
|
||||
closeIssue.setTitle(getPresenter().getIssue().getState() == IssueState.closed ? getString(R.string.re_open) : getString(R.string.close));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user