package com.commafeed.backend.services; import java.util.Date; import java.util.List; import javax.ejb.Stateless; import javax.inject.Inject; import com.commafeed.backend.cache.CacheService; import com.commafeed.backend.dao.FeedEntryDAO; import com.commafeed.backend.dao.FeedEntryStatusDAO; import com.commafeed.backend.dao.FeedSubscriptionDAO; import com.commafeed.backend.model.FeedEntry; import com.commafeed.backend.model.FeedEntryStatus; import com.commafeed.backend.model.FeedSubscription; import com.commafeed.backend.model.User; import com.google.common.collect.Lists; @Stateless public class FeedEntryService { @Inject FeedEntryStatusDAO feedEntryStatusDAO; @Inject FeedSubscriptionDAO feedSubscriptionDAO; @Inject FeedEntryDAO feedEntryDAO; @Inject CacheService cache; public void markEntry(User user, Long entryId, Long subscriptionId, boolean read) { FeedSubscription sub = feedSubscriptionDAO.findById(user, subscriptionId); if (sub == null) { return; } FeedEntry entry = feedEntryDAO.findById(entryId); if (entry == null) { return; } FeedEntryStatus status = feedEntryStatusDAO.getStatus(sub, entry); if (status.isMarkable()) { status.setRead(read); feedEntryStatusDAO.saveOrUpdate(status); cache.invalidateUnreadCount(sub); } } public void starEntry(User user, Long entryId, Long subscriptionId, boolean starred) { FeedSubscription sub = feedSubscriptionDAO.findById(user, subscriptionId); if (sub == null) { return; } FeedEntry entry = feedEntryDAO.findById(entryId); if (entry == null) { return; } FeedEntryStatus status = feedEntryStatusDAO.getStatus(sub, entry); status.setStarred(starred); feedEntryStatusDAO.saveOrUpdate(status); } public void markSubscriptionEntries(List subscriptions, Date olderThan) { List statuses = feedEntryStatusDAO.findBySubscriptions(subscriptions, true, null, null, -1, -1, null, false); markList(statuses, olderThan); cache.invalidateUnreadCount(subscriptions.toArray(new FeedSubscription[0])); } public void markStarredEntries(User user, Date olderThan) { List statuses = feedEntryStatusDAO.findStarred(user, null, -1, -1, null, false); markList(statuses, olderThan); } private void markList(List statuses, Date olderThan) { List list = Lists.newArrayList(); for (FeedEntryStatus status : statuses) { if (!status.isRead()) { Date inserted = status.getEntry().getInserted(); if (olderThan == null || inserted == null || olderThan.after(inserted)) { status.setRead(true); list.add(status); } } } feedEntryStatusDAO.saveOrUpdate(list); } }