]> Untitled Git - lemmy.git/blobdiff - crates/api/src/local_user/save_settings.rs
Tag posts and comments with language (fixes #440) (#2269)
[lemmy.git] / crates / api / src / local_user / save_settings.rs
index 5e37470a9053a97d884ab7fb9f0c929c3c1510a9..e8a94ff60cc00ecc9d81c965362188a636122604 100644 (file)
@@ -7,6 +7,7 @@ use lemmy_api_common::{
 use lemmy_db_schema::{
   source::{
     local_user::{LocalUser, LocalUserForm},
+    local_user_language::LocalUserLanguage,
     person::{Person, PersonForm},
     site::Site,
   },
@@ -15,9 +16,9 @@ use lemmy_db_schema::{
 };
 use lemmy_utils::{
   claims::Claims,
+  error::LemmyError,
   utils::{is_valid_display_name, is_valid_matrix_id},
   ConnectionId,
-  LemmyError,
 };
 use lemmy_websocket::LemmyContext;
 
@@ -48,7 +49,7 @@ impl Perform for SaveUserSettings {
       let previous_email = local_user_view.local_user.email.clone().unwrap_or_default();
       // Only send the verification email if there was an email change
       if previous_email.ne(email) {
-        send_verification_email(&local_user_view, email, context.pool(), &context.settings())
+        send_verification_email(&local_user_view, email, context.pool(), context.settings())
           .await?;
       }
     }
@@ -87,7 +88,7 @@ impl Perform for SaveUserSettings {
     let default_listing_type = data.default_listing_type;
     let default_sort_type = data.default_sort_type;
     let password_encrypted = local_user_view.local_user.password_encrypted;
-    let public_key = local_user_view.person.public_key;
+    let public_key = Some(local_user_view.person.public_key);
 
     let person_form = PersonForm {
       name: local_user_view.person.name,
@@ -118,6 +119,20 @@ impl Perform for SaveUserSettings {
     .await?
     .map_err(|e| LemmyError::from_error_message(e, "user_already_exists"))?;
 
+    if let Some(discussion_languages) = data.discussion_languages.clone() {
+      // An empty array is a "clear" / set all languages
+      let languages = if discussion_languages.is_empty() {
+        None
+      } else {
+        Some(discussion_languages)
+      };
+
+      blocking(context.pool(), move |conn| {
+        LocalUserLanguage::update_user_languages(conn, languages, local_user_id)
+      })
+      .await??;
+    }
+
     let local_user_form = LocalUserForm {
       person_id: Some(person_id),
       email,
@@ -128,7 +143,7 @@ impl Perform for SaveUserSettings {
       theme: data.theme.to_owned(),
       default_sort_type,
       default_listing_type,
-      lang: data.lang.to_owned(),
+      interface_language: data.interface_language.to_owned(),
       show_avatars: data.show_avatars,
       show_read_posts: data.show_read_posts,
       show_new_post_notifs: data.show_new_post_notifs,