From 3fd6c597c0a901b36b07e72148fc4e577f66177a Mon Sep 17 00:00:00 2001 From: Kosh Date: Thu, 23 Feb 2017 22:49:17 +0800 Subject: [PATCH] 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. --- .../repos/code/files/RepoFilesMvp.java | 4 ++ .../repos/code/files/RepoFilesPresenter.java | 41 +++++++++++++++---- .../issues/issue/details/IssuePagerMvp.java | 2 + .../issue/details/IssuePagerPresenter.java | 9 ++++ .../issues/issue/details/IssuePagerView.java | 4 +- 5 files changed, 50 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesMvp.java index 4f5bd604..fe2f7157 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesMvp.java @@ -38,6 +38,10 @@ interface RepoFilesMvp { void onCallApi(); void onInitDataAndRequest(@NonNull String login, @NonNull String repoId, @Nullable String path); + + @Nullable ArrayList getCachedFiles(@NonNull String url); + + void cacheFiles(@NonNull String url, @NonNull ArrayList files); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java index 1adbf73a..bb1a0591 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesPresenter.java @@ -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 implements RepoFilesMvp.Presenter { private ArrayList files = new ArrayList<>(); + private HashMap> cachedFiles = new LinkedHashMap<>(); private String repoId; private String login; private String path; @@ -62,21 +66,42 @@ class RepoFilesPresenter extends BasePresenter 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 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 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 getCachedFiles(@NonNull String url) { + return cachedFiles.get(url); + } + + @Override public void cacheFiles(@NonNull String url, @NonNull ArrayList files) { + Logger.e(url, files); + cachedFiles.put(url, files); + } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerMvp.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerMvp.java index d8fb9f24..b1bf6feb 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerMvp.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerMvp.java @@ -41,6 +41,8 @@ interface IssuePagerMvp { boolean isOwner(); + boolean isRepoOwner(); + boolean isLocked(); void onHandleConfirmDialog(@Nullable Bundle bundle); diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java index 16e912ab..78497cb4 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerPresenter.java @@ -93,6 +93,15 @@ class IssuePagerPresenter extends BasePresenter 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(); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerView.java b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerView.java index d62e1d9f..440b97b6 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerView.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/issues/issue/details/IssuePagerView.java @@ -116,7 +116,7 @@ public class IssuePagerView extends BaseActivity