OStatus: pull best-sized avatar image (96x96 if found, otherwise largest, otherwise if none labeled takes the first)
This commit is contained in:
parent
c8ddcbe0d3
commit
2feb09f434
@ -360,6 +360,25 @@ class ActivityUtils
|
||||
return null;
|
||||
}
|
||||
|
||||
static function getLinks(DOMNode $element, $rel, $type=null)
|
||||
{
|
||||
$links = $element->getElementsByTagnameNS(self::ATOM, self::LINK);
|
||||
$out = array();
|
||||
|
||||
foreach ($links as $link) {
|
||||
|
||||
$linkRel = $link->getAttribute(self::REL);
|
||||
$linkType = $link->getAttribute(self::TYPE);
|
||||
|
||||
if ($linkRel == $rel &&
|
||||
(is_null($type) || $linkType == $type)) {
|
||||
$out[] = $link;
|
||||
}
|
||||
}
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the first child element with the given tag
|
||||
*
|
||||
@ -472,6 +491,24 @@ class AvatarLink
|
||||
public $type;
|
||||
public $size;
|
||||
public $width;
|
||||
public $height;
|
||||
|
||||
function __construct($element=null)
|
||||
{
|
||||
if ($element) {
|
||||
// @fixme use correct namespaces
|
||||
$this->url = $element->getAttribute('href');
|
||||
$this->type = $element->getAttribute('type');
|
||||
$width = $element->getAttribute('media:width');
|
||||
if ($width != null) {
|
||||
$this->width = intval($width);
|
||||
}
|
||||
$height = $element->getAttribute('media:height');
|
||||
if ($height != null) {
|
||||
$this->height = intval($height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static function fromAvatar($avatar)
|
||||
{
|
||||
@ -640,8 +677,10 @@ class ActivityObject
|
||||
if ($this->type == self::PERSON || $this->type == self::GROUP) {
|
||||
$this->displayName = $this->title;
|
||||
|
||||
// @fixme we may have multiple avatars with different resolutions specified
|
||||
$this->avatar = ActivityUtils::getLink($element, 'avatar');
|
||||
$avatars = ActivityUtils::getLinks($element, 'avatar');
|
||||
foreach ($avatars as $link) {
|
||||
$this->avatarLinks[] = new AvatarLink($link);
|
||||
}
|
||||
|
||||
$this->poco = new PoCo($element);
|
||||
}
|
||||
|
@ -912,8 +912,20 @@ class Ostatus_profile extends Memcached_DataObject
|
||||
|
||||
protected static function getActivityObjectAvatar($object, $hints=array())
|
||||
{
|
||||
if ($object->avatar) {
|
||||
return $object->avatar;
|
||||
if ($object->avatarLinks) {
|
||||
$best = false;
|
||||
// Take the exact-size avatar, or the largest avatar, or the first avatar if all sizeless
|
||||
foreach ($object->avatarLinks as $avatar) {
|
||||
if ($avatar->width == AVATAR_PROFILE_SIZE && $avatar->height = AVATAR_PROFILE_SIZE) {
|
||||
// Exact match!
|
||||
$best = $avatar;
|
||||
break;
|
||||
}
|
||||
if (!$best || $avatar->width > $best->width) {
|
||||
$best = $avatar;
|
||||
}
|
||||
}
|
||||
return $best->url;
|
||||
} else if (array_key_exists('avatar', $hints)) {
|
||||
return $hints['avatar'];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user