]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Paging fix for public timeline: drop replies from the stuff we pull in for the thread...
authorBrion Vibber <brion@pobox.com>
Tue, 29 Mar 2011 22:40:07 +0000 (15:40 -0700)
committerBrion Vibber <brion@pobox.com>
Tue, 29 Mar 2011 22:40:07 +0000 (15:40 -0700)
actions/public.php
lib/publicnoticestream.php

index b0294072504d9c5cca88c16cce6e6b89fca99bf1..1b6c14b2e6676842ef81e62135cf0db5ab0218c5 100644 (file)
@@ -85,8 +85,11 @@ class PublicAction extends Action
 
         common_set_returnto($this->selfUrl());
 
-        $this->notice = Notice::publicStream(($this->page-1)*NOTICES_PER_PAGE,
-                                       NOTICES_PER_PAGE + 1);
+        $stream = new PublicNoticeStream(PublicNoticeStream::THREADED);
+        $this->notice = $stream->getNotices(($this->page-1)*NOTICES_PER_PAGE,
+                                            NOTICES_PER_PAGE + 1,
+                                            0,
+                                            0);
 
         if (!$this->notice) {
             // TRANS: Server error displayed when a public timeline cannot be retrieved.
index 5c8d313d46591dd3650d80a6bd78352a9aceca48..08ac790fabf7889270f0a07b9f47dbd709818d13 100644 (file)
@@ -47,10 +47,16 @@ if (!defined('STATUSNET')) {
 
 class PublicNoticeStream extends ScopingNoticeStream
 {
-    function __construct()
+    const THREADED=true;
+
+    /**
+     *
+     * @param boolean $threaded set to true to exclude replies, for later fetching
+     */
+    function __construct($threaded=false)
     {
-        parent::__construct(new CachingNoticeStream(new RawPublicNoticeStream(),
-                                                    'public'));
+        parent::__construct(new CachingNoticeStream(new RawPublicNoticeStream($threaded),
+                                                    $threaded ? 'public:threaded' : 'public'));
     }
 }
 
@@ -67,6 +73,13 @@ class PublicNoticeStream extends ScopingNoticeStream
 
 class RawPublicNoticeStream extends NoticeStream
 {
+    var $threaded;
+
+    function __construct($threaded=false)
+    {
+        $this->threaded = $threaded;
+    }
+
     function getNoticeIds($offset, $limit, $since_id, $max_id)
     {
         $notice = new Notice();
@@ -87,6 +100,9 @@ class RawPublicNoticeStream extends NoticeStream
             $notice->whereAdd('is_local !='. Notice::LOCAL_NONPUBLIC);
             $notice->whereAdd('is_local !='. Notice::GATEWAY);
         }
+        if ($this->threaded) {
+            $notice->whereAdd('reply_to IS NULL');
+        }
 
         Notice::addWhereSinceId($notice, $since_id);
         Notice::addWhereMaxId($notice, $max_id);