mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-28 20:31:24 +00:00
handle all logic in same fn
This commit is contained in:
parent
5a6685f5bb
commit
0474d2d0d2
5 changed files with 32 additions and 53 deletions
|
@ -18,7 +18,6 @@ use lemmy_api_common::{
|
|||
use lemmy_db_schema::{
|
||||
impls::actor_language::default_post_language,
|
||||
source::{
|
||||
actor_language::CommunityLanguage,
|
||||
comment::{Comment, CommentInsertForm, CommentLike, CommentLikeForm},
|
||||
comment_reply::{CommentReply, CommentReplyUpdateForm},
|
||||
local_site::LocalSite,
|
||||
|
@ -88,7 +87,6 @@ pub async fn create_comment(
|
|||
check_comment_depth(parent)?;
|
||||
}
|
||||
|
||||
// attempt to set default language if none was provided
|
||||
let language_id = default_post_language(
|
||||
&mut context.pool(),
|
||||
data.language_id,
|
||||
|
@ -97,9 +95,6 @@ pub async fn create_comment(
|
|||
)
|
||||
.await?;
|
||||
|
||||
CommunityLanguage::is_allowed_community_language(&mut context.pool(), language_id, community_id)
|
||||
.await?;
|
||||
|
||||
let comment_form = CommentInsertForm {
|
||||
language_id: Some(language_id),
|
||||
..CommentInsertForm::new(local_user_view.person.id, data.post_id, content.clone())
|
||||
|
|
|
@ -13,8 +13,8 @@ use lemmy_api_common::{
|
|||
},
|
||||
};
|
||||
use lemmy_db_schema::{
|
||||
impls::actor_language::default_post_language,
|
||||
source::{
|
||||
actor_language::CommunityLanguage,
|
||||
comment::{Comment, CommentUpdateForm},
|
||||
local_site::LocalSite,
|
||||
},
|
||||
|
@ -55,19 +55,13 @@ pub async fn update_comment(
|
|||
Err(LemmyErrorType::NoCommentEditAllowed)?
|
||||
}
|
||||
|
||||
let language_id = default_post_language(
|
||||
&mut context.pool(),
|
||||
data.language_id,
|
||||
community_id,
|
||||
local_user_view.local_user.id,
|
||||
)
|
||||
.await?;
|
||||
CommunityLanguage::is_allowed_community_language(
|
||||
&mut context.pool(),
|
||||
language_id,
|
||||
orig_comment.community.id,
|
||||
)
|
||||
.await?;
|
||||
let language_id = default_post_language(
|
||||
&mut context.pool(),
|
||||
data.language_id,
|
||||
orig_comment.community.id,
|
||||
local_user_view.local_user.id,
|
||||
)
|
||||
.await?;
|
||||
|
||||
let slur_regex = local_site_to_slur_regex(&local_site);
|
||||
let url_blocklist = get_url_blocklist(&context).await?;
|
||||
|
@ -79,7 +73,7 @@ pub async fn update_comment(
|
|||
let comment_id = data.comment_id;
|
||||
let form = CommentUpdateForm {
|
||||
content,
|
||||
language_id: data.language_id,
|
||||
language_id: Some(language_id),
|
||||
updated: Some(Some(naive_now())),
|
||||
..Default::default()
|
||||
};
|
||||
|
|
|
@ -19,7 +19,6 @@ use lemmy_api_common::{
|
|||
use lemmy_db_schema::{
|
||||
impls::actor_language::default_post_language,
|
||||
source::{
|
||||
actor_language::CommunityLanguage,
|
||||
community::Community,
|
||||
local_site::LocalSite,
|
||||
post::{Post, PostInsertForm, PostLike, PostLikeForm},
|
||||
|
@ -104,7 +103,6 @@ pub async fn create_post(
|
|||
.await?;
|
||||
}
|
||||
|
||||
// attempt to set default language if none was provided
|
||||
let language_id = default_post_language(
|
||||
&mut context.pool(),
|
||||
data.language_id,
|
||||
|
@ -113,11 +111,6 @@ pub async fn create_post(
|
|||
)
|
||||
.await?;
|
||||
|
||||
// Only need to check if language is allowed in case user set it explicitly. When using default
|
||||
// language, it already only returns allowed languages.
|
||||
CommunityLanguage::is_allowed_community_language(&mut context.pool(), language_id, community_id)
|
||||
.await?;
|
||||
|
||||
let scheduled_publish_time =
|
||||
convert_published_time(data.scheduled_publish_time, &local_user_view, &context).await?;
|
||||
let post_form = PostInsertForm {
|
||||
|
|
|
@ -15,8 +15,8 @@ use lemmy_api_common::{
|
|||
},
|
||||
};
|
||||
use lemmy_db_schema::{
|
||||
impls::actor_language::default_post_language,
|
||||
source::{
|
||||
actor_language::CommunityLanguage,
|
||||
community::Community,
|
||||
local_site::LocalSite,
|
||||
post::{Post, PostUpdateForm},
|
||||
|
@ -101,19 +101,13 @@ pub async fn update_post(
|
|||
Err(LemmyErrorType::NoPostEditAllowed)?
|
||||
}
|
||||
|
||||
let language_id = default_post_language(
|
||||
&mut context.pool(),
|
||||
data.language_id,
|
||||
community_id,
|
||||
local_user_view.local_user.id,
|
||||
)
|
||||
.await?;
|
||||
CommunityLanguage::is_allowed_community_language(
|
||||
&mut context.pool(),
|
||||
language_id,
|
||||
orig_post.community_id,
|
||||
)
|
||||
.await?;
|
||||
let language_id = default_post_language(
|
||||
&mut context.pool(),
|
||||
data.language_id,
|
||||
orig_post.community_id,
|
||||
local_user_view.local_user.id,
|
||||
)
|
||||
.await?;
|
||||
|
||||
// handle changes to scheduled_publish_time
|
||||
let scheduled_publish_time = match (
|
||||
|
@ -136,7 +130,7 @@ pub async fn update_post(
|
|||
body,
|
||||
alt_text,
|
||||
nsfw: data.nsfw,
|
||||
language_id: data.language_id,
|
||||
language_id: Some(language_id),
|
||||
updated: Some(Some(naive_now())),
|
||||
scheduled_publish_time,
|
||||
..Default::default()
|
||||
|
|
|
@ -197,7 +197,7 @@ impl SiteLanguage {
|
|||
|
||||
impl CommunityLanguage {
|
||||
/// Returns true if the given language is one of configured languages for given community
|
||||
pub async fn is_allowed_community_language(
|
||||
async fn is_allowed_community_language(
|
||||
pool: &mut DbPool<'_>,
|
||||
for_language_id: LanguageId,
|
||||
for_community_id: CommunityId,
|
||||
|
@ -324,10 +324,10 @@ pub async fn default_post_language(
|
|||
language_id: Option<LanguageId>,
|
||||
community_id: CommunityId,
|
||||
local_user_id: LocalUserId,
|
||||
) -> Result<LanguageId, Error> {
|
||||
) -> LemmyResult<LanguageId> {
|
||||
use crate::schema::{community_language::dsl as cl, local_user_language::dsl as ul};
|
||||
let conn = &mut get_conn(pool).await?;
|
||||
match language_id {
|
||||
let language_id = match language_id {
|
||||
None | Some(LanguageId(0)) => {
|
||||
let mut intersection = ul::local_user_language
|
||||
.inner_join(cl::community_language.on(ul::language_id.eq(cl::language_id)))
|
||||
|
@ -338,16 +338,19 @@ pub async fn default_post_language(
|
|||
.await?;
|
||||
|
||||
if intersection.len() == 1 {
|
||||
Ok(intersection.pop().unwrap_or(UNDETERMINED_ID))
|
||||
intersection.pop().unwrap_or(UNDETERMINED_ID)
|
||||
} else if intersection.len() == 2 && intersection.contains(&UNDETERMINED_ID) {
|
||||
intersection.retain(|i| i != &UNDETERMINED_ID);
|
||||
Ok(intersection.pop().unwrap_or(UNDETERMINED_ID))
|
||||
intersection.pop().unwrap_or(UNDETERMINED_ID)
|
||||
} else {
|
||||
Ok(UNDETERMINED_ID)
|
||||
UNDETERMINED_ID
|
||||
}
|
||||
}
|
||||
Some(lid) => Ok(lid),
|
||||
}
|
||||
Some(lid) => lid,
|
||||
};
|
||||
|
||||
CommunityLanguage::is_allowed_community_language(pool, language_id, community_id).await?;
|
||||
Ok(language_id)
|
||||
}
|
||||
|
||||
/// If no language is given, set all languages
|
||||
|
@ -596,7 +599,7 @@ mod tests {
|
|||
|
||||
#[tokio::test]
|
||||
#[serial]
|
||||
async fn test_default_post_language() -> Result<(), Error> {
|
||||
async fn test_default_post_language() -> LemmyResult<()> {
|
||||
let pool = &build_db_pool_for_tests().await;
|
||||
let pool = &mut pool.into();
|
||||
let (site, instance) = create_test_site(pool).await?;
|
||||
|
@ -619,7 +622,7 @@ mod tests {
|
|||
LocalUserLanguage::update(pool, test_langs2, local_user.id).await?;
|
||||
|
||||
// no overlap in user/community languages, so defaults to undetermined
|
||||
let def1 = default_post_language(pool, community.id, local_user.id).await?;
|
||||
let def1 = default_post_language(pool, None, community.id, local_user.id).await?;
|
||||
assert_eq!(UNDETERMINED_ID, def1);
|
||||
|
||||
let ru = Language::read_id_from_code(pool, "ru").await?;
|
||||
|
@ -632,7 +635,7 @@ mod tests {
|
|||
LocalUserLanguage::update(pool, test_langs3, local_user.id).await?;
|
||||
|
||||
// this time, both have ru as common lang
|
||||
let def2 = default_post_language(pool, community.id, local_user.id).await?;
|
||||
let def2 = default_post_language(pool, None,community.id, local_user.id).await?;
|
||||
assert_eq!(ru, def2);
|
||||
|
||||
Person::delete(pool, person.id).await?;
|
||||
|
|
Loading…
Reference in a new issue