From c25264c9930eede48eca55ca18c2f330c40aeb86 Mon Sep 17 00:00:00 2001 From: droideparanoico Date: Mon, 6 Jul 2026 11:57:44 +0200 Subject: [PATCH] RSS feed returns all entries (unpaginated); db handles limit=0 as unlimited --- .../java/com/discdrop/db/DatabaseService.java | 12 +++++++---- .../com/discdrop/service/FeedService.java | 21 +++++++++++++++++-- .../java/com/discdrop/web/FeedController.java | 2 +- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/discdrop/db/DatabaseService.java b/src/main/java/com/discdrop/db/DatabaseService.java index 2a4be27..bad87dc 100644 --- a/src/main/java/com/discdrop/db/DatabaseService.java +++ b/src/main/java/com/discdrop/db/DatabaseService.java @@ -224,15 +224,19 @@ public class DatabaseService { sql += " AND primary_type IN (" + typePlaceholders + ")"; } sql += " ORDER BY (CASE WHEN first_release_date IS NULL OR first_release_date = '' THEN 1 ELSE 0 END), first_release_date DESC"; - sql += " LIMIT ? OFFSET ?"; + + boolean useLimit = limit > 0; + if (useLimit) sql += " LIMIT ? OFFSET ?"; try (Connection conn = getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { int idx = 1; for (var mbid : artistMbids) ps.setString(idx++, mbid); for (var type : primaryTypes) ps.setString(idx++, type); - ps.setInt(idx++, limit + 1); - ps.setInt(idx, offset); + if (useLimit) { + ps.setInt(idx++, limit + 1); + ps.setInt(idx, offset); + } try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { groups.add(mapReleaseGroup(rs)); @@ -241,7 +245,7 @@ public class DatabaseService { } catch (SQLException e) { throw new RuntimeException(e); } - boolean hasMore = groups.size() > limit; + boolean hasMore = useLimit && groups.size() > limit; if (hasMore) groups.remove(groups.size() - 1); return new FeedResult(groups, hasMore); } diff --git a/src/main/java/com/discdrop/service/FeedService.java b/src/main/java/com/discdrop/service/FeedService.java index 92c084e..99fd158 100644 --- a/src/main/java/com/discdrop/service/FeedService.java +++ b/src/main/java/com/discdrop/service/FeedService.java @@ -26,8 +26,25 @@ public class FeedService { public static final int PAGE_SIZE = 20; - public List getFeedEntries() { - return getFeedEntries(1).entries(); + public List getAllFeedEntries() { + var artists = artistService.findAll(); + if (artists.isEmpty()) return List.of(); + + var artistMbids = new ArrayList(); + for (var a : artists) { + if (cacheService.needsRefresh(a.mbid())) { + var types = getMonitoredTypes(a); + releaseGroupService.fetchAndCache(a.mbid(), a.name(), types); + } + artistMbids.add(a.mbid()); + } + + var allTypes = List.of("Album", "Single", "EP", "Broadcast", "Other"); + var monitoredTypes = new ArrayList(); + for (var a : artists) { + monitoredTypes.addAll(getMonitoredTypes(a)); + } + return db.getFeed(artistMbids, monitoredTypes.isEmpty() ? allTypes : monitoredTypes, 0, 0).entries(); } public FeedResult getFeedEntries(int page) { diff --git a/src/main/java/com/discdrop/web/FeedController.java b/src/main/java/com/discdrop/web/FeedController.java index 12a06b7..c934e13 100644 --- a/src/main/java/com/discdrop/web/FeedController.java +++ b/src/main/java/com/discdrop/web/FeedController.java @@ -22,7 +22,7 @@ public class FeedController { @Path("/rss.xml") @Produces(MediaType.APPLICATION_XML) public Response rssFeed() { - var entries = feedService.getFeedEntries(); + var entries = feedService.getAllFeedEntries(); var xml = feedBuilder.buildRss(entries); return Response.ok(xml, MediaType.APPLICATION_XML).build(); }