forked from GNUsocial/gnu-social
Add support for since_id and before_id to Twitter API. Ticket #540.
darcs-hash:20081001001233-e558a-3fcc269985050021ec9b44c052206c731cc4689d.gz
This commit is contained in:
parent
1c4f7722da
commit
c08a67094c
@ -57,7 +57,22 @@ class TwitapistatusesAction extends TwitterapiAction {
|
||||
// FIXME: To really live up to the spec we need to build a list
|
||||
// of notices by users who have custom avatars, so fix this SQL -- Zach
|
||||
|
||||
$notice = Notice::publicStream(0, $MAX_PUBSTATUSES);
|
||||
$page = $this->arg('page');
|
||||
$since_id = $this->arg('since_id');
|
||||
$before_id = $this->arg('before_id');
|
||||
|
||||
// NOTE: page, since_id, and before_id are extensions to Twitter API -- TB
|
||||
if (!$page) {
|
||||
$page = 1;
|
||||
}
|
||||
if (!$since_id) {
|
||||
$since_id = 0;
|
||||
}
|
||||
if (!$before_id) {
|
||||
$before_id = 0;
|
||||
}
|
||||
|
||||
$notice = Notice::publicStream((($page-1)*$MAX_PUBSTATUSES), $MAX_PUBSTATUSES, $since_id, $before_id);
|
||||
|
||||
if ($notice) {
|
||||
|
||||
@ -113,6 +128,7 @@ class TwitapistatusesAction extends TwitterapiAction {
|
||||
$since_id = $this->arg('since_id');
|
||||
$count = $this->arg('count');
|
||||
$page = $this->arg('page');
|
||||
$before_id = $this->arg('before_id');
|
||||
|
||||
if (!$page) {
|
||||
$page = 1;
|
||||
@ -122,6 +138,15 @@ class TwitapistatusesAction extends TwitterapiAction {
|
||||
$count = 20;
|
||||
}
|
||||
|
||||
if (!$since_id) {
|
||||
$since_id = 0;
|
||||
}
|
||||
|
||||
// NOTE: before_id is an extensions to Twitter API -- TB
|
||||
if (!$before_id) {
|
||||
$before_id = 0;
|
||||
}
|
||||
|
||||
$user = $this->get_user($id, $apidata);
|
||||
$profile = $user->getProfile();
|
||||
|
||||
@ -133,7 +158,7 @@ class TwitapistatusesAction extends TwitterapiAction {
|
||||
$link = common_local_url('all', array('nickname' => $user->nickname));
|
||||
$subtitle = sprintf(_('Updates from %1$s and friends on %2$s!'), $user->nickname, $sitename);
|
||||
|
||||
$notice = $user->noticesWithFriends(($page-1)*20, $count);
|
||||
$notice = $user->noticesWithFriends(($page-1)*20, $count, $since_id, $before_id);
|
||||
|
||||
switch($apidata['content-type']) {
|
||||
case 'xml':
|
||||
@ -217,6 +242,7 @@ class TwitapistatusesAction extends TwitterapiAction {
|
||||
$since = $this->arg('since');
|
||||
$since_id = $this->arg('since_id');
|
||||
$page = $this->arg('page');
|
||||
$before_id = $this->arg('before_id');
|
||||
|
||||
if (!$page) {
|
||||
$page = 1;
|
||||
@ -226,6 +252,15 @@ class TwitapistatusesAction extends TwitterapiAction {
|
||||
$count = 20;
|
||||
}
|
||||
|
||||
if (!$since_id) {
|
||||
$since_id = 0;
|
||||
}
|
||||
|
||||
// NOTE: before_id is an extensions to Twitter API -- TB
|
||||
if (!$before_id) {
|
||||
$before_id = 0;
|
||||
}
|
||||
|
||||
$sitename = common_config('site', 'name');
|
||||
$siteserver = common_config('site', 'server');
|
||||
|
||||
@ -235,9 +270,8 @@ class TwitapistatusesAction extends TwitterapiAction {
|
||||
$subtitle = sprintf(_('Updates from %1$s on %2$s!'), $user->nickname, $sitename);
|
||||
|
||||
# XXX: since
|
||||
# XXX: since_id
|
||||
|
||||
$notice = $user->getNotices((($page-1)*20), $count);
|
||||
$notice = $user->getNotices((($page-1)*20), $count, $since_id, $before_id);
|
||||
|
||||
switch($apidata['content-type']) {
|
||||
case 'xml':
|
||||
@ -354,6 +388,8 @@ class TwitapistatusesAction extends TwitterapiAction {
|
||||
|
||||
$count = $this->arg('count');
|
||||
$page = $this->arg('page');
|
||||
$since_id = $this->arg('since_id');
|
||||
$before_id = $this->arg('before_id');
|
||||
|
||||
$user = $apidata['user'];
|
||||
$profile = $user->getProfile();
|
||||
@ -374,7 +410,15 @@ class TwitapistatusesAction extends TwitterapiAction {
|
||||
$count = 20;
|
||||
}
|
||||
|
||||
$notice = $user->getReplies((($page-1)*20), $count);
|
||||
if (!$since_id) {
|
||||
$since_id = 0;
|
||||
}
|
||||
|
||||
// NOTE: before_id is an extensions to Twitter API -- TB
|
||||
if (!$before_id) {
|
||||
$before_id = 0;
|
||||
}
|
||||
$notice = $user->getReplies((($page-1)*20), $count, $since_id, $before_id);
|
||||
$notices = array();
|
||||
|
||||
while ($notice->fetch()) {
|
||||
|
@ -308,12 +308,38 @@ class Notice extends Memcached_DataObject
|
||||
return $wrapper;
|
||||
}
|
||||
|
||||
function publicStream($offset=0, $limit=20) {
|
||||
function publicStream($offset=0, $limit=20, $since_id=0, $before_id=0) {
|
||||
|
||||
$needAnd = FALSE;
|
||||
$needWhere = TRUE;
|
||||
|
||||
$qry = 'SELECT * FROM notice ';
|
||||
|
||||
if (common_config('public', 'localonly')) {
|
||||
$qry .= ' WHERE is_local = 1 ';
|
||||
$needWhere = FALSE;
|
||||
$needAnd = TRUE;
|
||||
}
|
||||
|
||||
// NOTE: since_id and before_id are extensions to Twitter API
|
||||
if ($since_id > 0) {
|
||||
if ($needWhere)
|
||||
$qry .= ' WHERE ';
|
||||
if ($needAnd)
|
||||
$qry .= ' AND ';
|
||||
$qry .= ' notice.id > ' . $since_id . ' ';
|
||||
$needAnd = FALSE;
|
||||
$needWhere = FALSE;
|
||||
}
|
||||
|
||||
if ($before_id > 0) {
|
||||
if ($needWhere)
|
||||
$qry .= ' WHERE ';
|
||||
if ($needAnd)
|
||||
$qry .= ' AND ';
|
||||
$qry .= ' notice.id < ' . $before_id . ' ';
|
||||
$needAnd = FALSE;
|
||||
$needWhere = FALSE;
|
||||
}
|
||||
|
||||
return Notice::getStream($qry,
|
||||
|
@ -141,6 +141,19 @@ class User extends Memcached_DataObject
|
||||
return true;
|
||||
}
|
||||
|
||||
function noticesWithFriendsWindow() {
|
||||
|
||||
|
||||
$notice = new Notice();
|
||||
|
||||
$notice->query('SELECT notice.* ' .
|
||||
'FROM notice JOIN subscription on notice.profile_id = subscription.subscribed ' .
|
||||
'WHERE subscription.subscriber = ' . $this->id . ' ' .
|
||||
'ORDER BY created DESC, notice.id DESC ' .
|
||||
'LIMIT 0, ' . WITHFRIENDS_CACHE_WINDOW);
|
||||
|
||||
}
|
||||
|
||||
static function register($fields) {
|
||||
|
||||
# MAGICALLY put fields into current scope
|
||||
@ -291,23 +304,45 @@ class User extends Memcached_DataObject
|
||||
return $user;
|
||||
}
|
||||
|
||||
function getReplies($offset=0, $limit=NOTICES_PER_PAGE) {
|
||||
function getReplies($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) {
|
||||
$qry =
|
||||
'SELECT notice.* ' .
|
||||
'FROM notice JOIN reply ON notice.id = reply.notice_id ' .
|
||||
'WHERE reply.profile_id = %d ';
|
||||
|
||||
if ($since_id > 0) {
|
||||
$qry .= ' AND notice.id > ' . $since_id . ' ';
|
||||
$needAnd = FALSE;
|
||||
}
|
||||
|
||||
// NOTE: before_id is an extension to Twitter API
|
||||
if ($before_id > 0) {
|
||||
$qry .= ' AND notice.id < ' . $before_id . ' ';
|
||||
$needAnd = FALSE;
|
||||
}
|
||||
|
||||
return Notice::getStream(sprintf($qry, $this->id),
|
||||
'user:replies:'.$this->id,
|
||||
$offset, $limit);
|
||||
}
|
||||
|
||||
function getNotices($offset=0, $limit=NOTICES_PER_PAGE) {
|
||||
function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) {
|
||||
$qry =
|
||||
'SELECT * ' .
|
||||
'FROM notice ' .
|
||||
'WHERE profile_id = %d ';
|
||||
|
||||
if ($since_id > 0) {
|
||||
$qry .= ' AND notice.id > ' . $since_id . ' ';
|
||||
$needAnd = FALSE;
|
||||
}
|
||||
|
||||
// NOTE: before_id is an extension to Twitter API
|
||||
if ($before_id > 0) {
|
||||
$qry .= ' AND notice.id < ' . $before_id . ' ';
|
||||
$needAnd = FALSE;
|
||||
}
|
||||
|
||||
return Notice::getStream(sprintf($qry, $this->id),
|
||||
'user:notices:'.$this->id,
|
||||
$offset, $limit);
|
||||
@ -324,12 +359,23 @@ class User extends Memcached_DataObject
|
||||
$offset, $limit);
|
||||
}
|
||||
|
||||
function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE) {
|
||||
function noticesWithFriends($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) {
|
||||
$qry =
|
||||
'SELECT notice.* ' .
|
||||
'FROM notice JOIN subscription ON notice.profile_id = subscription.subscribed ' .
|
||||
'WHERE subscription.subscriber = %d ';
|
||||
|
||||
if ($since_id > 0) {
|
||||
$qry .= ' AND notice.id > ' . $since_id . ' ';
|
||||
$needAnd = FALSE;
|
||||
}
|
||||
|
||||
// NOTE: before_id is an extension to Twitter API
|
||||
if ($before_id > 0) {
|
||||
$qry .= ' AND notice.id < ' . $before_id . ' ';
|
||||
$needAnd = FALSE;
|
||||
}
|
||||
|
||||
return Notice::getStream(sprintf($qry, $this->id),
|
||||
'user:notices_with_friends:' . $this->id,
|
||||
$offset, $limit);
|
||||
|
Loading…
Reference in New Issue
Block a user