mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
use faster query for 'all unread'
This commit is contained in:
@@ -265,6 +265,32 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
|
|||||||
return lazyLoadContent(includeContent, entries);
|
return lazyLoadContent(includeContent, entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<FeedEntryStatus> findAllUnread(User user, Date newerThan,
|
||||||
|
int offset, int limit, ReadingOrder order, boolean includeContent) {
|
||||||
|
|
||||||
|
CriteriaQuery<FeedEntryStatus> query = builder.createQuery(getType());
|
||||||
|
Root<FeedEntryStatus> root = query.from(getType());
|
||||||
|
|
||||||
|
List<Predicate> predicates = Lists.newArrayList();
|
||||||
|
|
||||||
|
predicates.add(builder.equal(root.get(FeedEntryStatus_.user), user));
|
||||||
|
predicates.add(builder.isFalse(root.get(FeedEntryStatus_.read)));
|
||||||
|
|
||||||
|
if (newerThan != null) {
|
||||||
|
predicates.add(builder.greaterThanOrEqualTo(
|
||||||
|
root.get(FeedEntryStatus_.entryInserted), newerThan));
|
||||||
|
}
|
||||||
|
|
||||||
|
query.where(predicates.toArray(new Predicate[0]));
|
||||||
|
orderStatusesBy(query, root, order);
|
||||||
|
|
||||||
|
TypedQuery<FeedEntryStatus> q = em.createQuery(query);
|
||||||
|
limit(q, offset, limit);
|
||||||
|
setTimeout(q);
|
||||||
|
|
||||||
|
return lazyLoadContent(includeContent, q.getResultList());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map between subscriptionId and unread count
|
* Map between subscriptionId and unread count
|
||||||
*/
|
*/
|
||||||
@@ -318,6 +344,12 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
|
|||||||
setTimeout(query, applicationSettingsService.get().getQueryTimeout());
|
setTimeout(query, applicationSettingsService.get().getQueryTimeout());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void markAllEntries(User user, Date olderThan) {
|
||||||
|
List<FeedEntryStatus> statuses = findAllUnread(user, null, -1, -1,
|
||||||
|
null, false);
|
||||||
|
markList(statuses, olderThan);
|
||||||
|
}
|
||||||
|
|
||||||
public void markSubscriptionEntries(List<FeedSubscription> subscriptions,
|
public void markSubscriptionEntries(List<FeedSubscription> subscriptions,
|
||||||
Date olderThan) {
|
Date olderThan) {
|
||||||
List<FeedEntryStatus> statuses = findUnreadBySubscriptions(
|
List<FeedEntryStatus> statuses = findUnreadBySubscriptions(
|
||||||
|
|||||||
@@ -54,10 +54,8 @@ public class NextUnreadRedirectPage extends WebPage {
|
|||||||
List<FeedEntryStatus> statuses = null;
|
List<FeedEntryStatus> statuses = null;
|
||||||
if (StringUtils.isBlank(categoryId)
|
if (StringUtils.isBlank(categoryId)
|
||||||
|| CategoryREST.ALL.equals(categoryId)) {
|
|| CategoryREST.ALL.equals(categoryId)) {
|
||||||
List<FeedSubscription> subscriptions = feedSubscriptionDAO
|
statuses = feedEntryStatusDAO.findAllUnread(user, null, 0, 1,
|
||||||
.findAll(user);
|
order, true);
|
||||||
statuses = feedEntryStatusDAO.findBySubscriptions(subscriptions,
|
|
||||||
null, null, 0, 1, order, true);
|
|
||||||
} else {
|
} else {
|
||||||
FeedCategory category = feedCategoryDAO.findById(user,
|
FeedCategory category = feedCategoryDAO.findById(user,
|
||||||
Long.valueOf(categoryId));
|
Long.valueOf(categoryId));
|
||||||
|
|||||||
@@ -110,9 +110,8 @@ public class CategoryREST extends AbstractResourceREST {
|
|||||||
List<FeedSubscription> subscriptions = feedSubscriptionDAO
|
List<FeedSubscription> subscriptions = feedSubscriptionDAO
|
||||||
.findAll(getUser());
|
.findAll(getUser());
|
||||||
if (unreadOnly) {
|
if (unreadOnly) {
|
||||||
list = feedEntryStatusDAO.findUnreadBySubscriptions(
|
list = feedEntryStatusDAO.findAllUnread(getUser(),
|
||||||
subscriptions, newerThanDate, offset, limit + 1, order,
|
newerThanDate, offset, limit + 1, order, true);
|
||||||
true);
|
|
||||||
} else {
|
} else {
|
||||||
list = feedEntryStatusDAO.findBySubscriptions(subscriptions,
|
list = feedEntryStatusDAO.findBySubscriptions(subscriptions,
|
||||||
null, newerThanDate, offset, limit + 1, order, true);
|
null, newerThanDate, offset, limit + 1, order, true);
|
||||||
@@ -226,10 +225,7 @@ public class CategoryREST extends AbstractResourceREST {
|
|||||||
req.getOlderThan());
|
req.getOlderThan());
|
||||||
|
|
||||||
if (ALL.equals(req.getId())) {
|
if (ALL.equals(req.getId())) {
|
||||||
List<FeedSubscription> subscriptions = feedSubscriptionDAO
|
feedEntryStatusDAO.markAllEntries(getUser(), olderThan);
|
||||||
.findAll(getUser());
|
|
||||||
feedEntryStatusDAO
|
|
||||||
.markSubscriptionEntries(subscriptions, olderThan);
|
|
||||||
} else if (STARRED.equals(req.getId())) {
|
} else if (STARRED.equals(req.getId())) {
|
||||||
feedEntryStatusDAO.markStarredEntries(getUser(), olderThan);
|
feedEntryStatusDAO.markStarredEntries(getUser(), olderThan);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user