From 9d23c7e7e142c6cf1a1418e37e41d711064593c4 Mon Sep 17 00:00:00 2001 From: Yassine Doghri <yassine@doghri.fr> Date: Wed, 14 Apr 2021 13:37:11 +0000 Subject: [PATCH] fix(avatar): use default avatar when no avatar url has been set - get avatar and cover urls from entity: if no image exists, retrieve the default ones. - always set icon and image in actor object: set the default ones if podcast hasn't set them. fixes #111 --- app/Config/ActivityPub.php | 11 +++++ .../ActivityPub/Config/ActivityPub.php | 11 +++++ .../2018-01-01-010000_add_actors.php | 2 + app/Libraries/ActivityPub/Entities/Actor.php | 40 +++++++++++++++++- .../ActivityPub/Objects/ActorObject.php | 13 +++--- app/Models/PodcastModel.php | 7 +-- .../images/castopod-avatar-default.jpg | Bin 0 -> 9509 bytes app/Views/podcast/_partials/header.php | 8 +--- app/Views/podcast/follow.php | 4 -- 9 files changed, 71 insertions(+), 25 deletions(-) create mode 100644 app/Views/_assets/images/castopod-avatar-default.jpg diff --git a/app/Config/ActivityPub.php b/app/Config/ActivityPub.php index 7f2ea61c18..062603dbc1 100644 --- a/app/Config/ActivityPub.php +++ b/app/Config/ActivityPub.php @@ -11,4 +11,15 @@ class ActivityPub extends ActivityPubBase */ public $actorObject = 'App\Libraries\PodcastActor'; public $noteObject = 'App\Libraries\NoteObject'; + + /** + * -------------------------------------------------------------------- + * Default avatar and cover images + * -------------------------------------------------------------------- + */ + public $defaultAvatarImagePath = 'assets/images/castopod-avatar-default.jpg'; + public $defaultAvatarImageMimetype = 'image/jpeg'; + + public $defaultCoverImagePath = 'assets/images/castopod-cover-default.jpg'; + public $defaultCoverImageMimetype = 'image/jpeg'; } diff --git a/app/Libraries/ActivityPub/Config/ActivityPub.php b/app/Libraries/ActivityPub/Config/ActivityPub.php index 199817af0f..0feb9f162f 100644 --- a/app/Libraries/ActivityPub/Config/ActivityPub.php +++ b/app/Libraries/ActivityPub/Config/ActivityPub.php @@ -19,4 +19,15 @@ class ActivityPub extends BaseConfig */ public $actorObject = 'ActivityPub\Objects\ActorObject'; public $noteObject = 'ActivityPub\Objects\NoteObject'; + + /** + * -------------------------------------------------------------------- + * Default avatar and cover images + * -------------------------------------------------------------------- + */ + public $defaultAvatarImagePath = 'assets/images/avatar-default.jpg'; + public $defaultAvatarImageMimetype = 'image/jpeg'; + + public $defaultCoverImagePath = 'assets/images/cover-default.jpg'; + public $defaultCoverImageMimetype = 'image/jpeg'; } diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php index 9e6ab14cbe..9e2b2f5c98 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php @@ -54,12 +54,14 @@ class AddActors extends Migration 'avatar_image_url' => [ 'type' => 'VARCHAR', 'constraint' => 255, + 'null' => true, ], // constraint is 13 because the longest safe mimetype for images is image/svg+xml, // see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#image_types 'avatar_image_mimetype' => [ 'type' => 'VARCHAR', 'constraint' => 13, + 'null' => true, ], 'cover_image_url' => [ 'type' => 'VARCHAR', diff --git a/app/Libraries/ActivityPub/Entities/Actor.php b/app/Libraries/ActivityPub/Entities/Actor.php index 2d8d769dfa..acf73aa31e 100644 --- a/app/Libraries/ActivityPub/Entities/Actor.php +++ b/app/Libraries/ActivityPub/Entities/Actor.php @@ -36,8 +36,8 @@ class Actor extends Entity 'summary' => '?string', 'private_key' => '?string', 'public_key' => '?string', - 'avatar_image_url' => 'string', - 'avatar_image_mimetype' => 'string', + 'avatar_image_url' => '?string', + 'avatar_image_mimetype' => '?string', 'cover_image_url' => '?string', 'cover_image_mimetype' => '?string', 'inbox_url' => 'string', @@ -81,4 +81,40 @@ class Actor extends Entity return $this->followers; } + + public function getAvatarImageUrl() + { + if (empty($this->attributes['avatar_image_url'])) { + return base_url(config('ActivityPub')->defaultAvatarImagePath); + } + + return $this->attributes['avatar_image_url']; + } + + public function getAvatarImageMimetype() + { + if (empty($this->attributes['avatar_image_mimetype'])) { + return config('ActivityPub')->defaultAvatarImageMimetype; + } + + return $this->attributes['avatar_image_mimetype']; + } + + public function getCoverImageUrl() + { + if (empty($this->attributes['cover_image_url'])) { + return base_url(config('ActivityPub')->defaultCoverImagePath); + } + + return $this->attributes['cover_image_url']; + } + + public function getCoverImageMimetype() + { + if (empty($this->attributes['cover_image_mimetype'])) { + return config('ActivityPub')->defaultCoverImageMimetype; + } + + return $this->attributes['cover_image_mimetype']; + } } diff --git a/app/Libraries/ActivityPub/Objects/ActorObject.php b/app/Libraries/ActivityPub/Objects/ActorObject.php index 5d9f07ee85..4fa0b8062f 100644 --- a/app/Libraries/ActivityPub/Objects/ActorObject.php +++ b/app/Libraries/ActivityPub/Objects/ActorObject.php @@ -91,13 +91,12 @@ class ActorObject extends ObjectType $this->outbox = $actor->outbox_url; $this->followers = $actor->followers_url; - if ($actor->cover_image_url) { - $this->image = [ - 'type' => 'Image', - 'mediaType' => $actor->cover_image_mimetype, - 'url' => $actor->cover_image_url, - ]; - } + $this->image = [ + 'type' => 'Image', + 'mediaType' => $actor->cover_image_mimetype, + 'url' => $actor->cover_image_url, + ]; + $this->icon = [ 'type' => 'Image', 'mediaType' => $actor->avatar_image_mimetype, diff --git a/app/Models/PodcastModel.php b/app/Models/PodcastModel.php index 67b2ef8b67..e533bbb71e 100644 --- a/app/Models/PodcastModel.php +++ b/app/Models/PodcastModel.php @@ -297,12 +297,6 @@ class PodcastModel extends Model 'public_key' => $publickey, 'display_name' => $data['data']['title'], 'summary' => $data['data']['description_html'], - 'avatar_image_url' => '', - 'avatar_image_mimetype' => '', - 'cover_image_url' => base_url( - 'assets/images/castopod-cover-default.jpg', - ), - 'cover_image_mimetype' => 'image/jpeg', 'inbox_url' => url_to('inbox', $username), 'outbox_url' => url_to('outbox', $username), 'followers_url' => url_to('followers', $username), @@ -342,6 +336,7 @@ class PodcastModel extends Model $actor->display_name = $podcast->title; $actor->summary = $podcast->description_html; $actor->avatar_image_url = $podcast->image->thumbnail_url; + $actor->avatar_image_mimetype = $podcast->image_mimetype; if ($actor->hasChanged()) { $actorModel->update($actor->id, $actor); diff --git a/app/Views/_assets/images/castopod-avatar-default.jpg b/app/Views/_assets/images/castopod-avatar-default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..644126c569b388f9d2ec614f32a41feecd8a088a GIT binary patch literal 9509 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 literal 0 HcmV?d00001 diff --git a/app/Views/podcast/_partials/header.php b/app/Views/podcast/_partials/header.php index 1002dea9f9..48ce183d12 100644 --- a/app/Views/podcast/_partials/header.php +++ b/app/Views/podcast/_partials/header.php @@ -1,10 +1,6 @@ <header id="main-header" class="fixed top-0 left-0 flex-col flex-shrink-0 h-screen transform -translate-x-full sm:left-auto sm:-translate-x-0 sm:sticky w-80 sm:w-64 lg:w-80 xl:w-112 sm:flex"> - <?php if ($podcast->actor->cover_image_url): ?> - <img src="<?= $podcast->actor - ->cover_image_url ?>" alt="" class="object-cover w-full h-48 bg-pine-900"/> - <?php else: ?> - <div class="w-full h-48 bg-pine-900"></div> - <?php endif; ?> + <img src="<?= $podcast->actor + ->cover_image_url ?>" alt="" class="object-cover w-full h-48 bg-pine-900"/> <div class="flex items-center justify-between px-4 py-2 mb-4 lg:px-6 -mt-14 lg:-mt-16 xl:-mt-20"> <img src="<?= $podcast->image ->thumbnail_url ?>" alt="<?= $podcast->title ?>" class="h-24 rounded-full shadow-xl xl:h-36 lg:h-28 ring-4 ring-pine-50" /> diff --git a/app/Views/podcast/follow.php b/app/Views/podcast/follow.php index 063367661c..8a564a2eec 100644 --- a/app/Views/podcast/follow.php +++ b/app/Views/podcast/follow.php @@ -31,11 +31,7 @@ 'ActivityPub.follow.subtitle', ) ?></h1> <div class="flex flex-col w-full max-w-xs -mt-24 overflow-hidden bg-white shadow rounded-xl"> - <?php if ($actor->cover_image_url): ?> <img src="<?= $actor->cover_image_url ?>" alt="" class="object-cover w-full h-32 bg-pine-800" /> - <?php else: ?> - <div class="w-full h-32 bg-pine-800"></div> - <?php endif; ?> <div class="flex px-4 py-2"> <img src="<?= $actor->avatar_image_url ?>" alt="<?= $actor->display_name ?>" class="w-16 h-16 mr-4 -mt-8 rounded-full shadow-xl ring-2 ring-white" /> -- GitLab