]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/cachingnoticestream.php
Misses this file to merge. I like the comments.
[quix0rs-gnu-social.git] / lib / cachingnoticestream.php
index f8ab2a85afb4388846a00c8dd5185f251d462c5f..e68bb3a1f2a476ec1ba7aac218a571a5d585ebd5 100644 (file)
@@ -51,11 +51,13 @@ class CachingNoticeStream extends NoticeStream
 
     public $stream   = null;
     public $cachekey = null;
+    public $useLast  = true;
 
-    function __construct($stream, $cachekey)
+    function __construct($stream, $cachekey, $useLast = true)
     {
         $this->stream   = $stream;
         $this->cachekey = $cachekey;
+        $this->useLast  = $useLast;
     }
 
     function getNoticeIds($offset, $limit, $sinceId, $maxId)
@@ -85,29 +87,31 @@ class CachingNoticeStream extends NoticeStream
             return $ids;
         }
 
-        // Check the cache to see if we have a "last-known-good" version.
-        // The actual cache gets blown away when new notices are added, but
-        // the "last" value holds a lot of info. We might need to only generate
-        // a few at the "tip", which can bound our queries and save lots
-        // of time.
+        if ($this->useLast) {
+            // Check the cache to see if we have a "last-known-good" version.
+            // The actual cache gets blown away when new notices are added, but
+            // the "last" value holds a lot of info. We might need to only generate
+            // a few at the "tip", which can bound our queries and save lots
+            // of time.
 
-        $laststr = $cache->get($idkey.';last');
+            $laststr = $cache->get($idkey.';last');
 
-        if ($laststr !== false) {
-            $window = explode(',', $laststr);
-            $last_id = $window[0];
-            $new_ids = $this->stream->getNoticeIds(0, self::CACHE_WINDOW, $last_id, 0);
+            if ($laststr !== false) {
+                $window = explode(',', $laststr);
+                $last_id = $window[0];
+                $new_ids = $this->stream->getNoticeIds(0, self::CACHE_WINDOW, $last_id, 0);
 
-            $new_window = array_merge($new_ids, $window);
+                $new_window = array_merge($new_ids, $window);
 
-            $new_windowstr = implode(',', $new_window);
+                $new_windowstr = implode(',', $new_window);
 
-            $result = $cache->set($idkey, $new_windowstr);
-            $result = $cache->set($idkey . ';last', $new_windowstr);
+                $result = $cache->set($idkey, $new_windowstr);
+                $result = $cache->set($idkey . ';last', $new_windowstr);
 
-            $ids = array_slice($new_window, $offset, $limit);
+                $ids = array_slice($new_window, $offset, $limit);
 
-            return $ids;
+                return $ids;
+            }
         }
 
         // No cache hits :( Generate directly and stick the results
@@ -118,7 +122,10 @@ class CachingNoticeStream extends NoticeStream
         $windowstr = implode(',', $window);
 
         $result = $cache->set($idkey, $windowstr);
-        $result = $cache->set($idkey . ';last', $windowstr);
+
+        if ($this->useLast) {
+            $result = $cache->set($idkey . ';last', $windowstr);
+        }
 
         // Return just the slice that was requested