X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapub%2Fsrc%2Fobjects%2Finstance.rs;h=ef4328ef0582f4856e4333b2159ca39d7912747f;hb=2ef0f8f5f8c60d8c7632779ca16bac69daab1266;hp=dbf2f9f3a05fdd362139c58c42052c49d627d2ed;hpb=7bb941e5461f68b810a18ea40cb7a405ded69cc9;p=lemmy.git diff --git a/crates/apub/src/objects/instance.rs b/crates/apub/src/objects/instance.rs index dbf2f9f3..ef4328ef 100644 --- a/crates/apub/src/objects/instance.rs +++ b/crates/apub/src/objects/instance.rs @@ -3,7 +3,10 @@ use crate::{ local_instance, objects::read_from_string_or_source_opt, protocol::{ - objects::instance::{Instance, InstanceType}, + objects::{ + instance::{Instance, InstanceType}, + LanguageTag, + }, ImageObject, Source, }, @@ -18,7 +21,10 @@ use activitypub_federation::{ use chrono::NaiveDateTime; use lemmy_api_common::utils::blocking; use lemmy_db_schema::{ - source::site::{Site, SiteForm}, + source::{ + actor_language::SiteLanguage, + site::{Site, SiteForm}, + }, utils::{naive_now, DbPool}, }; use lemmy_utils::{ @@ -76,7 +82,11 @@ impl ApubObject for ApubSite { } #[tracing::instrument(skip_all)] - async fn into_apub(self, _data: &Self::DataType) -> Result { + async fn into_apub(self, data: &Self::DataType) -> Result { + let site_id = self.id; + let langs = blocking(data.pool(), move |conn| SiteLanguage::read(conn, site_id)).await??; + let language = LanguageTag::new_multiple(langs, data.pool()).await?; + let instance = Instance { kind: InstanceType::Service, id: ObjectId::new(self.actor_id()), @@ -90,6 +100,7 @@ impl ApubObject for ApubSite { inbox: self.inbox_url.clone().into(), outbox: Url::parse(&format!("{}/site_outbox", self.actor_id))?, public_key: self.get_public_key(), + language, published: convert_datetime(self.published), updated: self.updated.map(convert_datetime), }; @@ -135,7 +146,14 @@ impl ApubObject for ApubSite { public_key: Some(apub.public_key.public_key_pem.clone()), ..SiteForm::default() }; - let site = blocking(data.pool(), move |conn| Site::upsert(conn, &site_form)).await??; + let languages = LanguageTag::to_language_id_multiple(apub.language, data.pool()).await?; + + let site = blocking(data.pool(), move |conn| { + let site = Site::upsert(conn, &site_form)?; + SiteLanguage::update(conn, languages, site.id)?; + Ok::(site) + }) + .await??; Ok(site.into()) } }