From bb3431a5102ccd24197b633497cf36c8d2c0f511 Mon Sep 17 00:00:00 2001 From: Jeremie Panzer Date: Fri, 22 Mar 2013 11:42:25 +0100 Subject: [PATCH] fix unread count --- .../com/commafeed/backend/StartupBean.java | 32 +++++++++++++++++-- .../backend/dao/FeedEntryService.java | 2 +- .../backend/dao/FeedSubscriptionService.java | 10 ++++++ .../commafeed/frontend/CommaFeedSession.java | 2 +- .../frontend/rest/FeedSubscriptionsREST.java | 14 ++++---- src/main/webapp/directives/category.html | 4 +-- src/main/webapp/js/controllers.js | 31 +----------------- 7 files changed, 50 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/commafeed/backend/StartupBean.java b/src/main/java/com/commafeed/backend/StartupBean.java index 8f1b183b..ec80b7a9 100644 --- a/src/main/java/com/commafeed/backend/StartupBean.java +++ b/src/main/java/com/commafeed/backend/StartupBean.java @@ -52,8 +52,15 @@ public class StartupBean { salt)); userService.save(user); - Feed feed = new Feed("http://feed.dilbert.com/dilbert/daily_strip"); - feedService.save(feed); + Feed dilbert = new Feed( + "http://feed.dilbert.com/dilbert/daily_strip"); + feedService.save(dilbert); + + Feed engadget = new Feed("http://www.engadget.com/rss.xml"); + feedService.save(engadget); + + Feed frandroid = new Feed("http://feeds.feedburner.com/frandroid"); + feedService.save(frandroid); FeedCategory newsCategory = new FeedCategory(); newsCategory.setName("News"); @@ -66,13 +73,32 @@ public class StartupBean { comicsCategory.setParent(newsCategory); feedCategoryService.save(comicsCategory); + FeedCategory techCategory = new FeedCategory(); + techCategory.setName("Tech"); + techCategory.setUser(user); + techCategory.setParent(newsCategory); + feedCategoryService.save(techCategory); + FeedSubscription sub = new FeedSubscription(); sub.setCategory(comicsCategory); - sub.setFeed(feed); + sub.setFeed(dilbert); sub.setTitle("Dilbert - Strips"); sub.setUser(user); feedSubscriptionService.save(sub); + FeedSubscription sub2 = new FeedSubscription(); + sub2.setCategory(techCategory); + sub2.setFeed(engadget); + sub2.setTitle("Engadget"); + sub2.setUser(user); + feedSubscriptionService.save(sub2); + + FeedSubscription sub3 = new FeedSubscription(); + sub3.setFeed(frandroid); + sub3.setTitle("Frandroid"); + sub3.setUser(user); + feedSubscriptionService.save(sub3); + } } diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryService.java b/src/main/java/com/commafeed/backend/dao/FeedEntryService.java index 43f12e72..12ae41ee 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryService.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryService.java @@ -32,7 +32,7 @@ public class FeedEntryService extends GenericDAO { } public List getUnreadEntries(Feed feed, User user) { - String query = "select entry from FeedEntry entry where entry.feed = :feed and not in (select status.entry from FeedEntryStatus status where status.user = :user and status.read = true)"; + String query = "select e from FeedEntry e where e.feed=:feed and not exists (select s from FeedEntryStatus s where s.entry = e and s.user =:user and s.read = true)"; TypedQuery typedQuery = em.createQuery(query, FeedEntry.class); typedQuery.setParameter("feed", feed); diff --git a/src/main/java/com/commafeed/backend/dao/FeedSubscriptionService.java b/src/main/java/com/commafeed/backend/dao/FeedSubscriptionService.java index 2151ee80..7127255b 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedSubscriptionService.java +++ b/src/main/java/com/commafeed/backend/dao/FeedSubscriptionService.java @@ -8,6 +8,8 @@ import com.commafeed.frontend.utils.ModelFactory.MF; import com.commafeed.model.FeedCategory; import com.commafeed.model.FeedSubscription; import com.commafeed.model.User; +import com.uaihebert.factory.EasyCriteriaFactory; +import com.uaihebert.model.EasyCriteria; @Stateless public class FeedSubscriptionService extends GenericDAO { @@ -15,4 +17,12 @@ public class FeedSubscriptionService extends GenericDAO public List findAll(User user) { return findByField(MF.i(MF.p(FeedCategory.class).getUser()), user); } + + public List findWithoutCategories(User user) { + EasyCriteria criteria = EasyCriteriaFactory.createQueryCriteria(em, getType()); + criteria.andEquals("user", user); + criteria.andEquals("category", null); + return criteria.getResultList(); + + } } diff --git a/src/main/java/com/commafeed/frontend/CommaFeedSession.java b/src/main/java/com/commafeed/frontend/CommaFeedSession.java index d2ae7d68..1c55acc7 100644 --- a/src/main/java/com/commafeed/frontend/CommaFeedSession.java +++ b/src/main/java/com/commafeed/frontend/CommaFeedSession.java @@ -45,7 +45,7 @@ public class CommaFeedSession extends AuthenticatedWebSession { @Override public boolean authenticate(String userName, String password) { User user = userService.login(userName, password); - setUser(user); + this.user = user; return user != null; } diff --git a/src/main/java/com/commafeed/frontend/rest/FeedSubscriptionsREST.java b/src/main/java/com/commafeed/frontend/rest/FeedSubscriptionsREST.java index 489ffe43..44f3077f 100644 --- a/src/main/java/com/commafeed/frontend/rest/FeedSubscriptionsREST.java +++ b/src/main/java/com/commafeed/frontend/rest/FeedSubscriptionsREST.java @@ -11,7 +11,6 @@ import com.commafeed.backend.dao.FeedEntryService; import com.commafeed.backend.dao.FeedSubscriptionService; import com.commafeed.frontend.CommaFeedSession; import com.commafeed.frontend.pages.JSONPage; -import com.commafeed.frontend.utils.ModelFactory.MF; import com.commafeed.model.FeedCategory; import com.commafeed.model.FeedSubscription; import com.commafeed.model.User; @@ -24,21 +23,19 @@ public class FeedSubscriptionsREST extends JSONPage { FeedSubscriptionService feedSubscriptionService; @Inject - FeedCategoryService FeedCategoryService; + FeedCategoryService feedCategoryService; @Inject FeedEntryService feedEntryService; - User user = CommaFeedSession.get().getUser(); - @Override protected Object getObject() { - List categories = FeedCategoryService.findAll(user); + User user = CommaFeedSession.get().getUser(); + List categories = feedCategoryService.findAll(user); Category root = new Category(); addChildren(categories, root); for (FeedSubscription subscription : feedSubscriptionService - .findByField(MF.i(MF.p(FeedSubscription.class).getCategory()), - null)) { + .findWithoutCategories(user)) { Subscription sub = new Subscription(); sub.setId(subscription.getId()); sub.setName(subscription.getTitle()); @@ -65,7 +62,8 @@ public class FeedSubscriptionsREST extends JSONPage { sub.setId(subscription.getId()); sub.setName(subscription.getTitle()); int size = feedEntryService.getUnreadEntries( - subscription.getFeed(), user).size(); + subscription.getFeed(), + CommaFeedSession.get().getUser()).size(); sub.setUnread(size); child.getFeeds().add(sub); } diff --git a/src/main/webapp/directives/category.html b/src/main/webapp/directives/category.html index 028a95f6..9a0cb757 100644 --- a/src/main/webapp/directives/category.html +++ b/src/main/webapp/directives/category.html @@ -1,4 +1,4 @@ - +
  • @@ -9,4 +9,4 @@
  • -
    \ No newline at end of file + \ No newline at end of file diff --git a/src/main/webapp/js/controllers.js b/src/main/webapp/js/controllers.js index f1fcf39e..520f1a48 100644 --- a/src/main/webapp/js/controllers.js +++ b/src/main/webapp/js/controllers.js @@ -12,36 +12,7 @@ module.controller('CategoryTreeCtrl', $scope.selectedType = $routeParams._type; $scope.selectedId = $routeParams._id; - $scope.root2 = CategoryService.get(); - - $scope.root = { - children : [ { - id : "1", - name : "News", - feeds : [ { - id : "2", - name : "Cyanide & Happiness", - unread : 34 - } ], - children : [ { - id : "2", - name : "Comics", - feeds : [ { - id : "1", - name : "Dilbert", - unread : 4 - } ] - } ] - }, { - id : '3', - name : "Blogs", - feeds : [ { - id : "3", - name : "Engadget", - unread : 0 - } ] - } ] - }; + $scope.root = CategoryService.get(); var unreadCount = function(category) { var count = 0;