summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2023-04-06 12:39:25 -0100
committerMaxence Lange <maxence@artificial-owl.com>2023-04-06 12:39:42 -0100
commit050983a2a617bafe4a2e885d28016fedd4fd41bf (patch)
tree9fa78ab1fd9fa4f3145418fac937cfe8a8a1062d /lib
parentf4f7e5d305c88224e0e8432b7546b831a1b97d01 (diff)
fix avatar url
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/Db/CacheActorsRequestBuilder.php6
-rw-r--r--lib/Db/SocialCrossQueryBuilder.php1
-rw-r--r--lib/Model/ActivityPub/Actor/Person.php19
-rw-r--r--lib/Model/ActivityPub/Object/Document.php40
4 files changed, 45 insertions, 21 deletions
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()))