]> git.wh0rd.org - tt-rss.git/commitdiff
fixed feed caching logic for multiuser scenario
authorRoland Angerer <dev@rangerer.at>
Fri, 14 Mar 2014 07:29:58 +0000 (08:29 +0100)
committerRoland Angerer <dev@rangerer.at>
Fri, 14 Mar 2014 07:35:39 +0000 (08:35 +0100)
only vanilla feed data may be cached as every user may have different
fetched feed hooks to apply

include/rssfuncs.php

index 0b88ef98986cba997b73e54178541ad70c87aac1..1c8de2b2f4b85ccf1e2a6e8df96228ae741728b5 100644 (file)
 
                        $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) {
                        } 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);
                                                }
                                        }
                                } */
+
+                               // 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) {
 
                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);