SHARE activities would not be imported from federated instances for local notices

"[...] posts _local_ users (like you) make won't get data about "repeated by"
from federated users"

This was because the ActivityObject would processShare where the shared object
has a _local_ 'actor' URI. Ostatus_profile would complain this meant that a
"Local user cannot be referenced as remote.".

So we see if the shared activity object's id (URI) is in our Notice table, so
we don't have to processActivity - and can skip ensureActivityObjectProfile.
This commit is contained in:
Mikael Nordfeldth 2013-10-21 22:28:17 +02:00
parent 355c37bc3f
commit ba46c3d360
1 changed files with 15 additions and 9 deletions

View File

@ -466,6 +466,7 @@ class Ostatus_profile extends Managed_DataObject
return $this->processActivity($activity, $source);
}
// TODO: Make this throw an exception
public function processActivity($activity, $source)
{
$notice = null;
@ -529,18 +530,23 @@ class Ostatus_profile extends Managed_DataObject
throw new ClientException(_m('Can only handle shared activities.'));
}
$other = Ostatus_profile::ensureActivityObjectProfile($shared->actor);
// First check if we have the shared activity. This has to be done first, because
// we can't use these functions to "ensureActivityObjectProfile" of a local user,
// who might be the creator of the shared activity in question.
$sharedId = ($shared->id) ? $shared->id : $shared->objects[0]->id;
$sharedNotice = Notice::getKV('uri', $sharedId);
if (!($sharedNotice instanceof Notice)) {
// If no local notice is found, process it!
// TODO: Remember to check Deleted_notice!
$other = Ostatus_profile::ensureActivityObjectProfile($shared->actor);
$sharedNotice = $other->processActivity($shared, $method);
}
// Save the item (or check for a dupe)
$sharedNotice = $other->processActivity($shared, $method);
if (empty($sharedNotice)) {
$sharedId = ($shared->id) ? $shared->id : $shared->objects[0]->id;
if (!($sharedNotice instanceof Notice)) {
// And if we apparently can't get the shared notice, we'll abort the whole thing.
// TRANS: Client exception thrown when saving an activity share fails.
// TRANS: %s is a share ID.
throw new ClientException(sprintf(_m('Failed to save activity %s.'),
$sharedId));
throw new ClientException(sprintf(_m('Failed to save activity %s.'), $sharedId));
}
// The id URI will be used as a unique identifier for for the notice,