Issue 12345: No link preview on DFRN posts
This commit is contained in:
parent
b9cb94c432
commit
7d51fa47d5
|
@ -220,7 +220,7 @@ class Item
|
||||||
$content_fields['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $content_fields['raw-body']);
|
$content_fields['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $content_fields['raw-body']);
|
||||||
$content_fields['raw-body'] = self::setHashtags($content_fields['raw-body']);
|
$content_fields['raw-body'] = self::setHashtags($content_fields['raw-body']);
|
||||||
|
|
||||||
Post\Media::insertFromRelevantUrl($item['uri-id'], $content_fields['raw-body']);
|
Post\Media::insertFromRelevantUrl($item['uri-id'], $content_fields['raw-body'], $fields['body'], $item['author-network']);
|
||||||
Post\Content::update($item['uri-id'], $content_fields);
|
Post\Content::update($item['uri-id'], $content_fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1188,7 +1188,8 @@ class Item
|
||||||
$item['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $item['raw-body']);
|
$item['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $item['raw-body']);
|
||||||
$item['raw-body'] = self::setHashtags($item['raw-body']);
|
$item['raw-body'] = self::setHashtags($item['raw-body']);
|
||||||
|
|
||||||
Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body']);
|
$author = Contact::getById($item['author-id'], ['network']);
|
||||||
|
Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body'], $item['body'], $author['network'] ?? '');
|
||||||
|
|
||||||
// Check for hashtags in the body and repair or add hashtag links
|
// Check for hashtags in the body and repair or add hashtag links
|
||||||
$item['body'] = self::setHashtags($item['body']);
|
$item['body'] = self::setHashtags($item['body']);
|
||||||
|
|
|
@ -66,6 +66,7 @@ class Media
|
||||||
* Insert a post-media record
|
* Insert a post-media record
|
||||||
*
|
*
|
||||||
* @param array $media
|
* @param array $media
|
||||||
|
* @param bool $force
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public static function insert(array $media, bool $force = false)
|
public static function insert(array $media, bool $force = false)
|
||||||
|
@ -229,20 +230,9 @@ class Media
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($media['type'] == self::HTML) {
|
if ($media['type'] == self::HTML) {
|
||||||
$data = ParseUrl::getSiteinfoCached($media['url'], false);
|
$media = self::addPage($media);
|
||||||
$media['preview'] = $data['images'][0]['src'] ?? null;
|
|
||||||
$media['preview-height'] = $data['images'][0]['height'] ?? null;
|
|
||||||
$media['preview-width'] = $data['images'][0]['width'] ?? null;
|
|
||||||
$media['blurhash'] = $data['images'][0]['blurhash'] ?? null;
|
|
||||||
$media['description'] = $data['text'] ?? null;
|
|
||||||
$media['name'] = $data['title'] ?? null;
|
|
||||||
$media['author-url'] = $data['author_url'] ?? null;
|
|
||||||
$media['author-name'] = $data['author_name'] ?? null;
|
|
||||||
$media['author-image'] = $data['author_img'] ?? null;
|
|
||||||
$media['publisher-url'] = $data['publisher_url'] ?? null;
|
|
||||||
$media['publisher-name'] = $data['publisher_name'] ?? null;
|
|
||||||
$media['publisher-image'] = $data['publisher_img'] ?? null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $media;
|
return $media;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -345,6 +335,31 @@ class Media
|
||||||
return $media;
|
return $media;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add page infos for HTML entries
|
||||||
|
*
|
||||||
|
* @param array $media
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private static function addPage(array $media): array
|
||||||
|
{
|
||||||
|
$data = ParseUrl::getSiteinfoCached($media['url'], false);
|
||||||
|
$media['preview'] = $data['images'][0]['src'] ?? null;
|
||||||
|
$media['preview-height'] = $data['images'][0]['height'] ?? null;
|
||||||
|
$media['preview-width'] = $data['images'][0]['width'] ?? null;
|
||||||
|
$media['blurhash'] = $data['images'][0]['blurhash'] ?? null;
|
||||||
|
$media['description'] = $data['text'] ?? null;
|
||||||
|
$media['name'] = $data['title'] ?? null;
|
||||||
|
$media['author-url'] = $data['author_url'] ?? null;
|
||||||
|
$media['author-name'] = $data['author_name'] ?? null;
|
||||||
|
$media['author-image'] = $data['author_img'] ?? null;
|
||||||
|
$media['publisher-url'] = $data['publisher_url'] ?? null;
|
||||||
|
$media['publisher-name'] = $data['publisher_name'] ?? null;
|
||||||
|
$media['publisher-image'] = $data['publisher_img'] ?? null;
|
||||||
|
|
||||||
|
return $media;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch media data from local resources
|
* Fetch media data from local resources
|
||||||
* @param array $media
|
* @param array $media
|
||||||
|
@ -543,7 +558,7 @@ class Media
|
||||||
* @param string $body
|
* @param string $body
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public static function insertFromRelevantUrl(int $uriid, string $body)
|
public static function insertFromRelevantUrl(int $uriid, string $body, string $fullbody, string $network)
|
||||||
{
|
{
|
||||||
// Remove all hashtags and mentions
|
// Remove all hashtags and mentions
|
||||||
$body = preg_replace("/([#@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", '', $body);
|
$body = preg_replace("/([#@!])\[url\=(.*?)\](.*?)\[\/url\]/ism", '', $body);
|
||||||
|
@ -552,7 +567,10 @@ class Media
|
||||||
if (preg_match_all("/\[url\](https?:.*?)\[\/url\]/ism", $body, $matches)) {
|
if (preg_match_all("/\[url\](https?:.*?)\[\/url\]/ism", $body, $matches)) {
|
||||||
foreach ($matches[1] as $url) {
|
foreach ($matches[1] as $url) {
|
||||||
Logger::info('Got page url (link without description)', ['uri-id' => $uriid, 'url' => $url]);
|
Logger::info('Got page url (link without description)', ['uri-id' => $uriid, 'url' => $url]);
|
||||||
self::insert(['uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $url]);
|
self::insert(['uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $url], false, $network);
|
||||||
|
if ($network == Protocol::DFRN) {
|
||||||
|
self::revertHTMLType($uriid, $url, $fullbody);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -560,10 +578,30 @@ class Media
|
||||||
if (preg_match_all("/\[url\=(https?:.*?)\].*?\[\/url\]/ism", $body, $matches)) {
|
if (preg_match_all("/\[url\=(https?:.*?)\].*?\[\/url\]/ism", $body, $matches)) {
|
||||||
foreach ($matches[1] as $url) {
|
foreach ($matches[1] as $url) {
|
||||||
Logger::info('Got page url (link with description)', ['uri-id' => $uriid, 'url' => $url]);
|
Logger::info('Got page url (link with description)', ['uri-id' => $uriid, 'url' => $url]);
|
||||||
self::insert(['uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $url]);
|
self::insert(['uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $url], false, $network);
|
||||||
|
if ($network == Protocol::DFRN) {
|
||||||
|
self::revertHTMLType($uriid, $url, $fullbody);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Revert the media type of links to UNKNOWN for DFRN posts when they aren't attached
|
||||||
|
*
|
||||||
|
* @param integer $uriid
|
||||||
|
* @param string $url
|
||||||
|
* @param string $body
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private static function revertHTMLType(int $uriid, string $url, string $body)
|
||||||
|
{
|
||||||
|
$attachment = BBCode::getAttachmentData($body);
|
||||||
|
if (!empty($attachment['url']) && Network::getUrlMatch($attachment['url'], $url)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DBA::update('post-media', ['type' => self::UNKNOWN], ['uri-id' => $uriid, 'type' => self::HTML, 'url' => $url]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add media links from the attachment field
|
* Add media links from the attachment field
|
||||||
|
@ -633,7 +671,7 @@ class Media
|
||||||
*/
|
*/
|
||||||
public static function getByURIId(int $uri_id, array $types = [])
|
public static function getByURIId(int $uri_id, array $types = [])
|
||||||
{
|
{
|
||||||
$condition = ['uri-id' => $uri_id];
|
$condition = ["`uri-id` = ? AND `type` != ?", $uri_id, self::UNKNOWN];
|
||||||
|
|
||||||
if (!empty($types)) {
|
if (!empty($types)) {
|
||||||
$condition = DBA::mergeConditions($condition, ['type' => $types]);
|
$condition = DBA::mergeConditions($condition, ['type' => $types]);
|
||||||
|
@ -652,7 +690,7 @@ class Media
|
||||||
*/
|
*/
|
||||||
public static function existsByURIId(int $uri_id, array $types = []): bool
|
public static function existsByURIId(int $uri_id, array $types = []): bool
|
||||||
{
|
{
|
||||||
$condition = ['uri-id' => $uri_id];
|
$condition = ["`uri-id` = ? AND `type` != ?", $uri_id, self::UNKNOWN];
|
||||||
|
|
||||||
if (!empty($types)) {
|
if (!empty($types)) {
|
||||||
$condition = DBA::mergeConditions($condition, ['type' => $types]);
|
$condition = DBA::mergeConditions($condition, ['type' => $types]);
|
||||||
|
|
|
@ -734,6 +734,9 @@ class Image
|
||||||
public function getBlurHash(): string
|
public function getBlurHash(): string
|
||||||
{
|
{
|
||||||
$image = New Image($this->asString());
|
$image = New Image($this->asString());
|
||||||
|
if (empty($image)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
$width = $image->getWidth();
|
$width = $image->getWidth();
|
||||||
$height = $image->getHeight();
|
$height = $image->getHeight();
|
||||||
|
@ -749,7 +752,11 @@ class Image
|
||||||
$row = [];
|
$row = [];
|
||||||
for ($x = 0; $x < $width; ++$x) {
|
for ($x = 0; $x < $width; ++$x) {
|
||||||
if ($image->isImagick()) {
|
if ($image->isImagick()) {
|
||||||
|
try {
|
||||||
$colors = $image->image->getImagePixelColor($x, $y)->getColor();
|
$colors = $image->image->getImagePixelColor($x, $y)->getColor();
|
||||||
|
} catch (\Throwable $th) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
$row[] = [$colors['r'], $colors['g'], $colors['b']];
|
$row[] = [$colors['r'], $colors['g'], $colors['b']];
|
||||||
} else {
|
} else {
|
||||||
$index = imagecolorat($image->image, $x, $y);
|
$index = imagecolorat($image->image, $x, $y);
|
||||||
|
|
|
@ -711,7 +711,7 @@ class DFRN
|
||||||
*/
|
*/
|
||||||
private static function getAttachment($doc, $root, array $item)
|
private static function getAttachment($doc, $root, array $item)
|
||||||
{
|
{
|
||||||
foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) {
|
foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT]) as $attachment) {
|
||||||
$attributes = ['rel' => 'enclosure',
|
$attributes = ['rel' => 'enclosure',
|
||||||
'href' => $attachment['url'],
|
'href' => $attachment['url'],
|
||||||
'type' => $attachment['mimetype']];
|
'type' => $attachment['mimetype']];
|
||||||
|
|
|
@ -499,7 +499,7 @@ class Diaspora
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!($fields = self::validPosting($msg))) {
|
if (!($fields = self::validPosting($msg))) {
|
||||||
Logger::warning('Invalid posting');
|
Logger::warning('Invalid posting', ['msg' => $msg]);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -534,7 +534,7 @@ class Diaspora
|
||||||
if (is_null($fields)) {
|
if (is_null($fields)) {
|
||||||
$private = true;
|
$private = true;
|
||||||
if (!($fields = self::validPosting($msg))) {
|
if (!($fields = self::validPosting($msg))) {
|
||||||
Logger::warning('Invalid posting');
|
Logger::warning('Invalid posting', ['msg' => $msg]);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -3387,7 +3387,7 @@ class Diaspora
|
||||||
$body = '### ' . html_entity_decode($title) . "\n\n" . $body;
|
$body = '### ' . html_entity_decode($title) . "\n\n" . $body;
|
||||||
}
|
}
|
||||||
|
|
||||||
$attachments = Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]);
|
$attachments = Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT]);
|
||||||
if (!empty($attachments)) {
|
if (!empty($attachments)) {
|
||||||
$body .= "\n[hr]\n";
|
$body .= "\n[hr]\n";
|
||||||
foreach ($attachments as $attachment) {
|
foreach ($attachments as $attachment) {
|
||||||
|
|
|
@ -1186,7 +1186,7 @@ class OStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) {
|
foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT]) as $attachment) {
|
||||||
$attributes = ['rel' => 'enclosure',
|
$attributes = ['rel' => 'enclosure',
|
||||||
'href' => $attachment['url'],
|
'href' => $attachment['url'],
|
||||||
'type' => $attachment['mimetype']];
|
'type' => $attachment['mimetype']];
|
||||||
|
|
Loading…
Reference in New Issue
Block a user