Caching for conversation root lookup, some logic fixes in threaded view
This commit is contained in:
parent
0c2c73659c
commit
90a7631592
|
@ -44,7 +44,7 @@ class Fave extends Memcached_DataObject
|
||||||
common_log_db_error($fave, 'INSERT', __FILE__);
|
common_log_db_error($fave, 'INSERT', __FILE__);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
self::blow('fave:by_notice', $fave->notice_id);
|
self::blow('fave:by_notice:%d', $fave->notice_id);
|
||||||
|
|
||||||
Event::handle('EndFavorNotice', array($profile, $notice));
|
Event::handle('EndFavorNotice', array($profile, $notice));
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ class Fave extends Memcached_DataObject
|
||||||
if (Event::handle('StartDisfavorNotice', array($profile, $notice, &$result))) {
|
if (Event::handle('StartDisfavorNotice', array($profile, $notice, &$result))) {
|
||||||
|
|
||||||
$result = parent::delete();
|
$result = parent::delete();
|
||||||
self::blow('fave:by_notice', $this->notice_id);
|
self::blow('fave:by_notice:%d', $this->notice_id);
|
||||||
|
|
||||||
if ($result) {
|
if ($result) {
|
||||||
Event::handle('EndDisfavorNotice', array($profile, $notice));
|
Event::handle('EndDisfavorNotice', array($profile, $notice));
|
||||||
|
@ -219,7 +219,7 @@ class Fave extends Memcached_DataObject
|
||||||
static function byNotice($noticeId)
|
static function byNotice($noticeId)
|
||||||
{
|
{
|
||||||
$c = self::memcache();
|
$c = self::memcache();
|
||||||
$key = Cache::key('fave:by_notice', $noticeId);
|
$key = Cache::key('fave:by_notice:' . $noticeId);
|
||||||
|
|
||||||
$wrapper = $c->get($key);
|
$wrapper = $c->get($key);
|
||||||
if (!$wrapper) {
|
if (!$wrapper) {
|
||||||
|
@ -228,7 +228,7 @@ class Fave extends Memcached_DataObject
|
||||||
$fave->notice_id = $noticeId;
|
$fave->notice_id = $noticeId;
|
||||||
$fave->find();
|
$fave->find();
|
||||||
|
|
||||||
$profiles = array();
|
$list = array();
|
||||||
while ($fave->fetch()) {
|
while ($fave->fetch()) {
|
||||||
$list[] = clone($fave);
|
$list[] = clone($fave);
|
||||||
}
|
}
|
||||||
|
|
|
@ -498,6 +498,11 @@ class Notice extends Memcached_DataObject
|
||||||
}
|
}
|
||||||
|
|
||||||
self::blow('fave:by_notice', $this->id);
|
self::blow('fave:by_notice', $this->id);
|
||||||
|
|
||||||
|
if ($this->conversation) {
|
||||||
|
// In case we're the first, will need to calc a new root.
|
||||||
|
self::blow('notice:conversation_root:%d', $this->conversation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** save all urls in the notice to the db
|
/** save all urls in the notice to the db
|
||||||
|
@ -776,6 +781,35 @@ class Notice extends Memcached_DataObject
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Grab the earliest notice from this conversation.
|
||||||
|
*
|
||||||
|
* @return Notice or null
|
||||||
|
*/
|
||||||
|
function conversationRoot()
|
||||||
|
{
|
||||||
|
if (!empty($this->conversation)) {
|
||||||
|
$c = self::memcache();
|
||||||
|
|
||||||
|
$key = Cache::key('notice:conversation_root:' . $this->conversation);
|
||||||
|
$notice = $c->get($key);
|
||||||
|
if ($notice) {
|
||||||
|
return $notice;
|
||||||
|
}
|
||||||
|
|
||||||
|
$notice = new Notice();
|
||||||
|
$notice->conversation = $this->conversation;
|
||||||
|
$notice->orderBy('CREATED');
|
||||||
|
$notice->limit(1);
|
||||||
|
$notice->find(true);
|
||||||
|
|
||||||
|
if ($notice->N) {
|
||||||
|
$c->set($key, $notice);
|
||||||
|
return $notice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Pull up a full list of local recipients who will be getting
|
* Pull up a full list of local recipients who will be getting
|
||||||
* this notice in their inbox. Results will be cached, so don't
|
* this notice in their inbox. Results will be cached, so don't
|
||||||
|
|
|
@ -91,17 +91,13 @@ class ThreadedNoticeList extends NoticeList
|
||||||
$conversations[$convo] = true;
|
$conversations[$convo] = true;
|
||||||
|
|
||||||
// Get the convo's root notice
|
// Get the convo's root notice
|
||||||
// @fixme stream goes in wrong direction, this needs sane caching
|
$root = $notice->conversationRoot();
|
||||||
//$notice = Notice::conversationStream($convo, 0, 1);
|
if ($root) {
|
||||||
//$notice->fetch();
|
$notice = $root;
|
||||||
$root = new Notice();
|
}
|
||||||
$root->conversation = $notice->conversation;
|
|
||||||
$root->orderBy('CREATED');
|
|
||||||
$root->limit(1);
|
|
||||||
$root->find(true);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$item = $this->newListItem($root);
|
$item = $this->newListItem($notice);
|
||||||
$item->show();
|
$item->show();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
// we log exceptions and continue
|
// we log exceptions and continue
|
||||||
|
|
Loading…
Reference in New Issue