kopia lustrzana https://github.com/friendica/friendica
Merge pull request #8903 from MrPetovan/task/8676-ap-multiple-link-image
ActivityPub: Add support for multiple Link as urls of Images attachmentspull/8913/head
commit
660cab9427
|
@ -115,10 +115,22 @@ class Processor
|
||||||
continue 2;
|
continue 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$item['body'] .= "\n";
|
||||||
|
|
||||||
|
// image is the preview/thumbnail URL
|
||||||
|
if (!empty($attach['image'])) {
|
||||||
|
$item['body'] .= '[url=' . $attach['url'] . ']';
|
||||||
|
$attach['url'] = $attach['image'];
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($attach['name'])) {
|
if (empty($attach['name'])) {
|
||||||
$item['body'] .= "\n[img]" . $attach['url'] . '[/img]';
|
$item['body'] .= '[img]' . $attach['url'] . '[/img]';
|
||||||
} else {
|
} else {
|
||||||
$item['body'] .= "\n[img=" . $attach['url'] . ']' . $attach['name'] . '[/img]';
|
$item['body'] .= '[img=' . $attach['url'] . ']' . $attach['name'] . '[/img]';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($attach['image'])) {
|
||||||
|
$item['body'] .= '[/url]';
|
||||||
}
|
}
|
||||||
} elseif ($filetype == 'audio') {
|
} elseif ($filetype == 'audio') {
|
||||||
if (!empty($activity['source']) && strpos($activity['source'], $attach['url'])) {
|
if (!empty($activity['source']) && strpos($activity['source'], $attach['url'])) {
|
||||||
|
|
|
@ -877,7 +877,7 @@ class Receiver
|
||||||
*
|
*
|
||||||
* @param array $attachments Attachments in JSON-LD format
|
* @param array $attachments Attachments in JSON-LD format
|
||||||
*
|
*
|
||||||
* @return array with attachmants in a simplified format
|
* @return array Attachments in a simplified format
|
||||||
*/
|
*/
|
||||||
private static function processAttachments(array $attachments)
|
private static function processAttachments(array $attachments)
|
||||||
{
|
{
|
||||||
|
@ -925,6 +925,62 @@ class Receiver
|
||||||
'url' => JsonLD::fetchElement($attachment, 'as:href', '@id')
|
'url' => JsonLD::fetchElement($attachment, 'as:href', '@id')
|
||||||
];
|
];
|
||||||
break;
|
break;
|
||||||
|
case 'as:Image':
|
||||||
|
$mediaType = JsonLD::fetchElement($attachment, 'as:mediaType', '@value');
|
||||||
|
$imageFullUrl = JsonLD::fetchElement($attachment, 'as:url', '@id');
|
||||||
|
$imagePreviewUrl = null;
|
||||||
|
// Multiple URLs?
|
||||||
|
if (!$imageFullUrl && ($urls = JsonLD::fetchElementArray($attachment, 'as:url'))) {
|
||||||
|
$imageVariants = [];
|
||||||
|
$previewVariants = [];
|
||||||
|
foreach ($urls as $url) {
|
||||||
|
// Scalar URL, no discrimination possible
|
||||||
|
if (is_string($url)) {
|
||||||
|
$imageFullUrl = $url;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not sure what to do with a different Link media type than the base Image, we skip
|
||||||
|
if ($mediaType != JsonLD::fetchElement($url, 'as:mediaType', '@value')) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$href = JsonLD::fetchElement($url, 'as:href', '@id');
|
||||||
|
|
||||||
|
// Default URL choice if no discriminating width is provided
|
||||||
|
$imageFullUrl = $href ?? $imageFullUrl;
|
||||||
|
|
||||||
|
$width = intval(JsonLD::fetchElement($url, 'as:width', '@value') ?? 1);
|
||||||
|
|
||||||
|
if ($href && $width) {
|
||||||
|
$imageVariants[$width] = $href;
|
||||||
|
// 632 is the ideal width for full screen frio posts, we compute the absolute distance to it
|
||||||
|
$previewVariants[abs(632 - $width)] = $href;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($imageVariants) {
|
||||||
|
// Taking the maximum size image
|
||||||
|
ksort($imageVariants);
|
||||||
|
$imageFullUrl = array_pop($imageVariants);
|
||||||
|
|
||||||
|
// Taking the minimum number distance to the target distance
|
||||||
|
ksort($previewVariants);
|
||||||
|
$imagePreviewUrl = array_shift($previewVariants);
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($imageVariants);
|
||||||
|
unset($previewVariants);
|
||||||
|
}
|
||||||
|
|
||||||
|
$attachlist[] = [
|
||||||
|
'type' => str_replace('as:', '', JsonLD::fetchElement($attachment, '@type')),
|
||||||
|
'mediaType' => $mediaType,
|
||||||
|
'name' => JsonLD::fetchElement($attachment, 'as:name', '@value'),
|
||||||
|
'url' => $imageFullUrl,
|
||||||
|
'image' => $imagePreviewUrl !== $imageFullUrl ? $imagePreviewUrl : null,
|
||||||
|
];
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
$attachlist[] = [
|
$attachlist[] = [
|
||||||
'type' => str_replace('as:', '', JsonLD::fetchElement($attachment, '@type')),
|
'type' => str_replace('as:', '', JsonLD::fetchElement($attachment, '@type')),
|
||||||
|
|
Ładowanie…
Reference in New Issue