]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
pre-fill repeats of notices
authorEvan Prodromou <evan@status.net>
Mon, 22 Aug 2011 16:39:37 +0000 (12:39 -0400)
committerEvan Prodromou <evan@status.net>
Mon, 22 Aug 2011 16:39:37 +0000 (12:39 -0400)
classes/Notice.php
lib/noticelist.php
lib/threadednoticelist.php

index 3fad9bf029e91a3d4179ca94eb9c552b92e9e64c..3ea7a2d497dcbe7d8ebc35ccc2f7d449fa712612 100644 (file)
@@ -581,7 +581,9 @@ class Notice extends Memcached_DataObject
         self::blow('conversation::notice_count:%d', $this->conversation);
 
         if (!empty($this->repeat_of)) {
+            // XXX: we should probably only use one of these
             $this->blowStream('notice:repeats:%d', $this->repeat_of);
+            self::blow('notice:list-ids:repeat_of:%d', $this->repeat_of);
         }
 
         $original = Notice::staticGet('id', $this->repeat_of);
@@ -2432,7 +2434,7 @@ class Notice extends Memcached_DataObject
     function __sleep()
     {
         $vars = parent::__sleep();
-        $skip = array('_original', '_profile', '_groups', '_attachments', '_faves', '_replies');
+        $skip = array('_original', '_profile', '_groups', '_attachments', '_faves', '_replies', '_repeats');
         return array_diff($vars, $skip);
     }
     
@@ -2597,4 +2599,30 @@ class Notice extends Memcached_DataObject
             $notice->_setReplies($ids);
         }
     }
+
+    protected $_repeats;
+
+    function getRepeats()
+    {
+        if (isset($this->_repeats) && is_array($this->_repeats)) {
+            return $this->_repeats;
+        }
+        $repeatMap = Memcached_DataObject::listGet('Notice', 'repeat_of', array($this->id));
+        $this->_repeats = $repeatMap[$this->id];
+        return $this->_repeats;
+    }
+
+    function _setRepeats(&$repeats)
+    {
+        $this->_repeats = $repeats;
+    }
+
+    static function fillRepeats(&$notices)
+    {
+        $ids = self::_idsOf($notices);
+        $repeatMap = Memcached_DataObject::listGet('Notice', 'repeat_of', $ids);
+        foreach ($notices as $notice) {
+            $notice->_setRepeats($repeatMap[$notice->id]);
+        }
+    }
 }
index 7ec5be1c0ff169f9e86b9d8980846bfde66f7c7c..91acbb8d580b6c8bb72b4de58c1f9b9d9a50fe6e 100644 (file)
@@ -128,6 +128,8 @@ class NoticeList extends Widget
         Notice::fillAttachments($notices);
         // Prefill attachments
         Notice::fillFaves($notices);
+        // Prefill repeat data
+        Notice::fillRepeats($notices);
        // Prefill the profiles
        $profiles = Notice::fillProfiles($notices);
        // Prefill the avatars
@@ -135,13 +137,14 @@ class NoticeList extends Widget
        
        $p = Profile::current();
        
-       $ids = array();
+       if (!empty($p)) {
+
+            $ids = array();
        
-       foreach ($notices as $notice) {
-           $ids[] = $notice->id;
-       }
+            foreach ($notices as $notice) {
+                $ids[] = $notice->id;
+            }
        
-       if (!empty($p)) {
                Memcached_DataObject::pivotGet('Fave', 'notice_id', $ids, array('user_id' => $p->id));
                Memcached_DataObject::pivotGet('Notice', 'repeat_of', $ids, array('profile_id' => $p->id));
        }
index 6df4ed99df92dc94da5dcaa2c581a990e29f62dc..88d7bb5b45f168603fa9538ed6f2ad98d5aae012 100644 (file)
@@ -559,12 +559,14 @@ class ThreadedNoticeListRepeatsItem extends NoticeListActorsItem
 {
     function getProfiles()
     {
-        $rep = $this->notice->repeatStream();
+        $repeats = $this->notice->getRepeats();
 
         $profiles = array();
-        while ($rep->fetch()) {
+
+        foreach ($repeats as $rep) {
             $profiles[] = $rep->profile_id;
         }
+
         return $profiles;
     }