update conversations to use newer query format

This commit is contained in:
Evan Prodromou 2009-06-25 09:43:30 -07:00
parent 262f864555
commit 3ca9e85ce4
2 changed files with 54 additions and 11 deletions

View File

@ -63,6 +63,7 @@ class ConversationAction extends Action
if (empty($this->id)) { if (empty($this->id)) {
return false; return false;
} }
$this->id = $this->id+0;
$this->page = $this->trimmed('page'); $this->page = $this->trimmed('page');
if (empty($this->page)) { if (empty($this->page)) {
$this->page = 1; $this->page = 1;
@ -106,18 +107,10 @@ class ConversationAction extends Action
function showContent() function showContent()
{ {
// FIXME this needs to be a tree, not a list
$qry = 'SELECT * FROM notice WHERE conversation = %s ';
$offset = ($this->page-1) * NOTICES_PER_PAGE; $offset = ($this->page-1) * NOTICES_PER_PAGE;
$limit = NOTICES_PER_PAGE + 1; $limit = NOTICES_PER_PAGE + 1;
$txt = sprintf($qry, $this->id); $notices = Notice::conversationStream($this->id, $offset, $limit);
$notices = Notice::getStream($txt,
'notice:conversation:'.$this->id,
$offset, $limit);
$ct = new ConversationTree($notices, $this); $ct = new ConversationTree($notices, $this);
@ -126,7 +119,6 @@ class ConversationAction extends Action
$this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE, $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
$this->page, 'conversation', array('id' => $this->id)); $this->page, 'conversation', array('id' => $this->id));
} }
} }
/** /**

View File

@ -346,7 +346,7 @@ class Notice extends Memcached_DataObject
{ {
$cache = common_memcache(); $cache = common_memcache();
if ($cache) { if ($cache) {
$ck = 'notice:conversation:'.$this->conversation; $ck = 'notice:conversation_ids:'.$this->conversation;
$cache->delete($ck); $cache->delete($ck);
if ($blowLast) { if ($blowLast) {
$cache->delete($ck.';last'); $cache->delete($ck.';last');
@ -762,6 +762,57 @@ class Notice extends Memcached_DataObject
return $ids; return $ids;
} }
function conversationStream($id, $offset=0, $limit=20, $since_id=0, $max_id=0, $since=null)
{
$ids = Notice::stream(array('Notice', '_conversationStreamDirect'),
array($id),
'notice:conversation_ids:'.$id,
$offset, $limit, $since_id, $max_id, $since);
return Notice::getStreamByIds($ids);
}
function _conversationStreamDirect($id, $offset=0, $limit=20, $since_id=0, $max_id=0, $since=null)
{
$notice = new Notice();
$notice->selectAdd(); // clears it
$notice->selectAdd('id');
$notice->whereAdd('conversation = '.$id);
$notice->orderBy('id DESC');
if (!is_null($offset)) {
$notice->limit($offset, $limit);
}
if ($since_id != 0) {
$notice->whereAdd('id > ' . $since_id);
}
if ($max_id != 0) {
$notice->whereAdd('id <= ' . $max_id);
}
if (!is_null($since)) {
$notice->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\'');
}
$ids = array();
if ($notice->find()) {
while ($notice->fetch()) {
$ids[] = $notice->id;
}
}
$notice->free();
$notice = NULL;
return $ids;
}
function addToInboxes() function addToInboxes()
{ {
$enabled = common_config('inboxes', 'enabled'); $enabled = common_config('inboxes', 'enabled');