From b9fbf0fdf34248251a0f9d0f93dd35a5ba4fd05b Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 16 Apr 2013 07:26:24 +0200 Subject: [PATCH] force a feed refresh when someone subscribes --- .../backend/feeds/FeedRefreshWorker.java | 11 ++++++++++- .../services/FeedSubscriptionService.java | 3 ++- .../rest/resources/SubscriptionsREST.java | 17 +++++++++++------ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java index cd7f272a..21adc228 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshWorker.java @@ -69,7 +69,16 @@ public class FeedRefreshWorker { } return new AsyncResult(null); } - + + @Asynchronous + public void updateAsync(Feed feed){ + try { + update(feed); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + private void update(Feed feed) throws NotSupportedException, SystemException, SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, diff --git a/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java b/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java index 1d881ccf..2bd9726b 100644 --- a/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java +++ b/src/main/java/com/commafeed/backend/services/FeedSubscriptionService.java @@ -37,7 +37,7 @@ public class FeedSubscriptionService { FeedSubscriptionDAO feedSubscriptionDAO; @Lock(LockType.WRITE) - public void subscribe(User user, String url, String title, + public Feed subscribe(User user, String url, String title, FeedCategory category) { Feed feed = feedDAO.findByUrl(url); @@ -72,5 +72,6 @@ public class FeedSubscriptionService { } feedEntryStatusDAO.save(statuses); } + return feed; } } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java b/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java index 5cbc8842..a086fdf4 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/SubscriptionsREST.java @@ -5,6 +5,7 @@ import java.util.Comparator; import java.util.List; import java.util.Map; +import javax.inject.Inject; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; @@ -22,6 +23,7 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.ObjectUtils; +import com.commafeed.backend.feeds.FeedRefreshWorker; import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.FeedSubscription; @@ -34,6 +36,9 @@ import com.google.common.base.Preconditions; @Path("subscriptions") public class SubscriptionsREST extends AbstractREST { + @Inject + FeedRefreshWorker worker; + @GET @Path("fetch") public Feed fetchFeed(@QueryParam("url") String url) { @@ -62,11 +67,11 @@ public class SubscriptionsREST extends AbstractREST { url = fetchFeed(url).getUrl(); FeedCategory category = EntriesREST.ALL.equals(req.getCategoryId()) ? null - : feedCategoryDAO - .findById(Long.valueOf(req.getCategoryId())); + : feedCategoryDAO.findById(Long.valueOf(req.getCategoryId())); Feed fetchedFeed = fetchFeed(url); - feedSubscriptionService.subscribe(getUser(), fetchedFeed.getUrl(), - req.getTitle(), category); + Feed feed = feedSubscriptionService.subscribe(getUser(), + fetchedFeed.getUrl(), req.getTitle(), category); + worker.updateAsync(feed); return Response.ok(Status.OK).build(); } @@ -145,8 +150,8 @@ public class SubscriptionsREST extends AbstractREST { public Response deleteCategory(@QueryParam("id") Long id) { FeedCategory cat = feedCategoryDAO.findById(getUser(), id); if (cat != null) { - List subs = feedSubscriptionDAO - .findByCategory(getUser(), cat); + List subs = feedSubscriptionDAO.findByCategory( + getUser(), cat); for (FeedSubscription sub : subs) { sub.setCategory(null); }