mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-09-30 07:12:04 +00:00
Some fixes for all / missing user languages.
This commit is contained in:
parent
b8ef402448
commit
763424d61e
5 changed files with 55 additions and 41 deletions
|
@ -7,7 +7,7 @@ use lemmy_api_common::{
|
|||
use lemmy_db_schema::{
|
||||
source::{
|
||||
local_user::{LocalUser, LocalUserForm},
|
||||
local_user_language::{LocalUserLanguage, LocalUserLanguageForm},
|
||||
local_user_language::LocalUserLanguage,
|
||||
person::{Person, PersonForm},
|
||||
site::Site,
|
||||
},
|
||||
|
@ -120,15 +120,15 @@ impl Perform for SaveUserSettings {
|
|||
.map_err(|e| LemmyError::from_error_message(e, "user_already_exists"))?;
|
||||
|
||||
if let Some(discussion_languages) = data.discussion_languages.clone() {
|
||||
let discussion_languages: Vec<LocalUserLanguageForm> = discussion_languages
|
||||
.into_iter()
|
||||
.map(|lang| LocalUserLanguageForm {
|
||||
local_user_id,
|
||||
language_id: lang,
|
||||
})
|
||||
.collect();
|
||||
// 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, discussion_languages, local_user_id)
|
||||
LocalUserLanguage::update_user_languages(conn, languages, local_user_id)
|
||||
})
|
||||
.await??;
|
||||
}
|
||||
|
|
|
@ -47,16 +47,14 @@ where
|
|||
{
|
||||
let pool = pool.clone();
|
||||
let blocking_span = tracing::info_span!("blocking operation");
|
||||
let res = actix_web::web::block(move || {
|
||||
actix_web::web::block(move || {
|
||||
let entered = blocking_span.enter();
|
||||
let conn = pool.get()?;
|
||||
let res = (f)(&conn);
|
||||
drop(entered);
|
||||
Ok(res) as Result<T, LemmyError>
|
||||
})
|
||||
.await?;
|
||||
|
||||
res
|
||||
.await?
|
||||
}
|
||||
|
||||
#[tracing::instrument(skip_all)]
|
||||
|
|
|
@ -15,6 +15,7 @@ use lemmy_db_schema::{
|
|||
aggregates::structs::PersonAggregates,
|
||||
source::{
|
||||
local_user::{LocalUser, LocalUserForm},
|
||||
local_user_language::LocalUserLanguage,
|
||||
person::{Person, PersonForm},
|
||||
registration_application::{RegistrationApplication, RegistrationApplicationForm},
|
||||
site::Site,
|
||||
|
@ -167,10 +168,17 @@ impl PerformCrud for Register {
|
|||
}
|
||||
};
|
||||
|
||||
// Update the users languages to all by default
|
||||
let local_user_id = inserted_local_user.id;
|
||||
blocking(context.pool(), move |conn| {
|
||||
LocalUserLanguage::update_user_languages(conn, None, local_user_id)
|
||||
})
|
||||
.await??;
|
||||
|
||||
if require_application {
|
||||
// Create the registration application
|
||||
let form = RegistrationApplicationForm {
|
||||
local_user_id: Some(inserted_local_user.id),
|
||||
local_user_id: Some(local_user_id),
|
||||
// We already made sure answer was not null above
|
||||
answer: data.answer.to_owned(),
|
||||
..RegistrationApplicationForm::default()
|
||||
|
|
|
@ -1,22 +1,40 @@
|
|||
use crate::{newtypes::LocalUserId, source::local_user_language::*};
|
||||
use crate::{
|
||||
newtypes::{LanguageId, LocalUserId},
|
||||
source::{language::Language, local_user_language::*},
|
||||
};
|
||||
use diesel::{result::Error, PgConnection, RunQueryDsl, *};
|
||||
|
||||
impl LocalUserLanguage {
|
||||
/// Update the user's languages.
|
||||
///
|
||||
/// If no language_id vector is given, it will show all languages
|
||||
pub fn update_user_languages(
|
||||
conn: &PgConnection,
|
||||
languages: Vec<LocalUserLanguageForm>,
|
||||
language_ids: Option<Vec<LanguageId>>,
|
||||
for_local_user_id: LocalUserId,
|
||||
) -> Result<(), Error> {
|
||||
use crate::schema::local_user_language::dsl::*;
|
||||
conn.build_transaction().read_write().run(|| {
|
||||
delete(local_user_language.filter(local_user_id.eq(for_local_user_id))).execute(conn)?;
|
||||
|
||||
for l in languages {
|
||||
insert_into(local_user_language)
|
||||
.values(l)
|
||||
.get_result::<Self>(conn)?;
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
// Clear the current user languages
|
||||
delete(local_user_language.filter(local_user_id.eq(for_local_user_id))).execute(conn)?;
|
||||
|
||||
// If no language is given, read all languages
|
||||
let lang_ids = language_ids.unwrap_or(
|
||||
Language::read_all(conn)?
|
||||
.into_iter()
|
||||
.map(|l| l.id)
|
||||
.collect(),
|
||||
);
|
||||
|
||||
for l in lang_ids {
|
||||
let form = LocalUserLanguageForm {
|
||||
local_user_id: for_local_user_id,
|
||||
language_id: l,
|
||||
};
|
||||
insert_into(local_user_language)
|
||||
.values(form)
|
||||
.get_result::<Self>(conn)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -525,7 +525,7 @@ mod tests {
|
|||
community_block::{CommunityBlock, CommunityBlockForm},
|
||||
language::Language,
|
||||
local_user::{LocalUser, LocalUserForm},
|
||||
local_user_language::{LocalUserLanguage, LocalUserLanguageForm},
|
||||
local_user_language::LocalUserLanguage,
|
||||
person::*,
|
||||
person_block::{PersonBlock, PersonBlockForm},
|
||||
post::*,
|
||||
|
@ -897,6 +897,9 @@ mod tests {
|
|||
let local_user = LocalUserView::read(&conn, local_user.id).unwrap();
|
||||
let local_user_id = local_user.local_user.id;
|
||||
|
||||
// Update the users languages to all
|
||||
LocalUserLanguage::update_user_languages(&conn, None, local_user_id).unwrap();
|
||||
|
||||
let post_listings_all = PostQueryBuilder::create(&conn)
|
||||
.sort(SortType::New)
|
||||
.set_params_for_user(&Some(local_user.clone()))
|
||||
|
@ -907,16 +910,7 @@ mod tests {
|
|||
assert_eq!(4, post_listings_all.len());
|
||||
|
||||
let french_id = Language::read_id_from_code(&conn, "fr").unwrap();
|
||||
let language_form_fr = LocalUserLanguageForm {
|
||||
local_user_id,
|
||||
language_id: french_id,
|
||||
};
|
||||
LocalUserLanguage::update_user_languages(
|
||||
&conn,
|
||||
vec![language_form_fr.clone()],
|
||||
local_user_id,
|
||||
)
|
||||
.unwrap();
|
||||
LocalUserLanguage::update_user_languages(&conn, Some(vec![french_id]), local_user_id).unwrap();
|
||||
|
||||
let post_listing_french = PostQueryBuilder::create(&conn)
|
||||
.sort(SortType::New)
|
||||
|
@ -929,13 +923,9 @@ mod tests {
|
|||
assert_eq!(french_id, post_listing_french[0].post.language_id);
|
||||
|
||||
let undetermined_id = Language::read_id_from_code(&conn, "und").unwrap();
|
||||
let language_form_und = LocalUserLanguageForm {
|
||||
local_user_id,
|
||||
language_id: undetermined_id,
|
||||
};
|
||||
LocalUserLanguage::update_user_languages(
|
||||
&conn,
|
||||
vec![language_form_fr, language_form_und],
|
||||
Some(vec![french_id, undetermined_id]),
|
||||
local_user_id,
|
||||
)
|
||||
.unwrap();
|
||||
|
|
Loading…
Reference in a new issue