]> Untitled Git - lemmy.git/blobdiff - crates/apub/src/objects/post.rs
Tag posts and comments with language (fixes #440) (#2269)
[lemmy.git] / crates / apub / src / objects / post.rs
index bc1b44f54a4ef656cf38e06611f835f5a976dba4..ea536e51fb8f138b5daf4662113111067b8711c8 100644 (file)
@@ -4,7 +4,7 @@ use crate::{
   local_instance,
   objects::{read_from_string_or_source_opt, verify_is_remote_object},
   protocol::{
-    objects::page::{Attachment, AttributedTo, Page, PageType},
+    objects::page::{Attachment, AttributedTo, LanguageTag, Page, PageType},
     ImageObject,
     Source,
   },
@@ -22,6 +22,7 @@ use lemmy_db_schema::{
   self,
   source::{
     community::Community,
+    language::Language,
     moderator::{ModLockPost, ModLockPostForm, ModStickyPost, ModStickyPostForm},
     person::Person,
     post::{Post, PostForm},
@@ -98,6 +99,11 @@ impl ApubObject for ApubPost {
       Community::read(conn, community_id)
     })
     .await??;
+    let language = self.language_id;
+    let language = blocking(context.pool(), move |conn| {
+      Language::read_from_id(conn, language)
+    })
+    .await??;
 
     let page = Page {
       kind: PageType::Page,
@@ -115,6 +121,7 @@ impl ApubObject for ApubPost {
       comments_enabled: Some(!self.locked),
       sensitive: Some(self.nsfw),
       stickied: Some(self.stickied),
+      language: LanguageTag::new(language),
       published: Some(convert_datetime(self.published)),
       updated: self.updated.map(convert_datetime),
     };
@@ -181,6 +188,11 @@ impl ApubObject for ApubPost {
       let body_slurs_removed =
         read_from_string_or_source_opt(&page.content, &page.media_type, &page.source)
           .map(|s| Some(remove_slurs(&s, &context.settings().slur_regex())));
+      let language = page.language.map(|l| l.identifier);
+      let language = blocking(context.pool(), move |conn| {
+        Language::read_id_from_code_opt(conn, language.as_deref())
+      })
+      .await??;
 
       PostForm {
         name: page.name.clone(),
@@ -201,6 +213,7 @@ impl ApubObject for ApubPost {
         thumbnail_url: Some(thumbnail_url),
         ap_id: Some(page.id.clone().into()),
         local: Some(false),
+        language_id: language,
       }
     } else {
       // if is mod action, only update locked/stickied fields, nothing else