From f7d75cd60504af215451788f6137bb48bbf23ffd Mon Sep 17 00:00:00 2001 From: CrushedPixel Date: Sat, 16 May 2015 18:09:10 +0200 Subject: [PATCH] Added Pagination Handlers for the Replay Center --- .../pagination/DownloadedFilePagination.java | 61 +++++++++++++++++++ .../pagination/FavoritedFilePagination.java | 61 +++++++++++++++++++ .../api/client/pagination/Pagination.java | 18 ++++++ .../{ => pagination}/SearchPagination.java | 8 ++- 4 files changed, 146 insertions(+), 2 deletions(-) create mode 100755 src/main/java/eu/crushedpixel/replaymod/api/client/pagination/DownloadedFilePagination.java create mode 100755 src/main/java/eu/crushedpixel/replaymod/api/client/pagination/FavoritedFilePagination.java create mode 100644 src/main/java/eu/crushedpixel/replaymod/api/client/pagination/Pagination.java rename src/main/java/eu/crushedpixel/replaymod/api/client/{ => pagination}/SearchPagination.java (83%) diff --git a/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/DownloadedFilePagination.java b/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/DownloadedFilePagination.java new file mode 100755 index 00000000..b1a1f1e0 --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/DownloadedFilePagination.java @@ -0,0 +1,61 @@ +package eu.crushedpixel.replaymod.api.client.pagination; + +import eu.crushedpixel.replaymod.ReplayMod; +import eu.crushedpixel.replaymod.api.client.holders.FileInfo; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class DownloadedFilePagination implements Pagination { + + private int page; + private HashMap files = new HashMap(); + + public DownloadedFilePagination() { + this.page = -1; + } + + @Override + public List getFiles() { + return new ArrayList(files.values()); + } + + @Override + public int getLoadedPages() { + return page; + } + + @Override + public boolean fetchPage() { + page++; + + HashMap f = ReplayMod.downloadedFileHandler.getDownloadedFiles(); + List toAdd = new ArrayList(); + for(int i : f.keySet()) { + if(!files.containsKey(i)) { + toAdd.add(i); + if(toAdd.size() >= Pagination.PAGE_SIZE) break; + } + } + + try { + FileInfo[] fis = ReplayMod.apiClient.getFileInfo(toAdd); + if(fis.length <= 1) { + page--; + return false; + } + + for(FileInfo info : fis) { + files.put(info.getId(), info); + } + + return true; + } catch(Exception e) { + e.printStackTrace(); + } + page--; + return false; + } +} diff --git a/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/FavoritedFilePagination.java b/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/FavoritedFilePagination.java new file mode 100755 index 00000000..2f6ad62f --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/FavoritedFilePagination.java @@ -0,0 +1,61 @@ +package eu.crushedpixel.replaymod.api.client.pagination; + +import eu.crushedpixel.replaymod.ReplayMod; +import eu.crushedpixel.replaymod.api.client.holders.FileInfo; +import eu.crushedpixel.replaymod.online.authentication.AuthenticationHandler; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class FavoritedFilePagination implements Pagination { + + private int page; + private HashMap files = new HashMap(); + + public FavoritedFilePagination() { + this.page = -1; + } + + @Override + public List getFiles() { + return new ArrayList(files.values()); + } + + @Override + public int getLoadedPages() { + return page; + } + + @Override + public boolean fetchPage() { + page++; + + try { + int[] f = ReplayMod.apiClient.getFavorites(AuthenticationHandler.getKey()); + List toAdd = new ArrayList(); + for(int i : f) { + if(!files.containsKey(i)) { + toAdd.add(i); + if(toAdd.size() >= Pagination.PAGE_SIZE) break; + } + } + + FileInfo[] fis = ReplayMod.apiClient.getFileInfo(toAdd); + if(fis.length <= 1) { + page--; + return false; + } + + for(FileInfo info : fis) { + files.put(info.getId(), info); + } + + return true; + } catch(Exception e) { + e.printStackTrace(); + } + page--; + return false; + } +} diff --git a/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/Pagination.java b/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/Pagination.java new file mode 100644 index 00000000..03aed975 --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/Pagination.java @@ -0,0 +1,18 @@ +package eu.crushedpixel.replaymod.api.client.pagination; + +import eu.crushedpixel.replaymod.api.client.holders.FileInfo; + +import java.util.List; + +/** + * Created by mariusmetzger on 16/05/15. + */ +public interface Pagination { + public List getFiles(); + + public int getLoadedPages(); + + public boolean fetchPage(); + + public static final int PAGE_SIZE = 30; //defined by the Website API +} diff --git a/src/main/java/eu/crushedpixel/replaymod/api/client/SearchPagination.java b/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/SearchPagination.java similarity index 83% rename from src/main/java/eu/crushedpixel/replaymod/api/client/SearchPagination.java rename to src/main/java/eu/crushedpixel/replaymod/api/client/pagination/SearchPagination.java index fe3fb34d..0fbdd114 100755 --- a/src/main/java/eu/crushedpixel/replaymod/api/client/SearchPagination.java +++ b/src/main/java/eu/crushedpixel/replaymod/api/client/pagination/SearchPagination.java @@ -1,13 +1,14 @@ -package eu.crushedpixel.replaymod.api.client; +package eu.crushedpixel.replaymod.api.client.pagination; import eu.crushedpixel.replaymod.ReplayMod; +import eu.crushedpixel.replaymod.api.client.SearchQuery; import eu.crushedpixel.replaymod.api.client.holders.FileInfo; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public class SearchPagination { +public class SearchPagination implements Pagination { private final SearchQuery searchQuery; private int page; @@ -18,14 +19,17 @@ public class SearchPagination { this.searchQuery = searchQuery; } + @Override public List getFiles() { return new ArrayList(files); } + @Override public int getLoadedPages() { return page; } + @Override public boolean fetchPage() { page++; searchQuery.offset = page;