diff options
Diffstat (limited to 'businesslayer/feedbusinesslayer.php')
-rw-r--r-- | businesslayer/feedbusinesslayer.php | 71 |
1 files changed, 44 insertions, 27 deletions
diff --git a/businesslayer/feedbusinesslayer.php b/businesslayer/feedbusinesslayer.php index 034209add..cc7324251 100644 --- a/businesslayer/feedbusinesslayer.php +++ b/businesslayer/feedbusinesslayer.php @@ -30,11 +30,11 @@ use \OCA\AppFramework\Utility\TimeFactory; use \OCA\AppFramework\Core\API; use \OCA\News\Db\Feed; +use \OCA\News\Db\Item; use \OCA\News\Db\FeedMapper; use \OCA\News\Db\ItemMapper; use \OCA\News\Utility\Fetcher; use \OCA\News\Utility\FetcherException; -use \OCA\News\Utility\ImportParser; use \OCA\News\Utility\ArticleEnhancer\Enhancer; @@ -44,14 +44,12 @@ class FeedBusinessLayer extends BusinessLayer { private $itemMapper; private $api; private $timeFactory; - private $importParser; private $autoPurgeMinimumInterval; private $enhancer; public function __construct(FeedMapper $feedMapper, Fetcher $feedFetcher, ItemMapper $itemMapper, API $api, TimeFactory $timeFactory, - ImportParser $importParser, $autoPurgeMinimumInterval, Enhancer $enhancer){ parent::__construct($feedMapper); @@ -59,7 +57,6 @@ class FeedBusinessLayer extends BusinessLayer { $this->itemMapper = $itemMapper; $this->api = $api; $this->timeFactory = $timeFactory; - $this->importParser = $importParser; $this->autoPurgeMinimumInterval = $autoPurgeMinimumInterval; $this->enhancer = $enhancer; } @@ -226,41 +223,61 @@ class FeedBusinessLayer extends BusinessLayer { /** - * Imports the google reader json + * Import articles * @param array $json the array with json * @param string userId the username - * @return Feed the created feed + * @return Feed if one had to be created for nonexistent feeds */ - public function importGoogleReaderJSON($json, $userId) { - $url = 'http://owncloud/googlereader'; + public function importArticles($json, $userId) { + $url = 'http://owncloud/nofeed'; $urlHash = md5($url); - try { - $feed = $this->mapper->findByUrlHash($urlHash, $userId); - } catch(DoesNotExistException $ex) { - $feed = new Feed(); - $feed->setUserId($userId); - $feed->setUrlHash($urlHash); - $feed->setUrl($url); - $feed->setTitle('Google Reader'); - $feed->setAdded($this->timeFactory->getTime()); - $feed->setFolderId(0); - $feed->setPreventUpdate(true); - $feed = $this->mapper->insert($feed); + // build assoc array for fast access + $feeds = $this->findAll($userId); + $feedsDict = array(); + foreach($feeds as $feed) { + $feedsDict[$feed->getLink()] = $feed; } - foreach($this->importParser->parse($json) as $item) { - $item->setFeedId($feed->getId()); + // loop over all items and get the corresponding feed + // if the feed does not exist, create a seperate feed for them + foreach ($json as $entry) { + $item = Item::fromImport($entry); + $item->setLastModified($this->timeFactory->getTime()); + $feedLink = $entry['feedLink']; // this is not set on the item yet + + if(array_key_exists($feedLink, $feedsDict)) { + $feed = $feedsDict[$feedLink]; + $item->setFeedId($feed->getId()); + } elseif(array_key_exists($url, $feedsDict)) { + $feed = $feedsDict[$url]; + $item->setFeedId($feed->getId()); + } else { + $feed = new Feed(); + $feed->setUserId($userId); + $feed->setLink($url); + $feed->setUrl($url); + $feed->setTitle($this->api->getTrans()->t('Articles without feed')); + $feed->setAdded($this->timeFactory->getTime()); + $feed->setFolderId(0); + $feed->setPreventUpdate(true); + $feed = $this->mapper->insert($item); + + $item->setFeedId($feed->getId()); + $feedsDict[$feed->getLink()] = $feed; + } + try { - $this->itemMapper->findByGuidHash( - $item->getGuidHash(), $item->getFeedId(), $userId); - } catch(DoesNotExistException $ex) { + $this->itemMapper->findByGuidHash($item->getGuidHash(), + $feed->getId(), $userId); + } catch(DoesNotExistException $ex){ $this->itemMapper->insert($item); } } - return $this->mapper->findByUrlHash($urlHash, $userId); - + if($feed) { + return $this->mapper->findByUrlHash($urlHash, $userId); + } } |