diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2015-01-23 14:32:53 +0100 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2015-01-23 14:32:53 +0100 |
commit | df509a4b856472fa22fd6d43a212c9d21bd5b40f (patch) | |
tree | be8be7824bd4ba3ee687c6e57d1383929360e505 /service | |
parent | 5adeba1a560985173974c9ac98c624093055d669 (diff) |
fix #711
Diffstat (limited to 'service')
-rw-r--r-- | service/feedservice.php | 141 |
1 files changed, 74 insertions, 67 deletions
diff --git a/service/feedservice.php b/service/feedservice.php index 29201b1d1..ec29e66c4 100644 --- a/service/feedservice.php +++ b/service/feedservice.php @@ -182,86 +182,80 @@ class FeedService extends Service { * @return Feed the updated feed entity */ public function update($feedId, $userId){ - try { - $existingFeed = $this->feedMapper->find($feedId, $userId); + $existingFeed = $this->find($feedId, $userId); - if($existingFeed->getPreventUpdate() === true) { - return $existingFeed; - } + if($existingFeed->getPreventUpdate() === true) { + return $existingFeed; + } - // for backwards compability it can be that the location is not set - // yet, if so use the url - $location = $existingFeed->getLocation(); - if (!$location) { - $location = $existingFeed->getUrl(); + // for backwards compability it can be that the location is not set + // yet, if so use the url + $location = $existingFeed->getLocation(); + if (!$location) { + $location = $existingFeed->getUrl(); + } + + try { + list($fetchedFeed, $items) = $this->feedFetcher->fetch( + $location, + false, + $existingFeed->getLastModified(), + $existingFeed->getEtag() + ); + + // if there is no feed it means that no update took place + if (!$fetchedFeed) { + return $existingFeed; } - try { - list($fetchedFeed, $items) = $this->feedFetcher->fetch( - $location, - false, - $existingFeed->getLastModified(), - $existingFeed->getEtag() - ); + // update number of articles on every feed update + $itemCount = count($items); - // if there is no feed it means that no update took place - if (!$fetchedFeed) { - return $existingFeed; - } + // this is needed to adjust to updates that add more items + // than when the feed was created. You can't update the count + // if it's lower because it may be due to the caching headers + // that were sent as the request and it might cause unwanted + // deletion and reappearing of feeds + if ($itemCount > $existingFeed->getArticlesPerUpdate()) { + $existingFeed->setArticlesPerUpdate($itemCount); + } - // update number of articles on every feed update - $itemCount = count($items); + $existingFeed->setLastModified($fetchedFeed->getLastModified()); + $existingFeed->setEtag($fetchedFeed->getEtag()); + $existingFeed->setLocation($fetchedFeed->getLocation()); + $this->feedMapper->update($existingFeed); - // this is needed to adjust to updates that add more items - // than when the feed was created. You can't update the count - // if it's lower because it may be due to the caching headers - // that were sent as the request and it might cause unwanted - // deletion and reappearing of feeds - if ($itemCount > $existingFeed->getArticlesPerUpdate()) { - $existingFeed->setArticlesPerUpdate($itemCount); - } + // insert items in reverse order because the first one is + // usually the newest item + for($i=$itemCount-1; $i>=0; $i--){ + $item = $items[$i]; + $item->setFeedId($existingFeed->getId()); - $existingFeed->setLastModified($fetchedFeed->getLastModified()); - $existingFeed->setEtag($fetchedFeed->getEtag()); - $existingFeed->setLocation($fetchedFeed->getLocation()); - $this->feedMapper->update($existingFeed); - - // insert items in reverse order because the first one is - // usually the newest item - for($i=$itemCount-1; $i>=0; $i--){ - $item = $items[$i]; - $item->setFeedId($existingFeed->getId()); - - try { - $this->itemMapper->findByGuidHash( - $item->getGuidHash(), $feedId, $userId - ); - } catch(DoesNotExistException $ex){ - $item = $this->enhancer->enhance($item, - $existingFeed->getLink()); - $item->setBody( - $this->purifier->purify($item->getBody()) - ); - $this->itemMapper->insert($item); - } + try { + $this->itemMapper->findByGuidHash( + $item->getGuidHash(), $feedId, $userId + ); + } catch(DoesNotExistException $ex){ + $item = $this->enhancer->enhance($item, + $existingFeed->getLink()); + $item->setBody( + $this->purifier->purify($item->getBody()) + ); + $this->itemMapper->insert($item); } - - } catch(FetcherException $ex){ - // failed updating is not really a problem, so only log it - $this->logger->debug( - 'Can not update feed with url ' . $existingFeed->getUrl() . - ' and location ' . $existingFeed->getLocation() . - ': ' . $ex->getMessage(), - $this->loggerParams - ); } - return $this->feedMapper->find($feedId, $userId); - - } catch (DoesNotExistException $ex){ - throw new ServiceNotFoundException('Feed does not exist'); + } catch(FetcherException $ex){ + // failed updating is not really a problem, so only log it + $this->logger->debug( + 'Can not update feed with url ' . $existingFeed->getUrl() . + ' and location ' . $existingFeed->getLocation() . + ': ' . $ex->getMessage(), + $this->loggerParams + ); } + return $this->find($feedId, $userId); } @@ -421,4 +415,17 @@ class FeedService extends Service { } + /** + * Sets the feed ordering + * @param int $id the id of the feed + * @param int $ordering 0 for no ordering, 1 for reverse, 2 for normal + * @param string $userId the id of the user + */ + public function setOrdering ($id, $ordering, $userId) { + $feed = $this->find($id, $userId); + $feed->setOrdering($ordering); + $this->feedMapper->update($feed); + } + + } |