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