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.
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'));
}
}
class RawPublicNoticeStream extends NoticeStream
{
+ var $threaded;
+
+ function __construct($threaded=false)
+ {
+ $this->threaded = $threaded;
+ }
+
function getNoticeIds($offset, $limit, $since_id, $max_id)
{
$notice = new Notice();
$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);