Improved avatar handling (timestamps for caching)
This commit is contained in:
parent
97556aa69c
commit
9edc75e29d
3 changed files with 59 additions and 18 deletions
|
@ -1502,18 +1502,22 @@ class Contact
|
||||||
if (!empty($contact)) {
|
if (!empty($contact)) {
|
||||||
$contact = self::checkAvatarCacheByArray($contact, $no_update);
|
$contact = self::checkAvatarCacheByArray($contact, $no_update);
|
||||||
if (!empty($contact[$field])) {
|
if (!empty($contact[$field])) {
|
||||||
$avatar = $contact[$field];
|
return $contact[$field];
|
||||||
|
} elseif (!empty($contact['id'])) {
|
||||||
|
return self::getAvatarUrlForId($contact['id'], $size, $contact['updated'] ?? '');
|
||||||
|
} elseif (!empty($contact['avatar'])) {
|
||||||
|
$avatar = $contact['avatar'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($no_update && empty($avatar) && !empty($contact['avatar'])) {
|
if (empty($avatar)) {
|
||||||
$avatar = $contact['avatar'];
|
$avatar = self::getDefaultAvatar([], $size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($avatar) && Proxy::isLocalImage($avatar)) {
|
if (Proxy::isLocalImage($avatar)) {
|
||||||
return $avatar;
|
return $avatar;
|
||||||
} else {
|
} else {
|
||||||
return self::getAvatarUrlForId($contact['id'], $size);
|
return Proxy::proxifyUrl($avatar, false, $size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1661,12 +1665,20 @@ class Contact
|
||||||
/**
|
/**
|
||||||
* Get avatar link for given contact id
|
* Get avatar link for given contact id
|
||||||
*
|
*
|
||||||
* @param integer $cid contact id
|
* @param integer $cid contact id
|
||||||
* @param string $size One of the ProxyUtils::SIZE_* constants
|
* @param string $size One of the ProxyUtils::SIZE_* constants
|
||||||
|
* @param string $updated Contact update date
|
||||||
* @return string avatar link
|
* @return string avatar link
|
||||||
*/
|
*/
|
||||||
public static function getAvatarUrlForId(int $cid, string $size = ''):string
|
public static function getAvatarUrlForId(int $cid, string $size = '', string $updated = ''):string
|
||||||
{
|
{
|
||||||
|
// We have to fetch the "updated" variable when it wasn't provided
|
||||||
|
// The parameter can be provided to improve performance
|
||||||
|
if (empty($updated)) {
|
||||||
|
$contact = self::getById($cid, ['updated']);
|
||||||
|
$updated = $contact['updated'] ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
$url = DI::baseUrl() . '/photo/contact/';
|
$url = DI::baseUrl() . '/photo/contact/';
|
||||||
switch ($size) {
|
switch ($size) {
|
||||||
case Proxy::SIZE_MICRO:
|
case Proxy::SIZE_MICRO:
|
||||||
|
@ -1685,7 +1697,7 @@ class Contact
|
||||||
$url .= Proxy::PIXEL_LARGE . '/';
|
$url .= Proxy::PIXEL_LARGE . '/';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return $url . $cid;
|
return $url . $cid . ($updated ? '?ts=' . strtotime($updated) : '');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1700,19 +1712,47 @@ class Contact
|
||||||
{
|
{
|
||||||
$condition = ["`nurl` = ? AND ((`uid` = ? AND `network` IN (?, ?)) OR `uid` = ?)",
|
$condition = ["`nurl` = ? AND ((`uid` = ? AND `network` IN (?, ?)) OR `uid` = ?)",
|
||||||
Strings::normaliseLink($url), $uid, Protocol::FEED, Protocol::MAIL, 0];
|
Strings::normaliseLink($url), $uid, Protocol::FEED, Protocol::MAIL, 0];
|
||||||
$contact = self::selectFirst(['id'], $condition);
|
$contact = self::selectFirst(['id', 'updated'], $condition);
|
||||||
return self::getAvatarUrlForId($contact['id'] ?? 0, $size);
|
return self::getAvatarUrlForId($contact['id'] ?? 0, $size, $contact['updated']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get header link for given contact id
|
* Get header link for given contact id
|
||||||
*
|
*
|
||||||
* @param integer $cid contact id
|
* @param integer $cid contact id
|
||||||
|
* @param string $size One of the ProxyUtils::SIZE_* constants
|
||||||
|
* @param string $updated Contact update date
|
||||||
* @return string header link
|
* @return string header link
|
||||||
*/
|
*/
|
||||||
public static function getHeaderUrlForId(int $cid):string
|
public static function getHeaderUrlForId(int $cid, string $size = '', string $updated = ''):string
|
||||||
{
|
{
|
||||||
return DI::baseUrl() . '/photo/header/' . $cid;
|
// We have to fetch the "updated" variable when it wasn't provided
|
||||||
|
// The parameter can be provided to improve performance
|
||||||
|
if (empty($updated)) {
|
||||||
|
$contact = self::getById($cid, ['updated']);
|
||||||
|
$updated = $contact['updated'] ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$url = DI::baseUrl() . '/photo/header/';
|
||||||
|
switch ($size) {
|
||||||
|
case Proxy::SIZE_MICRO:
|
||||||
|
$url .= Proxy::PIXEL_MICRO . '/';
|
||||||
|
break;
|
||||||
|
case Proxy::SIZE_THUMB:
|
||||||
|
$url .= Proxy::PIXEL_THUMB . '/';
|
||||||
|
break;
|
||||||
|
case Proxy::SIZE_SMALL:
|
||||||
|
$url .= Proxy::PIXEL_SMALL . '/';
|
||||||
|
break;
|
||||||
|
case Proxy::SIZE_MEDIUM:
|
||||||
|
$url .= Proxy::PIXEL_MEDIUM . '/';
|
||||||
|
break;
|
||||||
|
case Proxy::SIZE_LARGE:
|
||||||
|
$url .= Proxy::PIXEL_LARGE . '/';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $url . $cid . ($updated ? '?ts=' . strtotime($updated) : '');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -507,9 +507,9 @@ class Profile
|
||||||
$p['address'] = BBCode::convert($p['address']);
|
$p['address'] = BBCode::convert($p['address']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$p['photo'] = Contact::getAvatarUrlForId($cid);
|
$p['photo'] = Contact::getAvatarUrlForId($cid, ProxyUtils::SIZE_SMALL);
|
||||||
|
|
||||||
$p['url'] = Contact::magicLink($profile_url);
|
$p['url'] = Contact::magicLinkById($cid);
|
||||||
|
|
||||||
$tpl = Renderer::getMarkupTemplate('profile/vcard.tpl');
|
$tpl = Renderer::getMarkupTemplate('profile/vcard.tpl');
|
||||||
$o .= Renderer::replaceMacros($tpl, [
|
$o .= Renderer::replaceMacros($tpl, [
|
||||||
|
|
|
@ -28,6 +28,7 @@ use Friendica\Content\Text\BBCode;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
use Friendica\Util\Proxy;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Account
|
* Class Account
|
||||||
|
@ -112,9 +113,9 @@ class Account extends BaseDataTransferObject
|
||||||
|
|
||||||
$this->note = BBCode::convert($publicContact['about'], false);
|
$this->note = BBCode::convert($publicContact['about'], false);
|
||||||
$this->url = $publicContact['url'];
|
$this->url = $publicContact['url'];
|
||||||
$this->avatar = $userContact['photo'] ?? '' ?: $publicContact['photo'] ?: Contact::getAvatarUrlForId($userContact['id'] ?? 0 ?: $publicContact['id']);
|
$this->avatar = Contact::getAvatarUrlForId($userContact['id'] ?? 0 ?: $publicContact['id'], Proxy::SIZE_SMALL, $userContact['updated'] ?? '' ?: $publicContact['updated']);
|
||||||
$this->avatar_static = $this->avatar;
|
$this->avatar_static = $this->avatar;
|
||||||
$this->header = Contact::getHeaderUrlForId($userContact['id'] ?? 0 ?: $publicContact['id']);
|
$this->header = Contact::getHeaderUrlForId($userContact['id'] ?? 0 ?: $publicContact['id'], '', $userContact['updated'] ?? '' ?: $publicContact['updated']);
|
||||||
$this->header_static = $this->header;
|
$this->header_static = $this->header;
|
||||||
$this->followers_count = $apcontact['followers_count'] ?? 0;
|
$this->followers_count = $apcontact['followers_count'] ?? 0;
|
||||||
$this->following_count = $apcontact['following_count'] ?? 0;
|
$this->following_count = $apcontact['following_count'] ?? 0;
|
||||||
|
|
Loading…
Reference in a new issue