From 95beaa147139647fd7844b6dda67a844da80e033 Mon Sep 17 00:00:00 2001 From: Roland Angerer Date: Fri, 14 Mar 2014 08:29:58 +0100 Subject: [PATCH 1/2] fixed feed caching logic for multiuser scenario only vanilla feed data may be cached as every user may have different fetched feed hooks to apply --- include/rssfuncs.php | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/include/rssfuncs.php b/include/rssfuncs.php index 0b88ef989..1c8de2b2f 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -267,7 +267,13 @@ $force_refetch = isset($_REQUEST["force_refetch"]); - if (file_exists($cache_filename) && + foreach ($pluginhost->get_hooks(PluginHost::HOOK_FETCH_FEED) as $plugin) { + $feed_data = $plugin->hook_fetch_feed($feed_data, $fetch_url, $owner_uid, $feed); + } + + // try cache + if (!$feed_data && + file_exists($cache_filename) && is_readable($cache_filename) && !$auth_login && !$auth_pass && filemtime($cache_filename) > time() - 30) { @@ -283,14 +289,8 @@ } else { _debug("local cache will not be used for this feed", $debug_enabled); } - } - - if (!$rss) { - - foreach ($pluginhost->get_hooks(PluginHost::HOOK_FETCH_FEED) as $plugin) { - $feed_data = $plugin->hook_fetch_feed($feed_data, $fetch_url, $owner_uid, $feed); - } + // fetch feed from source if (!$feed_data) { _debug("fetching [$fetch_url]...", $debug_enabled); _debug("If-Modified-Since: ".gmdate('D, d M Y H:i:s \G\M\T', $last_article_timestamp), $debug_enabled); @@ -329,6 +329,16 @@ } } } */ + + // cache vanilla feed data for re-use + if ($feed_data && !$auth_pass && !$auth_login && is_writable(CACHE_DIR . "/simplepie")) { + $new_rss_hash = sha1($feed_data); + + if ($new_rss_hash != $rss_hash) { + _debug("saving $cache_filename", $debug_enabled); + @file_put_contents($cache_filename, $feed_data); + } + } } if (!$feed_data) { @@ -380,16 +390,6 @@ if (!$rss->error()) { - // cache data for later - if (!$auth_pass && !$auth_login && is_writable(CACHE_DIR . "/simplepie")) { - $new_rss_hash = sha1($feed_data); - - if ($new_rss_hash != $rss_hash && count($rss->get_items()) > 0 ) { - _debug("saving $cache_filename", $debug_enabled); - @file_put_contents($cache_filename, $feed_data); - } - } - // We use local pluginhost here because we need to load different per-user feed plugins $pluginhost->run_hooks(PluginHost::HOOK_FEED_PARSED, "hook_feed_parsed", $rss); From f77c72038f9a001e8cf2e37213714a2d350d4810 Mon Sep 17 00:00:00 2001 From: Roland Angerer Date: Fri, 14 Mar 2014 08:35:48 +0100 Subject: [PATCH 2/2] deactivated FeedParser re-use as it is not multiuser safe different users may have different fetch feed and feed fetched hooks --- include/rssfuncs.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/rssfuncs.php b/include/rssfuncs.php index 1c8de2b2f..4044d1f85 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -183,7 +183,7 @@ while ($tline = db_fetch_assoc($tmp_result)) { if($debug) _debug(" => " . $tline["last_updated"] . ", " . $tline["id"] . " " . $tline["owner_uid"]); - $rss = update_rss_feed($tline["id"], true, false, $rss); + $rss = update_rss_feed($tline["id"], true, false); _debug_suppress(false); ++$nf; }