Package com.commafeed.backend.service

Source Code of com.commafeed.backend.service.FeedUpdateService

package com.commafeed.backend.service;

import java.util.Date;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Singleton;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import org.apache.commons.codec.digest.DigestUtils;

import com.commafeed.backend.dao.FeedEntryDAO;
import com.commafeed.backend.dao.FeedEntryStatusDAO;
import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.FeedEntryContent;
import com.commafeed.backend.model.FeedEntryStatus;
import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.service.FeedEntryFilteringService.FeedEntryFilterException;

@Slf4j
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
@Singleton
public class FeedUpdateService {

  private final FeedEntryDAO feedEntryDAO;
  private final FeedEntryStatusDAO feedEntryStatusDAO;
  private final FeedEntryContentService feedEntryContentService;
  private final FeedEntryFilteringService feedEntryFilteringService;

  /**
   * this is NOT thread-safe
   */
  public boolean addEntry(Feed feed, FeedEntry entry, List<FeedSubscription> subscriptions) {

    Long existing = feedEntryDAO.findExisting(entry.getGuid(), feed);
    if (existing != null) {
      return false;
    }

    FeedEntryContent content = feedEntryContentService.findOrCreate(entry.getContent(), feed.getLink());
    entry.setGuidHash(DigestUtils.sha1Hex(entry.getGuid()));
    entry.setContent(content);
    entry.setInserted(new Date());
    entry.setFeed(feed);
    feedEntryDAO.saveOrUpdate(entry);

    // if filter does not match the entry, mark it as read
    for (FeedSubscription sub : subscriptions) {
      boolean matches = true;
      try {
        matches = feedEntryFilteringService.filterMatchesEntry(sub.getFilter(), entry);
      } catch (FeedEntryFilterException e) {
        log.error("could not evaluate filter {}", sub.getFilter(), e);
      }
      if (!matches) {
        FeedEntryStatus status = new FeedEntryStatus(sub.getUser(), sub, entry);
        status.setRead(true);
        feedEntryStatusDAO.saveOrUpdate(status);
      }
    }

    return true;
  }
}
TOP

Related Classes of com.commafeed.backend.service.FeedUpdateService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.