diff --git a/src/Content/Post/Entity/PostMedia.php b/src/Content/Post/Entity/PostMedia.php index f7e1f39d92..993b843bf0 100644 --- a/src/Content/Post/Entity/PostMedia.php +++ b/src/Content/Post/Entity/PostMedia.php @@ -177,15 +177,20 @@ class PostMedia extends BaseEntity /** * Get preview path for given media id relative to the base URL * - * @param string $size One of the Proxy::SIZE_* constants + * @param string $size One of the Proxy::SIZE_* constants + * @param bool $vlurred If "true", the preview will be blurred * @return string preview link */ - public function getPreviewPath(string $size = ''): string + public function getPreviewPath(string $size = '', bool $blurred = false): string { - return '/photo/preview/' . + $path = '/photo/preview/' . (Proxy::getPixelsFromSize($size) ? Proxy::getPixelsFromSize($size) . '/' : '') . $this->id; + if ($blurred) { + $path .= '?' . http_build_query(['blur' => true]); + } + return $path; } /** diff --git a/src/Model/Item.php b/src/Model/Item.php index 9d2bdd16b9..fe3aeb7fd3 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -3345,6 +3345,7 @@ class Item $item['tags'] = $tags['tags']; $item['hashtags'] = $tags['hashtags']; $item['mentions'] = $tags['mentions']; + $sensitive = (bool)$item['sensitive']; if (!$is_preview) { $item['body'] = preg_replace("#\s*\[attachment .*?].*?\[/attachment]\s*#ism", "\n", $item['body']); @@ -3412,11 +3413,11 @@ class Item $shared_links = array_merge($shared_links, $sharedSplitAttachments['visual']->column('url')); $shared_links = array_merge($shared_links, $sharedSplitAttachments['link']->column('url')); $shared_links = array_merge($shared_links, $sharedSplitAttachments['additional']->column('url')); - $item['body'] = self::replaceVisualAttachments($sharedSplitAttachments['visual'], $item['body']); + $item['body'] = self::replaceVisualAttachments($sharedSplitAttachments['visual'], $item['body'], $sensitive); } $itemSplitAttachments = DI::postMediaRepository()->splitAttachments($item['uri-id'], $shared_links, $item['has-media'] ?? false); - $item['body'] = self::replaceVisualAttachments($itemSplitAttachments['visual'], $item['body'] ?? ''); + $item['body'] = self::replaceVisualAttachments($itemSplitAttachments['visual'], $item['body'] ?? '', $sensitive); self::putInCache($item); $item['body'] = $body; @@ -3471,9 +3472,9 @@ class Item } if (!empty($sharedSplitAttachments)) { - $s = self::addGallery($s, $sharedSplitAttachments['visual'], (bool)$item['sensitive']); - $s = self::addVisualAttachments($sharedSplitAttachments['visual'], $shared_item, $s, true); - $s = self::addLinkAttachment($shared_uri_id ?: $item['uri-id'], $sharedSplitAttachments, $body, $s, true, $quote_shared_links); + $s = self::addGallery($s, $sharedSplitAttachments['visual'], $sensitive); + $s = self::addVisualAttachments($sharedSplitAttachments['visual'], $shared_item, $s, true, $sensitive); + $s = self::addLinkAttachment($shared_uri_id ?: $item['uri-id'], $sharedSplitAttachments, $body, $s, true, $quote_shared_links, $sensitive); $s = self::addNonVisualAttachments($sharedSplitAttachments['additional'], $item, $s, true); $body = BBCode::removeSharedData($body); } @@ -3484,9 +3485,9 @@ class Item $s = substr($s, 0, $pos); } - $s = self::addGallery($s, $itemSplitAttachments['visual'], (bool)$item['sensitive']); - $s = self::addVisualAttachments($itemSplitAttachments['visual'], $item, $s, false); - $s = self::addLinkAttachment($item['uri-id'], $itemSplitAttachments, $body, $s, false, $shared_links); + $s = self::addGallery($s, $itemSplitAttachments['visual'], $sensitive); + $s = self::addVisualAttachments($itemSplitAttachments['visual'], $item, $s, false, $sensitive); + $s = self::addLinkAttachment($item['uri-id'], $itemSplitAttachments, $body, $s, false, $shared_links, $sensitive); $s = self::addNonVisualAttachments($itemSplitAttachments['additional'], $item, $s, false); $s = self::addQuestions($item, $s); @@ -3605,9 +3606,10 @@ class Item * * @param PostMedias $PostMedias * @param string $body + * @param bool $sensitive * @return string modified body */ - private static function replaceVisualAttachments(PostMedias $PostMedias, string $body): string + private static function replaceVisualAttachments(PostMedias $PostMedias, string $body, bool $sensitive): string { DI::profiler()->startRecording('rendering'); @@ -3616,7 +3618,7 @@ class Item if (DI::baseUrl()->isLocalUri($PostMedia->preview)) { continue; } - $proxy = DI::baseUrl() . $PostMedia->getPreviewPath(Proxy::SIZE_LARGE); + $proxy = DI::baseUrl() . $PostMedia->getPreviewPath(Proxy::SIZE_LARGE, $sensitive); $search = ['[img=' . $PostMedia->preview . ']', ']' . $PostMedia->preview . '[/img]']; $replace = ['[img=' . $proxy . ']', ']' . $proxy . '[/img]']; @@ -3625,7 +3627,7 @@ class Item if (DI::baseUrl()->isLocalUri($PostMedia->url)) { continue; } - $proxy = DI::baseUrl() . $PostMedia->getPreviewPath(Proxy::SIZE_LARGE); + $proxy = DI::baseUrl() . $PostMedia->getPreviewPath(Proxy::SIZE_LARGE, $sensitive); $search = ['[img=' . $PostMedia->url . ']', ']' . $PostMedia->url . '[/img]']; $replace = ['[img=' . $proxy . ']', ']' . $proxy . '[/img]']; @@ -3643,10 +3645,11 @@ class Item * @param array $item * @param string $content * @param bool $shared + * @param bool $sensitive * @return string modified content * @throws ServiceUnavailableException */ - private static function addVisualAttachments(PostMedias $PostMedias, array $item, string $content, bool $shared): string + private static function addVisualAttachments(PostMedias $PostMedias, array $item, string $content, bool $shared, bool $sensitive): string { DI::profiler()->startRecording('rendering'); $leading = ''; @@ -3661,7 +3664,7 @@ class Item if ($PostMedia->mimetype->type == 'image' || $PostMedia->preview) { $preview_size = Proxy::SIZE_MEDIUM; - $preview_url = DI::baseUrl() . $PostMedia->getPreviewPath($preview_size); + $preview_url = DI::baseUrl() . $PostMedia->getPreviewPath($preview_size, $sensitive); } else { $preview_size = 0; $preview_url = ''; @@ -3746,11 +3749,12 @@ class Item * @param string $content * @param bool $shared * @param array $ignore_links A list of URLs to ignore + * @param bool $sensitive * @return string modified content * @throws InternalServerErrorException * @throws ServiceUnavailableException */ - private static function addLinkAttachment(int $uriid, array $attachments, string $body, string $content, bool $shared, array $ignore_links): string + private static function addLinkAttachment(int $uriid, array $attachments, string $body, string $content, bool $shared, array $ignore_links, bool $sensitive): string { DI::profiler()->startRecording('rendering'); // Don't show a preview when there is a visual attachment (audio or video) @@ -3793,9 +3797,9 @@ class Item if ($preview && $attachment->preview) { if ($attachment->previewWidth >= 500) { - $data['image'] = DI::baseUrl() . $attachment->getPreviewPath(Proxy::SIZE_MEDIUM); + $data['image'] = DI::baseUrl() . $attachment->getPreviewPath(Proxy::SIZE_MEDIUM, $sensitive); } else { - $data['preview'] = DI::baseUrl() . $attachment->getPreviewPath(Proxy::SIZE_MEDIUM); + $data['preview'] = DI::baseUrl() . $attachment->getPreviewPath(Proxy::SIZE_MEDIUM, $sensitive); } } diff --git a/src/Module/Photo.php b/src/Module/Photo.php index 133c91d8d9..1ab228b7c3 100644 --- a/src/Module/Photo.php +++ b/src/Module/Photo.php @@ -166,7 +166,9 @@ class Photo extends BaseApi $stamp = microtime(true); - $imgdata = MPhoto::getImageDataForPhoto($photo); + if (empty($request['blur']) || empty($photo['blurhash'])) { + $imgdata = MPhoto::getImageDataForPhoto($photo); + } if (empty($imgdata) && empty($photo['blurhash'])) { throw new HTTPException\NotFoundException(); } elseif (empty($imgdata) && !empty($photo['blurhash'])) {