make faves work with ids
This commit is contained in:
parent
021b520a11
commit
5314d9b2cf
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
|
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
|
||||||
|
|
||||||
class Fave extends Memcached_DataObject
|
class Fave extends Memcached_DataObject
|
||||||
{
|
{
|
||||||
###START_AUTOCODE
|
###START_AUTOCODE
|
||||||
/* the code below is auto generated do not remove the above tag */
|
/* the code below is auto generated do not remove the above tag */
|
||||||
@ -31,9 +31,58 @@ class Fave extends Memcached_DataObject
|
|||||||
}
|
}
|
||||||
return $fave;
|
return $fave;
|
||||||
}
|
}
|
||||||
|
|
||||||
function &pkeyGet($kv)
|
function &pkeyGet($kv)
|
||||||
{
|
{
|
||||||
return Memcached_DataObject::pkeyGet('Fave', $kv);
|
return Memcached_DataObject::pkeyGet('Fave', $kv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function stream($user_id, $offset=0, $limit=NOTICES_PER_PAGE)
|
||||||
|
{
|
||||||
|
$ids = Notice::stream(array('Fave', '_streamDirect'),
|
||||||
|
array($user_id),
|
||||||
|
'fave:ids_by_user:'.$user_id,
|
||||||
|
$offset, $limit);
|
||||||
|
return $ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _streamDirect($user_id, $offset, $limit, $since_id, $before_id, $since)
|
||||||
|
{
|
||||||
|
$fav = new Fave();
|
||||||
|
|
||||||
|
$fav->user_id = $user_id;
|
||||||
|
|
||||||
|
$fav->selectAdd();
|
||||||
|
$fav->selectAdd('notice_id');
|
||||||
|
|
||||||
|
if ($since_id != 0) {
|
||||||
|
$fav->whereAdd('notice_id > ' . $since_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($before_id != 0) {
|
||||||
|
$fav->whereAdd('notice_id < ' . $before_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_null($since)) {
|
||||||
|
$fav->whereAdd('modified > \'' . date('Y-m-d H:i:s', $since) . '\'');
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: we sort by fave time, not by notice time!
|
||||||
|
|
||||||
|
$fav->orderBy('modified DESC');
|
||||||
|
|
||||||
|
if (!is_null($offset)) {
|
||||||
|
$fav->limit($offset, $limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ids = array();
|
||||||
|
|
||||||
|
if ($fav->find()) {
|
||||||
|
while ($fav->fetch()) {
|
||||||
|
$ids[] = $fav->notice_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ids;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -412,9 +412,9 @@ class Notice extends Memcached_DataObject
|
|||||||
$fave->notice_id = $this->id;
|
$fave->notice_id = $this->id;
|
||||||
if ($fave->find()) {
|
if ($fave->find()) {
|
||||||
while ($fave->fetch()) {
|
while ($fave->fetch()) {
|
||||||
$cache->delete(common_cache_key('user:faves:'.$fave->user_id));
|
$cache->delete(common_cache_key('fave:ids_by_user:'.$fave->user_id));
|
||||||
if ($blowLast) {
|
if ($blowLast) {
|
||||||
$cache->delete(common_cache_key('user:faves:'.$fave->user_id.';last'));
|
$cache->delete(common_cache_key('fave:ids_by_user:'.$fave->user_id.';last'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -349,30 +349,31 @@ class User extends Memcached_DataObject
|
|||||||
$cache = common_memcache();
|
$cache = common_memcache();
|
||||||
|
|
||||||
// XXX: Kind of a hack.
|
// XXX: Kind of a hack.
|
||||||
|
|
||||||
if ($cache) {
|
if ($cache) {
|
||||||
// This is the stream of favorite notices, in rev chron
|
// This is the stream of favorite notices, in rev chron
|
||||||
// order. This forces it into cache.
|
// order. This forces it into cache.
|
||||||
$faves = $this->favoriteNotices(0, NOTICE_CACHE_WINDOW);
|
|
||||||
$cnt = 0;
|
$ids = Fave::stream($this->id, 0, NOTICE_CACHE_WINDOW);
|
||||||
while ($faves->fetch()) {
|
|
||||||
if ($faves->id < $notice->id) {
|
// If it's in the list, then it's a fave
|
||||||
// If we passed it, it's not a fave
|
|
||||||
return false;
|
if (in_array($notice->id, $ids)) {
|
||||||
} else if ($faves->id == $notice->id) {
|
return true;
|
||||||
// If it matches a cached notice, then it's a fave
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
$cnt++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we're not past the end of the cache window,
|
// If we're not past the end of the cache window,
|
||||||
// then the cache has all available faves, so this one
|
// then the cache has all available faves, so this one
|
||||||
// is not a fave.
|
// is not a fave.
|
||||||
if ($cnt < NOTICE_CACHE_WINDOW) {
|
|
||||||
|
if (count($ids) < NOTICE_CACHE_WINDOW) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, cache doesn't have all faves;
|
// Otherwise, cache doesn't have all faves;
|
||||||
// fall through to the default
|
// fall through to the default
|
||||||
}
|
}
|
||||||
|
|
||||||
$fave = Fave::pkeyGet(array('user_id' => $this->id,
|
$fave = Fave::pkeyGet(array('user_id' => $this->id,
|
||||||
'notice_id' => $notice->id));
|
'notice_id' => $notice->id));
|
||||||
return ((is_null($fave)) ? false : true);
|
return ((is_null($fave)) ? false : true);
|
||||||
@ -418,13 +419,8 @@ class User extends Memcached_DataObject
|
|||||||
|
|
||||||
function favoriteNotices($offset=0, $limit=NOTICES_PER_PAGE)
|
function favoriteNotices($offset=0, $limit=NOTICES_PER_PAGE)
|
||||||
{
|
{
|
||||||
$qry =
|
$ids = Fave::stream($this->id, $offset, $limit);
|
||||||
'SELECT notice.* ' .
|
return Notice::getStreamByIds($ids);
|
||||||
'FROM notice JOIN fave ON notice.id = fave.notice_id ' .
|
|
||||||
'WHERE fave.user_id = %d ';
|
|
||||||
return Notice::getStream(sprintf($qry, $this->id),
|
|
||||||
'user:faves:'.$this->id,
|
|
||||||
$offset, $limit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
|
function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0, $since=null)
|
||||||
@ -459,8 +455,8 @@ class User extends Memcached_DataObject
|
|||||||
if ($cache) {
|
if ($cache) {
|
||||||
// Faves don't happen chronologically, so we need to blow
|
// Faves don't happen chronologically, so we need to blow
|
||||||
// ;last cache, too
|
// ;last cache, too
|
||||||
$cache->delete(common_cache_key('user:faves:'.$this->id));
|
$cache->delete(common_cache_key('fave:ids_by_user:'.$this->id));
|
||||||
$cache->delete(common_cache_key('user:faves:'.$this->id).';last');
|
$cache->delete(common_cache_key('fave:ids_by_user:'.$this->id.';last'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user