From 16042387a0f3f88b6f5eb2a1a916f5bb4b08d737 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 3 Aug 2011 00:59:09 -0400 Subject: [PATCH] pre-fill the addressees of notices in a list --- classes/Notice.php | 49 ++++++++++++++++++++++------------- lib/filteringnoticestream.php | 1 + 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index eee6c2a502..d39aea6c22 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -1303,6 +1303,8 @@ class Notice extends Memcached_DataObject return $reply; } + protected $_replies = -1; + /** * Pull the complete list of @-reply targets for this notice. * @@ -1310,31 +1312,28 @@ class Notice extends Memcached_DataObject */ function getReplies() { - $keypart = sprintf('notice:reply_ids:%d', $this->id); - - $idstr = self::cacheGet($keypart); + if ($this->_replies != -1) { + return $this->_replies; + } - if ($idstr !== false) { - $ids = explode(',', $idstr); - } else { - $ids = array(); + $replyMap = Memcached_DataObject::listGet('Reply', 'notice_id', array($this->id)); - $reply = new Reply(); - $reply->selectAdd(); - $reply->selectAdd('profile_id'); - $reply->notice_id = $this->id; + $ids = array(); - if ($reply->find()) { - while($reply->fetch()) { - $ids[] = $reply->profile_id; - } - } - self::cacheSet($keypart, implode(',', $ids)); + foreach ($replyMap[$this->id] as $reply) { + $ids[] = $reply->profile_id; } + $this->_replies = $ids; + return $ids; } + function _setReplies($replies) + { + $this->_replies = $replies; + } + /** * Pull the complete list of @-reply targets for this notice. * @@ -2436,7 +2435,7 @@ class Notice extends Memcached_DataObject function __sleep() { $vars = parent::__sleep(); - $skip = array('_original', '_profile', '_groups', '_attachments', '_faves'); + $skip = array('_original', '_profile', '_groups', '_attachments', '_faves', '_replies'); return array_diff($vars, $skip); } @@ -2579,4 +2578,18 @@ class Notice extends Memcached_DataObject $notice->_setFaves($faveMap[$notice->id]); } } + + static function fillReplies(&$notices) + { + $ids = self::_idsOf($notices); + $replyMap = Memcached_DataObject::listGet('Reply', 'notice_id', $ids); + foreach ($notices as $notice) { + $replies = $replyMap[$notice->id]; + $ids = array(); + foreach ($replies as $reply) { + $ids[] = $reply->profile_id; + } + $notice->_setReplies($ids); + } + } } diff --git a/lib/filteringnoticestream.php b/lib/filteringnoticestream.php index 267955dfd9..0b0fab481e 100644 --- a/lib/filteringnoticestream.php +++ b/lib/filteringnoticestream.php @@ -86,6 +86,7 @@ abstract class FilteringNoticeStream extends NoticeStream // XXX: this should probably only be in the scoping one. Notice::fillGroups($notices); + Notice::fillReplies($notices); foreach ($notices as $notice) { if ($this->filter($notice)) { -- 2.39.5