From 5ebe01ba365886bf19edbb1dc5f5591c2135a8be Mon Sep 17 00:00:00 2001
From: Mikael Nordfeldth <mmn@hethane.se>
Date: Mon, 14 Jul 2014 00:59:04 +0200
Subject: [PATCH] NoticeStream fixes regarding non-post verbs

---
 lib/conversationnoticestream.php          | 6 ++----
 lib/inboxnoticestream.php                 | 3 +++
 lib/noticestream.php                      | 8 +++++++-
 lib/profilenoticestream.php               | 7 +------
 lib/publicnoticestream.php                | 6 ++----
 plugins/Favorite/lib/favenoticestream.php | 4 ++++
 6 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/lib/conversationnoticestream.php b/lib/conversationnoticestream.php
index 21b942c018..27489a42df 100644
--- a/lib/conversationnoticestream.php
+++ b/lib/conversationnoticestream.php
@@ -95,10 +95,8 @@ class RawConversationNoticeStream extends NoticeStream
             $notice->limit($offset, $limit);
         }
 
-        if (!$this->allVerbs) {
-            $notice->whereAdd(sprintf('verb="%s" OR verb="%s"',
-                                      ActivityVerb::POST,
-                                      ActivityUtils::resolveUri(ActivityVerb::POST, true)));
+        if (!empty($this->selectVerbs)) {
+            $notice->whereAddIn('verb', $this->selectVerbs, $notice->columnType('verb'));
         }
 
         // ORDER BY
diff --git a/lib/inboxnoticestream.php b/lib/inboxnoticestream.php
index eacbb77127..87868b1d79 100644
--- a/lib/inboxnoticestream.php
+++ b/lib/inboxnoticestream.php
@@ -118,6 +118,9 @@ class RawInboxNoticeStream extends NoticeStream
         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.id will give us even really old posts, which were
         // recently imported. For example if a remote instance had
diff --git a/lib/noticestream.php b/lib/noticestream.php
index c072941a69..0f53daf83f 100644
--- a/lib/noticestream.php
+++ b/lib/noticestream.php
@@ -46,7 +46,13 @@ if (!defined('STATUSNET')) {
  */
 abstract class NoticeStream
 {
-    protected $allVerbs = false;    // Will only get 'post' activityverbs by default.
+    // Will only get notices with the 'post' activityverb by default.
+    protected $selectVerbs = array();
+
+    public function __construct()
+    {
+        $this->selectVerbs = array(ActivityVerb::POST, ActivityUtils::resolveUri(ActivityVerb::POST, true));
+    }
 
     abstract function getNoticeIds($offset, $limit, $since_id, $max_id);
 
diff --git a/lib/profilenoticestream.php b/lib/profilenoticestream.php
index a59a5d848b..1fa795d320 100644
--- a/lib/profilenoticestream.php
+++ b/lib/profilenoticestream.php
@@ -121,6 +121,7 @@ class RawProfileNoticeStream extends NoticeStream
 
     function __construct($profile)
     {
+        parent::__construct();
         $this->profile = $profile;
     }
 
@@ -136,12 +137,6 @@ class RawProfileNoticeStream extends NoticeStream
         Notice::addWhereSinceId($notice, $since_id);
         Notice::addWhereMaxId($notice, $max_id);
 
-        if (!$this->allVerbs) {
-            $notice->whereAdd(sprintf('verb="%s" OR verb="%s"',
-                                      ActivityVerb::POST,
-                                      ActivityUtils::resolveUri(ActivityVerb::POST, true)));
-        }
-
         $notice->orderBy('created DESC, id DESC');
 
         if (!is_null($offset)) {
diff --git a/lib/publicnoticestream.php b/lib/publicnoticestream.php
index 222eead0ef..34f7b4a1de 100644
--- a/lib/publicnoticestream.php
+++ b/lib/publicnoticestream.php
@@ -92,10 +92,8 @@ class RawPublicNoticeStream extends NoticeStream
         Notice::addWhereSinceId($notice, $since_id);
         Notice::addWhereMaxId($notice, $max_id);
 
-        if (!$this->allVerbs) {
-            $notice->whereAdd(sprintf('verb="%s" OR verb="%s"',
-                                      ActivityVerb::POST,
-                                      ActivityUtils::resolveUri(ActivityVerb::POST, true)));
+        if (!empty($this->selectVerbs)) {
+            $notice->whereAddIn('verb', $this->selectVerbs, $notice->columnType('verb'));
         }
 
         $ids = array();
diff --git a/plugins/Favorite/lib/favenoticestream.php b/plugins/Favorite/lib/favenoticestream.php
index 6527e5441e..6294c8cdda 100644
--- a/plugins/Favorite/lib/favenoticestream.php
+++ b/plugins/Favorite/lib/favenoticestream.php
@@ -79,8 +79,12 @@ class RawFaveNoticeStream extends NoticeStream
 
     function __construct($user_id, $own)
     {
+        parent::__construct();
+
         $this->user_id = $user_id;
         $this->own     = $own;
+
+        $this->selectVerbs = array();
     }
 
     /**
-- 
2.39.5