From 050983a2a617bafe4a2e885d28016fedd4fd41bf Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Thu, 6 Apr 2023 12:39:25 -0100 Subject: fix avatar url Signed-off-by: Maxence Lange --- lib/Db/CacheActorsRequestBuilder.php | 6 ++--- lib/Db/SocialCrossQueryBuilder.php | 1 + lib/Model/ActivityPub/Actor/Person.php | 19 +++++++++++---- lib/Model/ActivityPub/Object/Document.php | 40 ++++++++++++++++++++----------- 4 files changed, 45 insertions(+), 21 deletions(-) (limited to 'lib') diff --git a/lib/Db/CacheActorsRequestBuilder.php b/lib/Db/CacheActorsRequestBuilder.php index d174d747..f099f264 100644 --- a/lib/Db/CacheActorsRequestBuilder.php +++ b/lib/Db/CacheActorsRequestBuilder.php @@ -146,17 +146,17 @@ class CacheActorsRequestBuilder extends CoreRequestBuilder { */ public function parseCacheActorsSelectSql(array $data, SocialQueryBuilder $qb): Person { $actor = new Person(); - $actor->importFromDatabase($data); $actor->setExportFormat($qb->getFormat()); - $this->assignViewerLink($qb, $actor); - try { $icon = $qb->parseLeftJoinCacheDocuments($data); $actor->setIcon($icon); } catch (InvalidResourceException $e) { } + $actor->importFromDatabase($data); + + $this->assignViewerLink($qb, $actor); $this->assignDetails($actor, $data); return $actor; diff --git a/lib/Db/SocialCrossQueryBuilder.php b/lib/Db/SocialCrossQueryBuilder.php index 8183cd9f..41e33fb9 100644 --- a/lib/Db/SocialCrossQueryBuilder.php +++ b/lib/Db/SocialCrossQueryBuilder.php @@ -225,6 +225,7 @@ class SocialCrossQueryBuilder extends SocialCoreQueryBuilder { ->selectAlias($alias . '.media_type', $prefix . 'media_type') ->selectAlias($alias . '.url', $prefix . 'url') ->selectAlias($alias . '.local_copy', $prefix . 'local_copy') + ->selectAlias($alias . '.resized_copy', $prefix . 'resized_copy') ->selectAlias($alias . '.caching', $prefix . 'caching') ->selectAlias($alias . '.public', $prefix . 'public') ->selectAlias($alias . '.error', $prefix . 'error') diff --git a/lib/Model/ActivityPub/Actor/Person.php b/lib/Model/ActivityPub/Actor/Person.php index cef807ea..4ff2c9bd 100644 --- a/lib/Model/ActivityPub/Actor/Person.php +++ b/lib/Model/ActivityPub/Actor/Person.php @@ -43,6 +43,8 @@ use OCA\Social\Model\ActivityPub\ACore; use OCA\Social\Model\ActivityPub\Object\Image; use OCA\Social\Tools\IQueryRow; use OCA\Social\Traits\TDetails; +use OCP\IURLGenerator; +use OCP\Server; /** * Class Actor @@ -184,6 +186,11 @@ class Person extends ACore implements IQueryRow, JsonSerializable { * @return string */ public function getAvatar(): string { + if ($this->hasIcon()) { + return $this->getIcon() + ->getUrl(); + } + return $this->avatar; } @@ -769,6 +776,10 @@ class Person extends ACore implements IQueryRow, JsonSerializable { * @return array */ public function exportAsLocal(): array { + if ($this->hasIcon()) { + $avatar = $this->getIcon()->getMediaUrl(Server::get(IURLGenerator::class)); + } + $details = $this->getDetailsAll(); $result = [ @@ -783,10 +794,10 @@ class Person extends ACore implements IQueryRow, JsonSerializable { 'created_at' => date('Y-m-d\TH:i:s', $this->getCreation()) . '.000Z', 'note' => $this->getDescription(), 'url' => $this->getId(), - 'avatar' => $this->getAvatar(), - 'avatar_static' => $this->getAvatar(), - 'header' => $this->getHeader(), - 'header_static' => $this->getHeader(), + 'avatar' => $avatar ?? $this->getAvatar(), + 'avatar_static' => $avatar ?? $this->getAvatar(), + 'header' => $avatar ?? $this->getHeader(), + 'header_static' => $avatar ?? $this->getHeader(), 'followers_count' => $this->getInt('count.followers', $details), 'following_count' => $this->getInt('count.following', $details), 'statuses_count' => $this->getInt('count.post', $details), diff --git a/lib/Model/ActivityPub/Object/Document.php b/lib/Model/ActivityPub/Object/Document.php index 943bf9c8..2d0be451 100644 --- a/lib/Model/ActivityPub/Object/Document.php +++ b/lib/Model/ActivityPub/Object/Document.php @@ -366,7 +366,29 @@ class Document extends ACore implements JsonSerializable { return $result; } + + public function getMediaUrl(IURLGenerator $urlGenerator, string $mime = ''): string { + $mime = ($mime === '') ? '' : '.' . $mime; + + return $urlGenerator->linkToRouteAbsolute( + 'social.Api.mediaOpen', + ['uuid' => $this->getLocalCopy() . $mime] + ); + } + + public function getResizedMediaUrl(IURLGenerator $urlGenerator, string $mime = ''): string { + $mime = ($mime === '') ? '' : '.' . $mime; + + return $urlGenerator->linkToRouteAbsolute( + 'social.Api.mediaOpen', + ['uuid' => $this->getResizedCopy() . $mime] + ); + } + + /** + * @param IURLGenerator|null $urlGenerator + * * @return MediaAttachment */ public function convertToMediaAttachment( @@ -381,25 +403,15 @@ class Document extends ACore implements JsonSerializable { if (strpos($this->getMediaType(), '/')) { [$type, $mime] = explode('/', $this->getMediaType(), 2); $media->setType($type); - $mime = (strlen($mime) < 7) ? '.' . $mime : ''; // mime is ignored if too long. } if (!is_null($urlGenerator)) { - $media->setUrl( - $urlGenerator->linkToRouteAbsolute( - 'social.Api.mediaOpen', - ['uuid' => $this->getLocalCopy() . $mime] - ) - ); - $media->setPreviewUrl( - $urlGenerator->linkToRouteAbsolute( - 'social.Api.mediaOpen', - ['uuid' => $this->getResizedCopy() . $mime] - ) - ); - $media->setRemoteUrl($this->getUrl()); + $media->setUrl($this->getMediaUrl($urlGenerator, $mime)); + $media->setPreviewUrl($this->getResizedMediaUrl($urlGenerator, $mime)); } + $media->setRemoteUrl($this->getUrl()); + if ($this->getMeta() === null) { $meta = new AttachmentMeta(); $meta->setOriginal(new AttachmentMetaDim($this->getLocalCopySize())) -- cgit v1.2.3