From d3399e93e82f8b9a59fc096c7900a569a8195546 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 22 Aug 2011 12:25:04 -0400 Subject: [PATCH] use listGet() for ConversationNoticeStream --- classes/Notice.php | 5 +-- lib/conversationnoticestream.php | 52 +++++++++++++++++++------------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index 122c3c6299..3fad9bf029 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -577,10 +577,7 @@ class Notice extends Memcached_DataObject $this->blowStream('public'); } - // XXX: Before we were blowing the casche only if the notice id - // was not the root of the conversation. What to do now? - - self::blow('notice:conversation_ids:%d', $this->conversation); + self::blow('notice:list-ids:conversation:%s', $this->conversation); self::blow('conversation::notice_count:%d', $this->conversation); if (!empty($this->repeat_of)) { diff --git a/lib/conversationnoticestream.php b/lib/conversationnoticestream.php index adf610ffe7..c43b5deb24 100644 --- a/lib/conversationnoticestream.php +++ b/lib/conversationnoticestream.php @@ -20,7 +20,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * - * @category Cache + * @category NoticeStream * @package StatusNet * @author Evan Prodromou * @copyright 2011 StatusNet, Inc. @@ -52,8 +52,7 @@ class ConversationNoticeStream extends ScopingNoticeStream $profile = Profile::current(); } - parent::__construct(new CachingNoticeStream(new RawConversationNoticeStream($id), - 'notice:conversation_ids:'.$id), + parent::__construct(new RawConversationNoticeStream($id), $profile); } } @@ -77,24 +76,35 @@ class RawConversationNoticeStream extends NoticeStream $this->id = $id; } + function getNotices($offset, $limit, $sinceId = null, $maxId = null) + { + $all = Memcached_DataObject::listGet('Notice', 'conversation', array($this->id)); + $notices = $all[$this->id]; + // Re-order in reverse-chron + usort($notices, array('RawConversationNoticeStream', '_reverseChron')); + // FIXME: handle since and max + $wanted = array_slice($notices, $offset, $limit); + return new ArrayWrapper($wanted); + } + function getNoticeIds($offset, $limit, $since_id, $max_id) { - $notice = new Notice(); - - $notice->selectAdd(); // clears it - $notice->selectAdd('id'); - - $notice->conversation = $this->id; - - $notice->orderBy('created DESC, id DESC'); - - if (!is_null($offset)) { - $notice->limit($offset, $limit); - } - - Notice::addWhereSinceId($notice, $since_id); - Notice::addWhereMaxId($notice, $max_id); - - return $notice->fetchAll('id'); + $notice = $this->getNotices($offset, $limit, $since_id, $max_id); + $ids = $notice->fetchAll('id'); + return $ids; } -} \ No newline at end of file + + function _reverseChron($a, $b) + { + $at = strtotime($a->created); + $bt = strtotime($b->created); + + if ($at == $bt) { + return 0; + } else if ($at > $bt) { + return -1; + } else { + return 1; + } + } +}