Fixed fetching private local images

This commit is contained in:
Michael 2021-07-03 15:29:27 +00:00
parent a0772c91d0
commit c72abe48a8
3 changed files with 62 additions and 7 deletions

View file

@ -28,8 +28,10 @@ use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Model\Item;
use Friendica\Model\Photo;
use Friendica\Model\Post;
use Friendica\Util\Images;
use Friendica\Util\Network;
use Friendica\Util\ParseUrl;
use Friendica\Util\Proxy;
use Friendica\Util\Strings;
@ -158,6 +160,10 @@ class Media
*/
public static function fetchAdditionalData(array $media)
{
if (Network::isLocalLink($media['url'])) {
$media = self::fetchLocalData($media);
}
// Fetch the mimetype or size if missing.
if (empty($media['mimetype']) || empty($media['size'])) {
$timeout = DI::config()->get('system', 'xrd_timeout');
@ -216,6 +222,36 @@ class Media
return $media;
}
/**
* Fetch media data from local resources
* @param array $media
* @return array media with added data
*/
private static function fetchLocalData(array $media)
{
if (!preg_match('|.*?/photo/(.*[a-fA-F0-9])\-(.*[0-9])\..*[\w]|', $media['url'], $matches)) {
return $media;
}
$photo = Photo::selectFirst([], ['resource-id' => $matches[1], 'scale' => $matches[2]]);
if (!empty($photo)) {
$media['mimetype'] = $photo['type'];
$media['size'] = $photo['datasize'];
$media['width'] = $photo['width'];
$media['height'] = $photo['height'];
}
if (!preg_match('|.*?/photo/(.*[a-fA-F0-9])\-(.*[0-9])\..*[\w]|', $media['preview'], $matches)) {
return $media;
}
$photo = Photo::selectFirst([], ['resource-id' => $matches[1], 'scale' => $matches[2]]);
if (!empty($photo)) {
$media['preview-width'] = $photo['width'];
$media['preview-height'] = $photo['height'];
}
return $media;
}
/**
* Add the detected type to the media array
*