summaryrefslogtreecommitdiffstats
path: root/businesslayer
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-09-11 20:31:58 +0200
committerBernhard Posselt <nukeawhale@gmail.com>2013-09-12 01:00:32 +0200
commit00c6e040deec9c3998ab679dcb84fc46ae72d2ac (patch)
tree88a7ba6ab686b8a57d051f268e467773c8573059 /businesslayer
parent8ca8695fbe55599b1212de332853ebb85442b226 (diff)
removed google importer on the serverside, add importer for articles
Diffstat (limited to 'businesslayer')
-rw-r--r--businesslayer/feedbusinesslayer.php71
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);
+ }
}