* @link http://status.net/
*/
-if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); }
+if (!defined('GNUSOCIAL')) { exit(1); }
/**
* Stream of notices for a profile's "all" feed
*/
function __construct(Profile $target, Profile $scoped=null)
{
- if ($scoped === null) {
- $scoped = Profile::current();
- }
// FIXME: we don't use CachingNoticeStream - but maybe we should?
- parent::__construct(new RawInboxNoticeStream($target), $scoped);
+ parent::__construct(new CachingNoticeStream(new RawInboxNoticeStream($target), 'profileall'), $scoped);
}
}
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
*/
-class RawInboxNoticeStream extends NoticeStream
+class RawInboxNoticeStream extends FullNoticeStream
{
protected $target = null;
protected $inbox = null;
*/
function __construct(Profile $target)
{
+ parent::__construct();
$this->target = $target;
}
// Subscription:: is a table of subscriptions (every user is subscribed to themselves)
$notice->whereAdd(
sprintf('notice.id IN (SELECT notice_id FROM reply WHERE profile_id=%1$d) ' .
- 'OR notice.profile_id IN (SELECT subscribed FROM subscription WHERE subscriber=%d)', $this->target->id)
+ 'OR notice.profile_id IN (SELECT subscribed FROM subscription WHERE subscriber=%1$d) ' .
+ 'OR notice.id IN (SELECT notice_id FROM group_inbox WHERE group_id IN (SELECT group_id FROM group_member WHERE profile_id=%1$d))' .
+ 'OR notice.id IN (SELECT notice_id FROM attention WHERE profile_id=%1$d)',
+ $this->target->id)
);
+ if (!empty($since_id)) {
+ $notice->whereAdd(sprintf('notice.id > %d', $since_id));
+ }
+ if (!empty($max_id)) {
+ $notice->whereAdd(sprintf('notice.id <= %d', $max_id));
+ }
+
+ self::filterVerbs($notice, $this->selectVerbs);
+
$notice->limit($offset, $limit);
- $notice->orderBy('notice.created DESC');
+ // notice.id will give us even really old posts, which were
+ // recently imported. For example if a remote instance had
+ // problems and just managed to post here. Another solution
+ // would be to have a 'notice.imported' field and order by it.
+ $notice->orderBy('notice.id DESC');
if (!$notice->find()) {
return array();
return $ids;
}
-
- function getNotices($offset, $limit, $sinceId, $maxId)
- {
- $all = array();
-
- do {
-
- $ids = $this->getNoticeIds($offset, $limit, $sinceId, $maxId);
-
- $notices = Notice::pivotGet('id', $ids);
-
- // By default, takes out false values
-
- $notices = array_filter($notices);
-
- $all = array_merge($all, $notices);
-
- if (count($notices < count($ids))) {
- $offset += $limit;
- $limit -= count($notices);
- }
-
- } while (count($notices) < count($ids) && count($ids) > 0);
-
- return new ArrayWrapper($all);
- }
}