diff options
author | Brion Vibber <brion@pobox.com> | 2010-02-25 02:43:55 +0000 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2010-02-25 02:56:56 +0000 |
commit | 58e232a10ad45808caeb1bbd72641aea535e00e8 (patch) | |
tree | 00f8ff613ddeb30a0c54a88f9970b1d1960b9357 /plugins/OStatus | |
parent | b798faf9ea67c5e02ee515fb8e344132f8edd6be (diff) |
OStatus: when finding webfinger @-replies, override a local profile match if found at the same location (eg @someguy vs @someguy@example.org)
Fixes inconsistent application of webfinger @-mentions in OStatus; once a local profile is set up the local name would often match first and ended up overriding in output.
Diffstat (limited to 'plugins/OStatus')
-rw-r--r-- | plugins/OStatus/OStatusPlugin.php | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 5feb53b26..7f75b7b2b 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -210,7 +210,7 @@ class OStatusPlugin extends Plugin * */ - function onStartFindMentions($sender, $text, &$mentions) + function onEndFindMentions($sender, $text, &$mentions) { preg_match_all('/(?:^|\s+)@((?:\w+\.)*\w+@(?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+)/', $text, @@ -233,11 +233,21 @@ class OStatusPlugin extends Plugin $this->log(LOG_INFO, "Ostatus_profile found for address '$webfinger'"); + if ($oprofile->isGroup()) { + continue; + } $profile = $oprofile->localProfile(); + $pos = $wmatch[1]; + foreach ($mentions as $i => $other) { + // If we share a common prefix with a local user, override it! + if ($other['position'] == $pos) { + unset($mentions[$i]); + } + } $mentions[] = array('mentioned' => array($profile), 'text' => $wmatch[0], - 'position' => $wmatch[1], + 'position' => $pos, 'url' => $profile->profileurl); } } |