]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/inboxnoticestream.php
Misses this file to merge. I like the comments.
[quix0rs-gnu-social.git] / lib / inboxnoticestream.php
index 913e9fff2e85e685feb95b1e9709810d523ee9ae..b5a8877d99d426a9a425c4952ea6ef1d9d3a0c61 100644 (file)
@@ -57,9 +57,8 @@ class InboxNoticeStream extends ScopingNoticeStream
         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);
     }
 }
 
@@ -102,46 +101,39 @@ class RawInboxNoticeStream extends NoticeStream
     {
         $notice = new Notice();
         $notice->selectAdd();
-        $notice->selectAdd('notice_id');
-        // Reply is a class for mentions
-        $notice->joinAdd(array('id', 'reply:notice_id'));
-
-        $notice->profile_id = $this->target->id;
+        $notice->selectAdd('id');
+        $notice->whereAdd(sprintf('notice.created > "%s"', $notice->escape($this->target->created)));
+        // Reply:: is a table of mentions
+        // 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=%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('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();
         }
 
-        $ids = $notice->fetchAll('notice_id');
+        $ids = $notice->fetchAll('id');
 
         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);
-    }
 }