From 32fb22d50333de87f05be3e44a7cefb31a911f7c Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 9 Jul 2013 08:06:32 +0200 Subject: [PATCH] automatic merging of duplicate feeds --- .../commafeed/backend/DatabaseCleaner.java | 19 ++++++++++++++++++- .../frontend/rest/resources/AdminREST.java | 10 ++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/commafeed/backend/DatabaseCleaner.java b/src/main/java/com/commafeed/backend/DatabaseCleaner.java index 55e6bcc7..e3b97be6 100644 --- a/src/main/java/com/commafeed/backend/DatabaseCleaner.java +++ b/src/main/java/com/commafeed/backend/DatabaseCleaner.java @@ -10,6 +10,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.commafeed.backend.dao.FeedDAO; +import com.commafeed.backend.dao.FeedDAO.FeedCount; import com.commafeed.backend.dao.FeedEntryDAO; import com.commafeed.backend.dao.FeedSubscriptionDAO; import com.commafeed.backend.model.Feed; @@ -40,7 +41,7 @@ public class DatabaseCleaner { log.info("cleanup done: {} feeds without subscriptions deleted", total); return total; } - + public long cleanEntriesWithoutFeeds() { long total = 0; @@ -69,6 +70,22 @@ public class DatabaseCleaner { return total; } + public long cleanDuplicateFeeds() { + long total = 0; + int deleted = -1; + do { + List fcs = feedDAO.findDuplicates(0, 10, 1); + deleted = fcs.size(); + for (FeedCount fc : fcs) { + mergeFeeds(fc.feeds.get(0), fc.feeds); + } + total += deleted; + log.info("merged {} feeds", total); + } while (deleted != 0); + log.info("cleanup done: {} feeds merged", total); + return total; + } + public void mergeFeeds(Feed into, List feeds) { for (Feed feed : feeds) { if (into.getId().equals(feed.getId())) { diff --git a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java index b3650647..793ec0b7 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java @@ -304,4 +304,14 @@ public class AdminREST extends AbstractResourceREST { return Response.ok().build(); } + @Path("/cleanup/automerge") + @GET + @ApiOperation(value = "Automatically merge feeds", notes = "Merge feeds together") + public Response autoMergeFeeds() { + Map map = Maps.newHashMap(); + map.put("merged feeds", + cleaner.cleanDuplicateFeeds()); + return Response.ok(map).build(); + } + }