'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);
- }
}