Merge pull request #13629 from annando/transmitted-languages

The transmitted language is now stored
This commit is contained in:
Hypolite Petovan 2023-11-10 07:29:10 -08:00 committed by GitHub
commit dc69116572
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 11 deletions

View file

@ -1996,19 +1996,31 @@ class Item
* @return string detected language * @return string detected language
* @throws \Text_LanguageDetect_Exception * @throws \Text_LanguageDetect_Exception
*/ */
private static function getLanguage(array $item): string private static function getLanguage(array $item): ?string
{ {
if (!empty($item['language'])) { if (!empty($item['language'])) {
return $item['language']; return $item['language'];
} }
if (!in_array($item['gravity'], [self::GRAVITY_PARENT, self::GRAVITY_COMMENT]) || empty($item['body'])) { $transmitted = [];
return ''; foreach ($item['transmitted-languages'] ?? [] as $language) {
$transmitted[$language] = 0;
} }
$languages = self::getLanguageArray($item['title'] . ' ' . ($item['content-warning'] ?? '') . ' ' . $item['body'], 3, $item['uri-id'], $item['author-id']); $content = trim(($item['title'] ?? '') . ' ' . ($item['content-warning'] ?? '') . ' ' . ($item['body'] ?? ''));
if (!in_array($item['gravity'], [self::GRAVITY_PARENT, self::GRAVITY_COMMENT]) || empty($content)) {
return !empty($transmitted) ? json_encode($transmitted) : null;
}
$languages = self::getLanguageArray($content, 3, $item['uri-id'], $item['author-id']);
if (empty($languages)) { if (empty($languages)) {
return ''; return !empty($transmitted) ? json_encode($transmitted) : null;
}
if (!empty($transmitted)) {
$languages = array_merge($transmitted, $languages);
arsort($languages);
} }
return json_encode($languages); return json_encode($languages);
@ -2209,7 +2221,7 @@ class Item
// Glue it together to be able to make a hash from it // Glue it together to be able to make a hash from it
if (!empty($parsed)) { if (!empty($parsed)) {
$host_id = implode('/', $parsed); $host_id = implode('/', (array)$parsed);
} else { } else {
$host_id = $uri; $host_id = $uri;
} }
@ -3435,7 +3447,7 @@ class Item
unset($urlparts['fragment']); unset($urlparts['fragment']);
try { try {
$url = (string)Uri::fromParts($urlparts); $url = (string)Uri::fromParts((array)$urlparts);
} catch (\InvalidArgumentException $e) { } catch (\InvalidArgumentException $e) {
DI::logger()->notice('Invalid URL', ['$url' => $url, '$urlparts' => $urlparts]); DI::logger()->notice('Invalid URL', ['$url' => $url, '$urlparts' => $urlparts]);
/* See https://github.com/friendica/friendica/issues/12113 /* See https://github.com/friendica/friendica/issues/12113

View file

@ -854,6 +854,8 @@ class Processor
$item['language'] = self::processLanguages($activity['languages']); $item['language'] = self::processLanguages($activity['languages']);
} }
$item['transmitted-languages'] = $activity['transmitted-languages'];
if (!empty($activity['emojis'])) { if (!empty($activity['emojis'])) {
$content = self::replaceEmojis($item['uri-id'], $content, $activity['emojis']); $content = self::replaceEmojis($item['uri-id'], $content, $activity['emojis']);
} }
@ -1727,7 +1729,7 @@ class Processor
} }
} }
$languages = self::getPostLanguages($activity); $languages = self::getPostLanguages($activity['as:object'] ?? '');
return Relay::isSolicitedPost($messageTags, $content, $authorid, $id, Protocol::ACTIVITYPUB, $activity['thread-completion'] ?? 0, $languages); return Relay::isSolicitedPost($messageTags, $content, $authorid, $id, Protocol::ACTIVITYPUB, $activity['thread-completion'] ?? 0, $languages);
} }
@ -1738,10 +1740,10 @@ class Processor
* @param array $activity * @param array $activity
* @return array * @return array
*/ */
private static function getPostLanguages(array $activity): array public static function getPostLanguages(array $activity): array
{ {
$content = JsonLD::fetchElement($activity['as:object'], 'as:content') ?? ''; $content = JsonLD::fetchElement($activity, 'as:content') ?? '';
$languages = JsonLD::fetchElementArray($activity['as:object'], 'as:content', '@language') ?? []; $languages = JsonLD::fetchElementArray($activity, 'as:content', '@language') ?? [];
if (empty($languages)) { if (empty($languages)) {
return []; return [];
} }

View file

@ -2005,6 +2005,7 @@ class Receiver
$object_data['tags'] = self::processTags(JsonLD::fetchElementArray($object, 'as:tag') ?? []); $object_data['tags'] = self::processTags(JsonLD::fetchElementArray($object, 'as:tag') ?? []);
$object_data['emojis'] = self::processEmojis(JsonLD::fetchElementArray($object, 'as:tag', null, '@type', 'toot:Emoji') ?? []); $object_data['emojis'] = self::processEmojis(JsonLD::fetchElementArray($object, 'as:tag', null, '@type', 'toot:Emoji') ?? []);
$object_data['languages'] = self::processLanguages(JsonLD::fetchElementArray($object, 'sc:inLanguage') ?? []); $object_data['languages'] = self::processLanguages(JsonLD::fetchElementArray($object, 'sc:inLanguage') ?? []);
$object_data['transmitted-languages'] = Processor::getPostLanguages($object);
$object_data['generator'] = JsonLD::fetchElement($object, 'as:generator', 'as:name', '@type', 'as:Application'); $object_data['generator'] = JsonLD::fetchElement($object, 'as:generator', 'as:name', '@type', 'as:Application');
$object_data['generator'] = JsonLD::fetchElement($object_data, 'generator', '@value'); $object_data['generator'] = JsonLD::fetchElement($object_data, 'generator', '@value');
$object_data['alternate-url'] = JsonLD::fetchElement($object, 'as:url', '@id'); $object_data['alternate-url'] = JsonLD::fetchElement($object, 'as:url', '@id');