]> Untitled Git - lemmy.git/blobdiff - crates/apub/src/protocol/objects/mod.rs
Cache & Optimize Woodpecker CI (#3450)
[lemmy.git] / crates / apub / src / protocol / objects / mod.rs
index 31b8eb32bcba5f573e42c11ec39d5bb5c7f6c0f3..9a3dab1859949d91c1c3b9f542fd0eb5970df1d8 100644 (file)
@@ -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<Option<LanguageTag>, 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<LanguageId>,
-    pool: &DbPool,
+    lang_ids: Vec<LanguageId>,
+    pool: &mut DbPool<'_>,
   ) -> Result<Vec<LanguageTag>, LemmyError> {
-    let langs = blocking(pool, move |conn| {
-      langs
-        .into_iter()
-        .map(|l| Language::read_from_id(conn, l))
-        .collect::<Result<Vec<Language>, diesel::result::Error>>()
-    })
-    .await??;
+    let mut langs = Vec::<Language>::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<Self>,
-    pool: &DbPool,
+    pool: &mut DbPool<'_>,
   ) -> Result<Option<LanguageId>, 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<Self>,
-    pool: &DbPool,
+    pool: &mut DbPool<'_>,
   ) -> Result<Vec<LanguageId>, LemmyError> {
-    let languages = blocking(pool, move |conn| {
-      langs
-        .into_iter()
-        .map(|l| l.identifier)
-        .map(|l| Language::read_id_from_code(conn, &l))
-        .collect::<Result<Vec<LanguageId>, 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::<Person>("assets/mastodon/objects/person.json").unwrap();
     test_json::<Note>("assets/mastodon/objects/note.json").unwrap();
+    test_json::<Page>("assets/mastodon/objects/page.json").unwrap();
   }
 
   #[test]
@@ -174,4 +176,11 @@ mod tests {
     test_json::<Page>("assets/peertube/objects/video.json").unwrap();
     test_json::<Note>("assets/peertube/objects/note.json").unwrap();
   }
+
+  #[test]
+  fn test_parse_object_mobilizon() {
+    test_json::<Group>("assets/mobilizon/objects/group.json").unwrap();
+    test_json::<Page>("assets/mobilizon/objects/event.json").unwrap();
+    test_json::<Person>("assets/mobilizon/objects/person.json").unwrap();
+  }
 }