From 880661de4e8fd6735e9eba57e059fca0c719666b Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 29 Mar 2011 15:40:07 -0700 Subject: [PATCH] Paging fix for public timeline: drop replies from the stuff we pull in for the threaded web view. --- actions/public.php | 7 +++++-- lib/publicnoticestream.php | 22 +++++++++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/actions/public.php b/actions/public.php index b029407250..1b6c14b2e6 100644 --- a/actions/public.php +++ b/actions/public.php @@ -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. diff --git a/lib/publicnoticestream.php b/lib/publicnoticestream.php index 5c8d313d46..08ac790fab 100644 --- a/lib/publicnoticestream.php +++ b/lib/publicnoticestream.php @@ -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);