From dc8b8301d387d48e38624423cba9cf5323f26291 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Wed, 22 Oct 2014 11:06:43 +0200 Subject: fix #302 --- fetcher/feedfetcher.php | 21 +++++++++++++++++---- fetcher/fetcher.php | 11 +++++++++-- fetcher/ifeedfetcher.php | 8 +++++++- 3 files changed, 33 insertions(+), 7 deletions(-) (limited to 'fetcher') diff --git a/fetcher/feedfetcher.php b/fetcher/feedfetcher.php index a2023dd0e..a3a2ab8bb 100644 --- a/fetcher/feedfetcher.php +++ b/fetcher/feedfetcher.php @@ -45,14 +45,22 @@ class FeedFetcher implements IFeedFetcher { * @param string $url remote url of the feed * @param boolean $getFavicon if the favicon should also be fetched, * defaults to true + * @param string $lastModified a last modified value from an http header + * defaults to false. If lastModified matches the http header from the feed + * no results are fetched + * @param string $etag an etag from an http header. + * If lastModified matches the http header from the feed + * no results are fetched * @throws FetcherException if simple pie fails * @return array an array containing the new feed and its items, first * element being the Feed and second element being an array of Items */ - public function fetch($url, $getFavicon=true) { - $resource = $this->reader->download($url); + public function fetch($url, $getFavicon=true, $lastModified=null, + $etag=null) { + $resource = $this->reader->download($url, $lastModified, $etag); $modified = $resource->getLastModified(); + $etag = $resource->getEtag(); try { $parser = $this->reader->getParser(); @@ -79,7 +87,9 @@ class FeedFetcher implements IFeedFetcher { $items[] = $this->buildItem($item); } - $feed = $this->buildFeed($parsedFeed, $url, $getFavicon, $modified); + $feed = $this->buildFeed( + $parsedFeed, $url, $getFavicon, $modified, $etag + ); return [$feed, $items]; @@ -144,7 +154,8 @@ class FeedFetcher implements IFeedFetcher { } - protected function buildFeed($parsedFeed, $url, $getFavicon, $modified) { + protected function buildFeed($parsedFeed, $url, $getFavicon, $modified, + $etag) { $feed = new Feed(); // unescape content because angularjs helps against XSS @@ -157,6 +168,8 @@ class FeedFetcher implements IFeedFetcher { $feed->setTitle($title); $feed->setUrl($url); + $feed->setLastModified($modified); + $feed->setEtag($etag); $link = $parsedFeed->getUrl(); if (!$link) { diff --git a/fetcher/fetcher.php b/fetcher/fetcher.php index ae46d6212..c93402e7f 100644 --- a/fetcher/fetcher.php +++ b/fetcher/fetcher.php @@ -36,14 +36,21 @@ class Fetcher { * @param string $url remote url of the feed * @param boolean $getFavicon if the favicon should also be fetched, * defaults to true + * @param string $lastModified a last modified value from an http header + * defaults to false. If lastModified matches the http header from the feed + * no results are fetched + * @param string $etag an etag from an http header. + * If lastModified matches the http header from the feed + * no results are fetched * @throws FetcherException if simple pie fails * @return array an array containing the new feed and its items, first * element being the Feed and second element being an array of Items */ - public function fetch($url, $getFavicon=true){ + public function fetch($url, $getFavicon=true, $lastModified=null, + $etag=null) { foreach($this->fetchers as $fetcher){ if($fetcher->canHandle($url)){ - return $fetcher->fetch($url, $getFavicon); + return $fetcher->fetch($url, $getFavicon, $lastModified, $etag); } } diff --git a/fetcher/ifeedfetcher.php b/fetcher/ifeedfetcher.php index 68b1bcf64..388b491bf 100644 --- a/fetcher/ifeedfetcher.php +++ b/fetcher/ifeedfetcher.php @@ -19,11 +19,17 @@ interface IFeedFetcher { * @param string $url remote url of the feed * @param boolean $getFavicon if the favicon should also be fetched, * defaults to true + * @param string $lastModified a last modified value from an http header + * defaults to false. If lastModified matches the http header from the feed + * no results are fetched + * @param string $etag an etag from an http header. + * If lastModified matches the http header from the feed + * no results are fetched * @throws FetcherException if the fetcher encounters a problem * @return array an array containing the new feed and its items, first * element being the Feed and second element being an array of Items */ - function fetch($url, $getFavicon=true); + function fetch($url, $getFavicon=true, $lastModified=null, $etag=null); /** * @param string $url the url that should be fetched -- cgit v1.2.3