diff --git a/src/main/java/eu/crushedpixel/replaymod/api/client/SearchPagination.java b/src/main/java/eu/crushedpixel/replaymod/api/client/SearchPagination.java new file mode 100644 index 00000000..2060261a --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/api/client/SearchPagination.java @@ -0,0 +1,50 @@ +package eu.crushedpixel.replaymod.api.client; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import eu.crushedpixel.replaymod.ReplayMod; +import eu.crushedpixel.replaymod.api.client.holders.FileInfo; + +public class SearchPagination { + + private int page; + private List files = new ArrayList(); + + private final SearchQuery searchQuery; + + public SearchPagination(SearchQuery searchQuery) { + this.page = -1; + this.searchQuery = searchQuery; + } + + public List getFiles() { + return new ArrayList(files); + } + + public int getLoadedPages() { + return page; + } + + public boolean fetchPage() { + page++; + searchQuery.offset = page; + + try { + FileInfo[] fis = ReplayMod.apiClient.searchFiles(searchQuery); + if(fis.length <= 1) { + page--; + return false; + } + + files.addAll(Arrays.asList(fis)); + + return true; + } catch(Exception e) { + e.printStackTrace(); + } + page--; + return false; + } +} diff --git a/src/main/java/eu/crushedpixel/replaymod/api/client/SearchQuery.java b/src/main/java/eu/crushedpixel/replaymod/api/client/SearchQuery.java new file mode 100644 index 00000000..52d17a80 --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/api/client/SearchQuery.java @@ -0,0 +1,55 @@ +package eu.crushedpixel.replaymod.api.client; + +import java.lang.reflect.Field; +import java.net.URLEncoder; + +public class SearchQuery { + + public Boolean order, singleplayer; + public String player, tag, version, server, name, auth; + public Integer category, offset; + + public SearchQuery() {} + + public SearchQuery(Boolean order, Boolean singleplayer, String player, + String tag, String version, String server, String name, + String auth, Integer category, Integer offset) { + this.order = order; + this.singleplayer = singleplayer; + this.player = player; + this.tag = tag; + this.version = version; + this.server = server; + this.name = name; + this.auth = auth; + this.category = category; + this.offset = offset; + } + + public String buildQuery() { + String query = ""; + boolean first = true; + + //Please don't slaughter me for this code, + //even if I deserve it, which I certainly do. + for(Field f : this.getClass().getDeclaredFields()) { + try { + Object value = f.get(this); + if(value == null) continue; + query += first ? "?" : "&"; + first = false; + query += f.getName()+"="; + query += URLEncoder.encode(String.valueOf(value), "UTF-8"); + } catch(Exception e) { + e.printStackTrace(); + } + } + + return query; + } + + @Override + public String toString() { + return buildQuery(); + } +} diff --git a/src/main/java/eu/crushedpixel/replaymod/api/client/holders/SearchResult.java b/src/main/java/eu/crushedpixel/replaymod/api/client/holders/SearchResult.java new file mode 100644 index 00000000..0e411ebb --- /dev/null +++ b/src/main/java/eu/crushedpixel/replaymod/api/client/holders/SearchResult.java @@ -0,0 +1,10 @@ +package eu.crushedpixel.replaymod.api.client.holders; + +public class SearchResult { + + private FileInfo[] results; + + public FileInfo[] getResults() { + return results; + } +}