]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
stream for direct responses
authorEvan Prodromou <evan@status.net>
Wed, 9 Mar 2011 15:25:50 +0000 (10:25 -0500)
committerEvan Prodromou <evan@status.net>
Wed, 9 Mar 2011 15:25:50 +0000 (10:25 -0500)
classes/Notice.php

index d520f4728f60d98758041aae7fce74a923a497a0..d49a8f483b131abaa2ea8cf18fe65d069d777a78 100644 (file)
@@ -463,6 +463,10 @@ class Notice extends Memcached_DataObject
         // was not the root of the conversation.  What to do now?
 
         self::blow('notice:conversation_ids:%d', $this->conversation);
+        
+        if (!empty($this->reply_to)) {
+            self::blow('notice:responses:%d', $this->reply_to);
+        }
 
         if (!empty($this->repeat_of)) {
             self::blow('notice:repeats:%d', $this->repeat_of);
@@ -492,6 +496,7 @@ class Notice extends Memcached_DataObject
         $this->blowOnInsert();
 
         self::blow('profile:notice_ids:%d;last', $this->profile_id);
+        self::blow('notice:responses:%d', $this->id);
 
         if ($this->isPublic()) {
             self::blow('public;last');
@@ -2133,4 +2138,46 @@ class Notice extends Memcached_DataObject
                     ($this->is_local != Notice::GATEWAY));
         }
     }
+
+    function responseStream($offset=0, $limit=20, $since_id=0, $max_id=0)
+    {
+        $ids = Notice::stream(array($this, '_responseStreamDirect'),
+                              array(),
+                              'notice:responses:'.$id,
+                              $offset, $limit, $since_id, $max_id);
+
+        return Notice::getStreamByIds($ids);
+    }
+
+    function _responseStreamDirect($offset=0, $limit=20, $since_id=0, $max_id=0)
+    {
+        $notice = new Notice();
+
+        $notice->selectAdd(); // clears it
+        $notice->selectAdd('id');
+
+        $notice->reply_to = $this->reply_to;
+
+        $notice->orderBy('created DESC, id DESC');
+
+        if (!is_null($offset)) {
+            $notice->limit($offset, $limit);
+        }
+
+        Notice::addWhereSinceId($notice, $since_id);
+        Notice::addWhereMaxId($notice, $max_id);
+
+        $ids = array();
+
+        if ($notice->find()) {
+            while ($notice->fetch()) {
+                $ids[] = $notice->id;
+            }
+        }
+
+        $notice->free();
+        $notice = NULL;
+
+        return $ids;
+    }
 }