summaryrefslogtreecommitdiffstats
path: root/fetcher
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-10-22 11:06:43 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2014-10-22 11:06:43 +0200
commitdc8b8301d387d48e38624423cba9cf5323f26291 (patch)
treebbc8f280f74f4f628d0f2720e410bf09f2134325 /fetcher
parentcc3fa38cee2e24dacb940ec5d7ca41e593aa824a (diff)
fix #302
Diffstat (limited to 'fetcher')
-rw-r--r--fetcher/feedfetcher.php21
-rw-r--r--fetcher/fetcher.php11
-rw-r--r--fetcher/ifeedfetcher.php8
3 files changed, 33 insertions, 7 deletions
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