X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fapub%2Fsrc%2Fprotocol%2Fobjects%2Fmod.rs;h=9a3dab1859949d91c1c3b9f542fd0eb5970df1d8;hb=92568956353f21649ed9aff68b42699c9d036f30;hp=31b8eb32bcba5f573e42c11ec39d5bb5c7f6c0f3;hpb=2ef0f8f5f8c60d8c7632779ca16bac69daab1266;p=lemmy.git diff --git a/crates/apub/src/protocol/objects/mod.rs b/crates/apub/src/protocol/objects/mod.rs index 31b8eb32..9a3dab18 100644 --- a/crates/apub/src/protocol/objects/mod.rs +++ b/crates/apub/src/protocol/objects/mod.rs @@ -1,5 +1,9 @@ -use lemmy_api_common::utils::blocking; -use lemmy_db_schema::{newtypes::LanguageId, source::language::Language, utils::DbPool}; +use lemmy_db_schema::{ + impls::actor_language::UNDETERMINED_ID, + newtypes::LanguageId, + source::language::Language, + utils::DbPool, +}; use lemmy_utils::error::LemmyError; use serde::{Deserialize, Serialize}; use url::Url; @@ -29,12 +33,12 @@ pub(crate) struct LanguageTag { impl LanguageTag { pub(crate) async fn new_single( lang: LanguageId, - pool: &DbPool, + pool: &mut DbPool<'_>, ) -> Result, LemmyError> { - let lang = blocking(pool, move |conn| Language::read_from_id(conn, lang)).await??; + let lang = Language::read_from_id(pool, lang).await?; // undetermined - if lang.code == "und" { + if lang.id == UNDETERMINED_ID { Ok(None) } else { Ok(Some(LanguageTag { @@ -45,16 +49,14 @@ impl LanguageTag { } pub(crate) async fn new_multiple( - langs: Vec, - pool: &DbPool, + lang_ids: Vec, + pool: &mut DbPool<'_>, ) -> Result, LemmyError> { - let langs = blocking(pool, move |conn| { - langs - .into_iter() - .map(|l| Language::read_from_id(conn, l)) - .collect::, diesel::result::Error>>() - }) - .await??; + let mut langs = Vec::::new(); + + for l in lang_ids { + langs.push(Language::read_from_id(pool, l).await?); + } let langs = langs .into_iter() @@ -68,35 +70,34 @@ impl LanguageTag { pub(crate) async fn to_language_id_single( lang: Option, - pool: &DbPool, + pool: &mut DbPool<'_>, ) -> Result, LemmyError> { let identifier = lang.map(|l| l.identifier); - let language = blocking(pool, move |conn| { - Language::read_id_from_code_opt(conn, identifier.as_deref()) - }) - .await??; + let language = Language::read_id_from_code(pool, identifier.as_deref()).await?; Ok(language) } pub(crate) async fn to_language_id_multiple( langs: Vec, - pool: &DbPool, + pool: &mut DbPool<'_>, ) -> Result, LemmyError> { - let languages = blocking(pool, move |conn| { - langs - .into_iter() - .map(|l| l.identifier) - .map(|l| Language::read_id_from_code(conn, &l)) - .collect::, diesel::result::Error>>() - }) - .await??; - Ok(languages) + let mut language_ids = Vec::new(); + + for l in langs { + let id = l.identifier; + language_ids.push(Language::read_id_from_code(pool, Some(&id)).await?); + } + + Ok(language_ids.into_iter().flatten().collect()) } } #[cfg(test)] mod tests { + #![allow(clippy::unwrap_used)] + #![allow(clippy::indexing_slicing)] + use crate::protocol::{ objects::{ chat_message::ChatMessage, @@ -138,6 +139,7 @@ mod tests { fn test_parse_objects_mastodon() { test_json::("assets/mastodon/objects/person.json").unwrap(); test_json::("assets/mastodon/objects/note.json").unwrap(); + test_json::("assets/mastodon/objects/page.json").unwrap(); } #[test] @@ -174,4 +176,11 @@ mod tests { test_json::("assets/peertube/objects/video.json").unwrap(); test_json::("assets/peertube/objects/note.json").unwrap(); } + + #[test] + fn test_parse_object_mobilizon() { + test_json::("assets/mobilizon/objects/group.json").unwrap(); + test_json::("assets/mobilizon/objects/event.json").unwrap(); + test_json::("assets/mobilizon/objects/person.json").unwrap(); + } }