if ($scoped === null) {
$scoped = Profile::current();
}
- // Note: we don't use CachingNoticeStream since RawInboxNoticeStream
- // uses Inbox::getKV(), which is cached.
- parent::__construct(new RawInboxNoticeStream($target), $scoped);
+ // FIXME: we don't use CachingNoticeStream - but maybe we should?
+ parent::__construct(new CachingNoticeStream(new RawInboxNoticeStream($target), 'profileall'), $scoped);
}
}
// 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));
+ }
+ if (!empty($this->selectVerbs)) {
+ $notice->whereAddIn('verb', $this->selectVerbs, $notice->columnType('verb'));
+ }
$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);
- }
}