diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java index 55274a84..34b5e54d 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java @@ -15,8 +15,8 @@ import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import org.apache.commons.lang.StringUtils; +import org.hibernate.Hibernate; -import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.FeedEntry; import com.commafeed.backend.model.FeedEntryContent; @@ -173,15 +173,16 @@ public class FeedEntryStatusDAO extends GenericDAO { return lazyLoadContent(includeContent, q.getResultList()); } - public List findByFeed(Feed feed, User user, - boolean unreadOnly, ReadingOrder order, boolean includeContent) { - return findByFeed(feed, user, unreadOnly, null, -1, -1, order, - includeContent); + public List findBySubscription( + FeedSubscription subscription, boolean unreadOnly, + ReadingOrder order, boolean includeContent) { + return findBySubscription(subscription, unreadOnly, null, -1, -1, + order, includeContent); } - public List findByFeed(Feed feed, User user, - boolean unreadOnly, Date newerThan, int offset, int limit, - ReadingOrder order, boolean includeContent) { + public List findBySubscription( + FeedSubscription subscription, boolean unreadOnly, Date newerThan, + int offset, int limit, ReadingOrder order, boolean includeContent) { CriteriaQuery query = builder.createQuery(getType()); Root root = query.from(getType()); @@ -190,13 +191,9 @@ public class FeedEntryStatusDAO extends GenericDAO { Join entryJoin = root .join(FeedEntryStatus_.entry); - Join subJoin = root - .join(FeedEntryStatus_.subscription); - predicates - .add(builder.equal(subJoin.get(FeedSubscription_.user), user)); - predicates - .add(builder.equal(subJoin.get(FeedSubscription_.feed), feed)); + predicates.add(builder.equal(root.get(FeedEntryStatus_.subscription), + subscription)); if (unreadOnly) { predicates.add(builder.isFalse(root.get(FeedEntryStatus_.read))); } @@ -280,8 +277,8 @@ public class FeedEntryStatusDAO extends GenericDAO { List results) { if (includeContent) { for (FeedEntryStatus status : results) { - status.getSubscription().getFeed().getUrl(); - status.getEntry().getContent().getContent(); + Hibernate.initialize(status.getSubscription().getFeed()); + Hibernate.initialize(status.getEntry().getContent()); } } return results; @@ -301,8 +298,9 @@ public class FeedEntryStatusDAO extends GenericDAO { query.setHint("javax.persistence.query.timeout", 20000); } - public void markFeedEntries(User user, Feed feed, Date olderThan) { - List statuses = findByFeed(feed, user, true, + public void markSubscriptionEntries(FeedSubscription subscription, + Date olderThan) { + List statuses = findBySubscription(subscription, true, ReadingOrder.desc, false); saveOrUpdate(markList(statuses, olderThan)); } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java b/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java index 2493e625..687abc61 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/FeedREST.java @@ -101,7 +101,7 @@ public class FeedREST extends AbstractResourceREST { entries.setErrorCount(subscription.getFeed().getErrorCount()); List unreadEntries = feedEntryStatusDAO - .findByFeed(subscription.getFeed(), getUser(), unreadOnly, + .findBySubscription(subscription, unreadOnly, newerThanDate, offset, limit + 1, order, true); for (FeedEntryStatus status : unreadEntries) { entries.getEntries().add( @@ -227,8 +227,9 @@ public class FeedREST extends AbstractResourceREST { FeedSubscription subscription = feedSubscriptionDAO.findById(getUser(), Long.valueOf(req.getId())); - feedEntryStatusDAO.markFeedEntries(getUser(), subscription.getFeed(), - olderThan); + if (subscription != null) { + feedEntryStatusDAO.markSubscriptionEntries(subscription, olderThan); + } return Response.ok(Status.OK).build(); }