}
/**
- * Returns the GUID from picture links
+ * Fetch the guid and scale from picture links
*
* @param string $name Picture link
- * @return string GUID
- * @throws \Exception
+ * @return array
*/
- public static function getGUID($name)
+ public static function getResourceData(string $name):array
{
$base = DI::baseUrl()->get();
$guid = str_replace([Strings::normaliseLink($base), '/photo/'], '', Strings::normaliseLink($name));
+ if (parse_url($guid, PHP_URL_SCHEME)) {
+ return [];
+ }
+
$guid = self::stripExtension($guid);
if (substr($guid, -2, 1) != "-") {
- return '';
+ return [];
}
$scale = intval(substr($guid, -1, 1));
if (!is_numeric($scale)) {
- return '';
+ return [];
}
$guid = substr($guid, 0, -2);
- return $guid;
+ return ['guid' => $guid, 'scale' => $scale];
}
/**
*/
public static function isLocal($name)
{
- $guid = self::getGUID($name);
-
- if (empty($guid)) {
+ $data = self::getResourceData($name);
+ if (empty($data)) {
return false;
}
- return DBA::exists('photo', ['resource-id' => $guid]);
+ return DBA::exists('photo', ['resource-id' => $data['guid'], 'scale' => $data['scale']]);
}
/**
{
$stamp1 = microtime(true);
+ if (Network::isLocalLink($url)) {
+ $this->logger->info('Local link', ['url' => $url, 'callstack' => System::callstack(20)]);
+ }
+
if (strlen($url) > 1000) {
$this->logger->debug('URL is longer than 1000 characters.', ['url' => $url, 'callstack' => System::callstack(20)]);
$this->profiler->saveTimestamp($stamp1, 'network');
{
$stamp1 = microtime(true);
+ if (Network::isLocalLink($url)) {
+ $this->logger->info('Local link', ['url' => $url, 'callstack' => System::callstack(20)]);
+ }
+
if (Network::isUrlBlocked($url)) {
$this->logger->info('Domain is blocked.' . ['url' => $url]);
$this->profiler->saveTimestamp($stamp1, 'network');
*/
public function finalUrl(string $url, int $depth = 1, bool $fetchbody = false)
{
+ if (Network::isLocalLink($url)) {
+ $this->logger->info('Local link', ['url' => $url, 'callstack' => System::callstack(20)]);
+ }
+
if (Network::isUrlBlocked($url)) {
$this->logger->info('Domain is blocked.', ['url' => $url]);
return $url;
namespace Friendica\Util;
use Friendica\Core\Logger;
-use Friendica\Core\System;
use Friendica\DI;
+use Friendica\Model\Photo;
/**
* Image utilities
return $data;
}
- $img_str = DI::httpRequest()->fetch($url, 4);
+ if (Network::isLocalLink($url) && ($data = Photo::getResourceData($url))) {
+ $photo = Photo::getPhoto($data['guid'], $data['scale']);
+ if (!empty($photo)) {
+ $img_str = Photo::getImageDataForPhoto($photo);
+ }
+ }
+
+ if (empty($img_str)) {
+ $img_str = DI::httpRequest()->fetch($url, 4);
+ }
if (!$img_str) {
return [];