Skip to content

Commit

Permalink
Tag posts and comments with language (fixes #440)
Browse files Browse the repository at this point in the history
  • Loading branch information
Nutomic committed May 18, 2022
1 parent be24642 commit 12295cd
Show file tree
Hide file tree
Showing 30 changed files with 295 additions and 108 deletions.
90 changes: 90 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 13 additions & 1 deletion crates/api/src/local_user/save_settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use lemmy_api_common::{
utils::{blocking, get_local_user_view_from_jwt, send_verification_email},
};
use lemmy_db_schema::{
newtypes::LanguageIdentifier,
source::{
local_user::{LocalUser, LocalUserForm},
person::{Person, PersonForm},
Expand Down Expand Up @@ -117,6 +118,16 @@ impl Perform for SaveUserSettings {
})
.await?
.map_err(|e| LemmyError::from_error_message(e, "user_already_exists"))?;
let mut discussion_languages: Vec<LanguageIdentifier> = data
.discussion_languages
.clone()
.into_iter()
.flatten()
.map(|l| LanguageIdentifier::new(&l))
.collect();
if discussion_languages.is_empty() {
discussion_languages = LanguageIdentifier::all_languages()
}

let local_user_form = LocalUserForm {
person_id: Some(person_id),
Expand All @@ -128,13 +139,14 @@ 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,
send_notifications_to_email: data.send_notifications_to_email,
email_verified: None,
accepted_application: None,
discussion_languages: Some(discussion_languages),
};

let local_user_res = blocking(context.pool(), move |conn| {
Expand Down
21 changes: 4 additions & 17 deletions crates/api/src/site/search.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,11 @@ impl Perform for Search {

check_private_instance(&local_user_view, context.pool()).await?;

let show_nsfw = local_user_view.as_ref().map(|t| t.local_user.show_nsfw);
let show_bot_accounts = local_user_view
.as_ref()
.map(|t| t.local_user.show_bot_accounts);
let show_read_posts = local_user_view
.as_ref()
.map(|t| t.local_user.show_read_posts);

let person_id = local_user_view.map(|u| u.person.id);
let person_id = local_user_view.as_ref().map(|u| u.person.id);

let mut posts = Vec::new();
let mut comments = Vec::new();
Expand Down Expand Up @@ -69,15 +65,12 @@ impl Perform for Search {
SearchType::Posts => {
posts = blocking(context.pool(), move |conn| {
PostQueryBuilder::create(conn)
.set_params_for_user(&local_user_view)
.sort(sort)
.show_nsfw(show_nsfw)
.show_bot_accounts(show_bot_accounts)
.show_read_posts(show_read_posts)
.listing_type(listing_type)
.community_id(community_id)
.community_actor_id(community_actor_id)
.creator_id(creator_id)
.my_person_id(person_id)
.search_term(q)
.page(page)
.limit(limit)
Expand Down Expand Up @@ -134,15 +127,12 @@ impl Perform for Search {

posts = blocking(context.pool(), move |conn| {
PostQueryBuilder::create(conn)
.set_params_for_user(&local_user_view)
.sort(sort)
.show_nsfw(show_nsfw)
.show_bot_accounts(show_bot_accounts)
.show_read_posts(show_read_posts)
.listing_type(listing_type)
.community_id(community_id)
.community_actor_id(community_actor_id_2)
.creator_id(creator_id)
.my_person_id(person_id)
.search_term(q)
.page(page)
.limit(limit)
Expand Down Expand Up @@ -206,12 +196,9 @@ impl Perform for Search {
SearchType::Url => {
posts = blocking(context.pool(), move |conn| {
PostQueryBuilder::create(conn)
.set_params_for_user(&local_user_view)
.sort(sort)
.show_nsfw(show_nsfw)
.show_bot_accounts(show_bot_accounts)
.show_read_posts(show_read_posts)
.listing_type(listing_type)
.my_person_id(person_id)
.community_id(community_id)
.community_actor_id(community_actor_id)
.creator_id(creator_id)
Expand Down
3 changes: 2 additions & 1 deletion crates/api_common/src/person.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ pub struct SaveUserSettings {
pub theme: Option<String>,
pub default_sort_type: Option<i16>,
pub default_listing_type: Option<i16>,
pub lang: Option<String>,
pub interface_language: Option<String>,
pub avatar: Option<String>,
pub banner: Option<String>,
pub display_name: Option<String>,
Expand All @@ -63,6 +63,7 @@ pub struct SaveUserSettings {
pub show_bot_accounts: Option<bool>,
pub show_read_posts: Option<bool>,
pub show_new_post_notifs: Option<bool>,
pub discussion_languages: Option<Vec<String>>,
pub auth: Sensitive<String>,
}

Expand Down
2 changes: 2 additions & 0 deletions crates/api_common/src/post.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub struct CreatePost {
pub body: Option<String>,
pub honeypot: Option<String>,
pub nsfw: Option<bool>,
pub language: Option<String>,
pub auth: Sensitive<String>,
}

Expand Down Expand Up @@ -71,6 +72,7 @@ pub struct EditPost {
pub url: Option<Url>,
pub body: Option<String>,
pub nsfw: Option<bool>,
pub language: Option<String>,
pub auth: Sensitive<String>,
}

Expand Down
14 changes: 7 additions & 7 deletions crates/api_common/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ pub async fn send_password_reset_email(
.await??;

let email = &user.local_user.email.to_owned().expect("email");
let lang = get_user_lang(user);
let lang = get_interface_language(user);
let subject = &lang.password_reset_subject(&user.person.name);
let protocol_and_hostname = settings.get_protocol_and_hostname();
let reset_link = format!("{}/password_change/{}", protocol_and_hostname, &token);
Expand All @@ -424,7 +424,7 @@ pub async fn send_verification_email(
);
blocking(pool, move |conn| EmailVerification::create(conn, &form)).await??;

let lang = get_user_lang(user);
let lang = get_interface_language(user);
let subject = lang.verify_email_subject(&settings.hostname);
let body = lang.verify_email_body(&settings.hostname, &user.person.name, verify_link);
send_email(&subject, new_email, &user.person.name, &body, settings)?;
Expand All @@ -437,14 +437,14 @@ pub fn send_email_verification_success(
settings: &Settings,
) -> Result<(), LemmyError> {
let email = &user.local_user.email.to_owned().expect("email");
let lang = get_user_lang(user);
let lang = get_interface_language(user);
let subject = &lang.email_verified_subject(&user.person.actor_id);
let body = &lang.email_verified_body();
send_email(subject, email, &user.person.name, body, settings)
}

pub fn get_user_lang(user: &LocalUserView) -> Lang {
let user_lang = LanguageId::new(user.local_user.lang.clone());
pub fn get_interface_language(user: &LocalUserView) -> Lang {
let user_lang = LanguageId::new(user.local_user.interface_language.clone());
Lang::from_language_id(&user_lang).unwrap_or_else(|| {
let en = LanguageId::new("en");
Lang::from_language_id(&en).expect("default language")
Expand All @@ -456,7 +456,7 @@ pub fn send_application_approved_email(
settings: &Settings,
) -> Result<(), LemmyError> {
let email = &user.local_user.email.to_owned().expect("email");
let lang = get_user_lang(user);
let lang = get_interface_language(user);
let subject = lang.registration_approved_subject(&user.person.actor_id);
let body = lang.registration_approved_body(&settings.hostname);
send_email(&subject, email, &user.person.name, &body, settings)
Expand All @@ -478,7 +478,7 @@ pub async fn check_registration_application(
})
.await??;
if let Some(deny_reason) = registration.deny_reason {
let lang = get_user_lang(local_user_view);
let lang = get_interface_language(local_user_view);
let registration_denied_message = format!("{}: {}", lang.registration_denied(), &deny_reason);
return Err(LemmyError::from_message(&registration_denied_message));
} else {
Expand Down
2 changes: 2 additions & 0 deletions crates/api_crud/src/post/create.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ use lemmy_apub::{
EndpointType,
};
use lemmy_db_schema::{
newtypes::LanguageIdentifier,
source::{
community::Community,
post::{Post, PostForm, PostLike, PostLikeForm},
Expand Down Expand Up @@ -103,6 +104,7 @@ impl PerformCrud for CreatePost {
embed_description,
embed_html,
thumbnail_url: pictrs_thumbnail.map(|u| u.into()),
language: data.language.as_ref().map(|l| LanguageIdentifier::new(l)),
..PostForm::default()
};

Expand Down
Loading

0 comments on commit 12295cd

Please sign in to comment.