TwitterBridge fix: merge down remaining 64-bit Snowflake ID fixes for twitterstatusfetcher.php from 0.9.x

Original fixes in c169dcb5221cf3dd452c291bf97374bb459cc5b9; didn't get merged in 39cad55711 because the code had been broken out to another file, but manual merge went smooth.

These affect twitterstatusfetcher.php on all 32-bit installs and some 64-bit installs (depending on whether the version of the JSON library reads the large numbers as long or double internally). 64-bit bug is harder to see as it tends to manifest as off-by-one due to losing a bit of precision off the end.
This commit is contained in:
Brion Vibber 2011-01-18 11:08:32 -08:00
parent 0ec07e9c65
commit ea31051401
1 changed files with 16 additions and 14 deletions

View File

@ -200,7 +200,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
if (preg_match("/$source/", mb_strtolower($status->source))) { if (preg_match("/$source/", mb_strtolower($status->source))) {
common_debug($this->name() . ' - Skipping import of status ' . common_debug($this->name() . ' - Skipping import of status ' .
$status->id . ' with source ' . $source); twitter_id($status) . ' with source ' . $source);
continue; continue;
} }
@ -238,23 +238,24 @@ class TwitterStatusFetcher extends ParallelizingDaemon
return null; return null;
} }
$statusUri = $this->makeStatusURI($status->user->screen_name, $status->id); $statusId = twitter_id($status);
$statusUri = $this->makeStatusURI($status->user->screen_name, $statusId);
// check to see if we've already imported the status // check to see if we've already imported the status
$n2s = Notice_to_status::staticGet('status_id', $status->id); $n2s = Notice_to_status::staticGet('status_id', $statusId);
if (!empty($n2s)) { if (!empty($n2s)) {
common_log( common_log(
LOG_INFO, LOG_INFO,
$this->name() . $this->name() .
" - Ignoring duplicate import: {$status->id}" " - Ignoring duplicate import: {$statusId}"
); );
return Notice::staticGet('id', $n2s->notice_id); return Notice::staticGet('id', $n2s->notice_id);
} }
// If it's a retweet, save it as a repeat! // If it's a retweet, save it as a repeat!
if (!empty($status->retweeted_status)) { if (!empty($status->retweeted_status)) {
common_log(LOG_INFO, "Status {$status->id} is a retweet of {$status->retweeted_status->id}."); common_log(LOG_INFO, "Status {$statusId} is a retweet of " . twitter_id($status->retweeted_status) . ".");
$original = $this->saveStatus($status->retweeted_status); $original = $this->saveStatus($status->retweeted_status);
if (empty($original)) { if (empty($original)) {
return null; return null;
@ -278,7 +279,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
'uri' => $statusUri, 'uri' => $statusUri,
'is_local' => Notice::GATEWAY)); 'is_local' => Notice::GATEWAY));
common_log(LOG_INFO, "Saved {$repeat->id} as a repeat of {$original->id}"); common_log(LOG_INFO, "Saved {$repeat->id} as a repeat of {$original->id}");
Notice_to_status::saveNew($repeat->id, $status->id); Notice_to_status::saveNew($repeat->id, $statusId);
return $repeat; return $repeat;
} }
} }
@ -297,17 +298,18 @@ class TwitterStatusFetcher extends ParallelizingDaemon
$notice->reply_to = null; $notice->reply_to = null;
if (!empty($status->in_reply_to_status_id)) { $replyTo = twitter_id($status, 'in_reply_to_status_id');
common_log(LOG_INFO, "Status {$status->id} is a reply to status {$status->in_reply_to_status_id}"); if (!empty($replyTo)) {
$n2s = Notice_to_status::staticGet('status_id', $status->in_reply_to_status_id); common_log(LOG_INFO, "Status {$statusId} is a reply to status {$replyTo}");
$n2s = Notice_to_status::staticGet('status_id', $replyTo);
if (empty($n2s)) { if (empty($n2s)) {
common_log(LOG_INFO, "Couldn't find local notice for status {$status->in_reply_to_status_id}"); common_log(LOG_INFO, "Couldn't find local notice for status {$replyTo}");
} else { } else {
$reply = Notice::staticGet('id', $n2s->notice_id); $reply = Notice::staticGet('id', $n2s->notice_id);
if (empty($reply)) { if (empty($reply)) {
common_log(LOG_INFO, "Couldn't find local notice for status {$status->in_reply_to_status_id}"); common_log(LOG_INFO, "Couldn't find local notice for status {$replyTo}");
} else { } else {
common_log(LOG_INFO, "Found local notice {$reply->id} for status {$status->in_reply_to_status_id}"); common_log(LOG_INFO, "Found local notice {$reply->id} for status {$replyTo}");
$notice->reply_to = $reply->id; $notice->reply_to = $reply->id;
$notice->conversation = $reply->conversation; $notice->conversation = $reply->conversation;
} }
@ -317,7 +319,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
if (empty($notice->conversation)) { if (empty($notice->conversation)) {
$conv = Conversation::create(); $conv = Conversation::create();
$notice->conversation = $conv->id; $notice->conversation = $conv->id;
common_log(LOG_INFO, "No known conversation for status {$status->id} so making a new one {$conv->id}."); common_log(LOG_INFO, "No known conversation for status {$statusId} so making a new one {$conv->id}.");
} }
$notice->is_local = Notice::GATEWAY; $notice->is_local = Notice::GATEWAY;
@ -338,7 +340,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
Event::handle('EndNoticeSave', array($notice)); Event::handle('EndNoticeSave', array($notice));
} }
Notice_to_status::saveNew($notice->id, $status->id); Notice_to_status::saveNew($notice->id, $statusId);
$this->saveStatusMentions($notice, $status); $this->saveStatusMentions($notice, $status);