From 997319a41f3ed060e367cf6327c2e1c6f9a04fe9 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Sat, 26 Dec 2020 19:31:39 +0000
Subject: [PATCH] Use the raw data instead of an object

---
 src/Model/Photo.php  | 18 ++++++++++++++++--
 src/Module/Photo.php | 14 ++++++++------
 2 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/src/Model/Photo.php b/src/Model/Photo.php
index f9e1b32d18..e5b2ef87b9 100644
--- a/src/Model/Photo.php
+++ b/src/Model/Photo.php
@@ -178,7 +178,7 @@ class Photo
 
 
 	/**
-	 * Get Image object for given row id. null if row id does not exist
+	 * Get Image data for given row id. null if row id does not exist
 	 *
 	 * @param array $photo Photo data. Needs at least 'id', 'type', 'backend-class', 'backend-ref'
 	 *
@@ -186,7 +186,7 @@ class Photo
 	 * @throws \Friendica\Network\HTTPException\InternalServerErrorException
 	 * @throws \ImagickException
 	 */
-	public static function getImageForPhoto(array $photo)
+	public static function getImageDataForPhoto(array $photo)
 	{
 		$backendClass = DI::storageManager()->getByName($photo['backend-class'] ?? '');
 		if ($backendClass === null) {
@@ -200,7 +200,21 @@ class Photo
 			$backendRef = $photo['backend-ref'] ?? '';
 			$data = $backendClass->get($backendRef);
 		}
+		return $data;
+	}
 
+	/**
+	 * Get Image object for given row id. null if row id does not exist
+	 *
+	 * @param array $photo Photo data. Needs at least 'id', 'type', 'backend-class', 'backend-ref'
+	 *
+	 * @return \Friendica\Object\Image
+	 * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+	 * @throws \ImagickException
+	 */
+	public static function getImageForPhoto(array $photo)
+	{
+		$data = self::getImageDataForPhoto($photo);
 		if (empty($data)) {
 			return null;
 		}
diff --git a/src/Module/Photo.php b/src/Module/Photo.php
index 0b6874b798..ca27406067 100644
--- a/src/Module/Photo.php
+++ b/src/Module/Photo.php
@@ -102,17 +102,19 @@ class Photo extends BaseModule
 		$cacheable = ($photo["allow_cid"] . $photo["allow_gid"] . $photo["deny_cid"] . $photo["deny_gid"] === "") && (isset($photo["cacheable"]) ? $photo["cacheable"] : true);
 
 		$stamp = microtime(true);
-		$img = MPhoto::getImageForPhoto($photo);
+		$imgdata = MPhoto::getImageDataForPhoto($photo);
 		$data = microtime(true) - $stamp;
 
-		if (is_null($img) || !$img->isValid()) {
+		if (empty($imgdata)) {
 			Logger::warning("Invalid photo with id {$photo["id"]}.");
 			throw new \Friendica\Network\HTTPException\InternalServerErrorException(DI::l10n()->t('Invalid photo with id %s.', $photo["id"]));
 		}
 
 		// if customsize is set and image is not a gif, resize it
-		if ($img->getType() !== "image/gif" && $customsize > 0 && $customsize < 501) {
+		if ($photo['type'] !== "image/gif" && $customsize > 0 && $customsize < 501) {
+			$img = MPhoto::getImageForPhoto($photo);
 			$img->scaleToSquare($customsize);
+			$imgdata = $img->asString();
 		}
 
 		if (function_exists("header_remove")) {
@@ -120,7 +122,7 @@ class Photo extends BaseModule
 			header_remove("pragma");
 		}
 
-		header("Content-type: " . $img->getType());
+		header("Content-type: " . $photo['type']);
 
 		$stamp = microtime(true);
 		if (!$cacheable) {
@@ -129,7 +131,7 @@ class Photo extends BaseModule
 			// and subsequently have permission to see it
 			header("Cache-Control: no-store, no-cache, must-revalidate");
 		} else {
-			$md5 = $photo['hash'] ?: md5($img->asString());
+			$md5 = $photo['hash'] ?: md5($imgdata);
 			header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
 			header("Etag: \"{$md5}\"");
 			header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
@@ -138,7 +140,7 @@ class Photo extends BaseModule
 		$checksum = microtime(true) - $stamp;
 
 		$stamp = microtime(true);
-		echo $img->asString();
+		echo $imgdata;
 		$output = microtime(true) - $stamp;
 
 		$total = microtime(true) - $totalstamp;