Skip to content

Commit ac0ffef

Browse files
committed
Add optional limit parameter.
1 parent 148457e commit ac0ffef

File tree

2 files changed

+43
-7
lines changed

2 files changed

+43
-7
lines changed

src/main/java/me/kavin/piped/server/ServerLauncher.java

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,19 @@ AsyncServlet mainServlet(Executor executor) {
320320
}
321321
})).map(GET, "/feed", AsyncServlet.ofBlocking(executor, request -> {
322322
try {
323-
return getJsonResponse(FeedHandlers.feedResponse(request.getQueryParameter("authToken"), request.getQueryParameter("start")),
323+
324+
int limit;
325+
try {
326+
var limitStr = request.getQueryParameter("limit");
327+
if (!StringUtils.isEmpty(limitStr))
328+
limit = Math.min(Integer.parseInt(limitStr), 100);
329+
else
330+
limit = 100;
331+
} catch (NumberFormatException e) {
332+
limit = 100;
333+
}
334+
335+
return getJsonResponse(FeedHandlers.feedResponse(request.getQueryParameter("authToken"), request.getQueryParameter("start"), limit),
324336
"private");
325337
} catch (Exception e) {
326338
return getErrorResponse(e, request.getPath());
@@ -334,8 +346,20 @@ AsyncServlet mainServlet(Executor executor) {
334346
}
335347
})).map(GET, "/feed/unauthenticated", AsyncServlet.ofBlocking(executor, request -> {
336348
try {
349+
350+
int limit;
351+
try {
352+
var limitStr = request.getQueryParameter("limit");
353+
if (!StringUtils.isEmpty(limitStr))
354+
limit = Math.min(Integer.parseInt(limitStr), 100);
355+
else
356+
limit = 100;
357+
} catch (NumberFormatException e) {
358+
limit = 100;
359+
}
360+
337361
return getJsonResponse(FeedHandlers.unauthenticatedFeedResponse(
338-
getArray(request.getQueryParameter("channels")), request.getQueryParameter("start")
362+
getArray(request.getQueryParameter("channels")), request.getQueryParameter("start"), limit
339363
), "public, s-maxage=120");
340364
} catch (Exception e) {
341365
return getErrorResponse(e, request.getPath());
@@ -344,7 +368,19 @@ AsyncServlet mainServlet(Executor executor) {
344368
try {
345369
String[] subscriptions = mapper.readValue(request.loadBody().getResult().asArray(),
346370
String[].class);
347-
return getJsonResponse(FeedHandlers.unauthenticatedFeedResponse(subscriptions, request.getQueryParameter("start")), "public, s-maxage=120");
371+
372+
int limit;
373+
try {
374+
var limitStr = request.getQueryParameter("limit");
375+
if (!StringUtils.isEmpty(limitStr))
376+
limit = Math.min(Integer.parseInt(limitStr), 100);
377+
else
378+
limit = 100;
379+
} catch (NumberFormatException e) {
380+
limit = 100;
381+
}
382+
383+
return getJsonResponse(FeedHandlers.unauthenticatedFeedResponse(subscriptions, request.getQueryParameter("start"), limit), "public, s-maxage=120");
348384
} catch (Exception e) {
349385
return getErrorResponse(e, request.getPath());
350386
}

src/main/java/me/kavin/piped/server/handlers/auth/FeedHandlers.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public static byte[] isSubscribedResponse(String session, String channelId) thro
9393
}
9494
}
9595

96-
public static byte[] feedResponse(String session, String start) throws IOException {
96+
public static byte[] feedResponse(String session, String start, int limit) throws IOException {
9797

9898
if (StringUtils.isBlank(session))
9999
ExceptionHandler.throwErrorResponse(new InvalidRequestResponse("session is a required parameter"));
@@ -126,7 +126,7 @@ public static byte[] feedResponse(String session, String start) throws IOExcepti
126126
.orderBy(cb.desc(root.get("uploaded")));
127127

128128
List<StreamItem> feedItems = s.createQuery(criteria)
129-
.setMaxResults(100)
129+
.setMaxResults(limit)
130130
.setTimeout(20).stream()
131131
.parallel().map(video -> {
132132
var channel = video.getChannel();
@@ -200,7 +200,7 @@ public static byte[] feedResponseRSS(String session) throws FeedException {
200200
return null;
201201
}
202202

203-
public static byte[] unauthenticatedFeedResponse(String[] channelIds, String start) throws Exception {
203+
public static byte[] unauthenticatedFeedResponse(String[] channelIds, String start, int limit) throws Exception {
204204

205205
Set<String> filtered = Arrays.stream(channelIds)
206206
.filter(ChannelHelpers::isValidId)
@@ -230,7 +230,7 @@ public static byte[] unauthenticatedFeedResponse(String[] channelIds, String sta
230230
.orderBy(cb.desc(root.get("uploaded")));
231231

232232
List<StreamItem> feedItems = s.createQuery(criteria)
233-
.setMaxResults(100)
233+
.setMaxResults(limit)
234234
.setTimeout(20).stream()
235235
.parallel().map(video -> {
236236
var channel = video.getChannel();

0 commit comments

Comments
 (0)