diff --git a/html/index.html b/html/index.html
index 5366799e..329fb5bd 100644
--- a/html/index.html
+++ b/html/index.html
@@ -118,7 +118,7 @@
}
};
- var lastCreated = $.urlParam('o') === null ? 2147483647 : $.urlParam('o');
+ var lastCreated = $.urlParam('o') === null ? -1 : $.urlParam('o');
var waitForIMG = 0;
var loadedImages = 0;
var loading = false;
@@ -188,7 +188,7 @@
}
var elm = $(".grid").append("
");
- lastCreated = value.created;
+ lastCreated = value.iid;
waitForIMG++;
$("#" + value.iid).hover(function () {
diff --git a/src/main/java/de/gurkengewuerz/ripmewrapper/ImageCrawler.java b/src/main/java/de/gurkengewuerz/ripmewrapper/ImageCrawler.java
index 4f027794..b6481366 100644
--- a/src/main/java/de/gurkengewuerz/ripmewrapper/ImageCrawler.java
+++ b/src/main/java/de/gurkengewuerz/ripmewrapper/ImageCrawler.java
@@ -1,6 +1,7 @@
package de.gurkengewuerz.ripmewrapper;
import java.io.File;
+import java.io.FileInputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.Connection;
@@ -44,16 +45,19 @@ public class ImageCrawler extends TimerTask {
.collect(Collectors.toList());
PreparedStatement ps = connection.prepareStatement("INSERT INTO filelist VALUES (NULL, ?, ?)");
+ HashSet foundIds = new HashSet<>();
for (String s : pathList) {
String id = s.substring(s.lastIndexOf(File.separator) + 1).split("-")[0];
if (!findIds.contains(id)) continue;
ps.setString(1, id);
ps.setString(2, s);
ps.executeUpdate();
- findIds.remove(id);
+ foundIds.add(id);
}
ps.close();
+ findIds.removeAll(foundIds);
+
ps = connection.prepareStatement("DELETE FROM metalist WHERE id = ?");
for (String id : findIds) {
ps.setString(1, id);
diff --git a/src/main/java/de/gurkengewuerz/ripmewrapper/handler/APIHandler.java b/src/main/java/de/gurkengewuerz/ripmewrapper/handler/APIHandler.java
index f0a548b9..9313a701 100644
--- a/src/main/java/de/gurkengewuerz/ripmewrapper/handler/APIHandler.java
+++ b/src/main/java/de/gurkengewuerz/ripmewrapper/handler/APIHandler.java
@@ -46,24 +46,51 @@ public class APIHandler extends AbstractHandler {
if (request.getParameter("subreddits") != null) {
String[] subreddits = request.getParameter("subreddits").split(",");
- int created = request.getParameter("offset") == null ? Integer.MAX_VALUE : Integer.valueOf(request.getParameter("offset"));
+ int offset = request.getParameter("offset") == null ? -1 : Integer.valueOf(request.getParameter("offset"));
StringBuilder builder = new StringBuilder();
for (int i = 0; i < subreddits.length; i++) {
builder.append("?,");
}
+ String builderString = builder.deleteCharAt(builder.length() - 1).toString();
+
+ int limit = 0;
+ int index = 1;
+
+
+ if (offset != -1) {
+ PreparedStatement psPre = connection.prepareStatement(
+ "SELECT iid FROM filelist LEFT JOIN metalist ON filelist.id = metalist.id WHERE subreddit IN (" + builderString + ") ORDER BY created DESC, iid DESC"
+ );
+
+ for (String o : subreddits) {
+ psPre.setString(index++, o);
+ }
+
+ ResultSet rsPre = psPre.executeQuery();
+ while (rsPre.next()) {
+ limit++;
+ if (rsPre.getInt("iid") == offset) {
+ break;
+ }
+ }
+ rsPre.close();
+ psPre.close();
+ }
+
+ // ----------------
PreparedStatement ps = connection.prepareStatement(
- "SELECT iid, metalist.id, subreddit, created, path FROM filelist LEFT JOIN metalist ON filelist.id = metalist.id WHERE subreddit IN (" + builder.deleteCharAt(builder.length() - 1).toString() + ") AND created < ? ORDER BY created DESC LIMIT 10"
+ "SELECT iid, metalist.id, subreddit, created, path FROM filelist LEFT JOIN metalist ON filelist.id = metalist.id WHERE subreddit IN (" + builderString + ") ORDER BY created DESC, iid DESC LIMIT 10 OFFSET ?"
);
- int index = 1;
+ index = 1;
for (String o : subreddits) {
ps.setString(index++, o);
}
- ps.setInt(index, created);
+ ps.setInt(index, limit);
ResultSet rs = ps.executeQuery();