From 5844d2339963dd654e690afa736af00b431feea3 Mon Sep 17 00:00:00 2001 From: trisua Date: Thu, 12 Jun 2025 23:07:24 -0400 Subject: [PATCH] fix: respect muted phrases in reposts --- crates/app/src/routes/pages/misc.rs | 84 ++++++++++-------------- crates/app/src/routes/pages/profile.rs | 90 +++++++++++++------------- crates/core/src/database/posts.rs | 29 +++++++-- 3 files changed, 103 insertions(+), 100 deletions(-) diff --git a/crates/app/src/routes/pages/misc.rs b/crates/app/src/routes/pages/misc.rs index b43b9ad..122d82b 100644 --- a/crates/app/src/routes/pages/misc.rs +++ b/crates/app/src/routes/pages/misc.rs @@ -71,16 +71,12 @@ pub async fn index_request( { Ok(l) => match data .0 - .fill_posts_with_community( - data.0 - .posts_muted_phrase_filter(&l, Some(&user.settings.muted)), - user.id, - &ignore_users, - &Some(user.clone()), - ) + .fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone())) .await { - Ok(l) => l, + Ok(l) => data + .0 + .posts_muted_phrase_filter(&l, Some(&user.settings.muted)), Err(e) => return Html(render_error(e, &jar, &data, &Some(user)).await), }, Err(e) => return Html(render_error(e, &jar, &data, &Some(user)).await), @@ -109,21 +105,21 @@ pub async fn popular_request( Ok(l) => match data .0 .fill_posts_with_community( - data.0.posts_muted_phrase_filter( - &l, - if let Some(ref ua) = user { - Some(&ua.settings.muted) - } else { - None - }, - ), + l, if let Some(ref ua) = user { ua.id } else { 0 }, &ignore_users, &user, ) .await { - Ok(l) => l, + Ok(l) => data.0.posts_muted_phrase_filter( + &l, + if let Some(ref ua) = user { + Some(&ua.settings.muted) + } else { + None + }, + ), Err(e) => return Html(render_error(e, &jar, &data, &user).await), }, Err(e) => return Html(render_error(e, &jar, &data, &user).await), @@ -162,16 +158,12 @@ pub async fn following_request( { Ok(l) => match data .0 - .fill_posts_with_community( - data.0 - .posts_muted_phrase_filter(&l, Some(&user.settings.muted)), - user.id, - &ignore_users, - &Some(user.clone()), - ) + .fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone())) .await { - Ok(l) => l, + Ok(l) => data + .0 + .posts_muted_phrase_filter(&l, Some(&user.settings.muted)), Err(e) => return Err(Html(render_error(e, &jar, &data, &Some(user)).await)), }, Err(e) => return Err(Html(render_error(e, &jar, &data, &Some(user)).await)), @@ -202,21 +194,21 @@ pub async fn all_request( Ok(l) => match data .0 .fill_posts_with_community( - data.0.posts_muted_phrase_filter( - &l, - if let Some(ref ua) = user { - Some(&ua.settings.muted) - } else { - None - }, - ), + l, if let Some(ref ua) = user { ua.id } else { 0 }, &ignore_users, &user, ) .await { - Ok(l) => l, + Ok(l) => data.0.posts_muted_phrase_filter( + &l, + if let Some(ref ua) = user { + Some(&ua.settings.muted) + } else { + None + }, + ), Err(e) => return Html(render_error(e, &jar, &data, &user).await), }, Err(e) => return Html(render_error(e, &jar, &data, &user).await), @@ -606,16 +598,12 @@ pub async fn search_request( { Ok(l) => match data .0 - .fill_posts_with_community( - data.0 - .posts_muted_phrase_filter(&l, Some(&user.settings.muted)), - user.id, - &ignore_users, - &Some(user.clone()), - ) + .fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone())) .await { - Ok(l) => l, + Ok(l) => data + .0 + .posts_muted_phrase_filter(&l, Some(&user.settings.muted)), Err(_) => Vec::new(), }, Err(e) => return Err(Html(render_error(e, &jar, &data, &Some(user)).await)), @@ -624,16 +612,12 @@ pub async fn search_request( match data.0.get_posts_searched(12, req.page, &req.query).await { Ok(l) => match data .0 - .fill_posts_with_community( - data.0 - .posts_muted_phrase_filter(&l, Some(&user.settings.muted)), - user.id, - &ignore_users, - &Some(user.clone()), - ) + .fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone())) .await { - Ok(l) => l, + Ok(l) => data + .0 + .posts_muted_phrase_filter(&l, Some(&user.settings.muted)), Err(_) => Vec::new(), }, Err(e) => return Err(Html(render_error(e, &jar, &data, &Some(user)).await)), diff --git a/crates/app/src/routes/pages/profile.rs b/crates/app/src/routes/pages/profile.rs index 86b8401..ebb9857 100644 --- a/crates/app/src/routes/pages/profile.rs +++ b/crates/app/src/routes/pages/profile.rs @@ -245,21 +245,21 @@ pub async fn posts_request( Ok(p) => match data .0 .fill_posts_with_community( - data.0.posts_muted_phrase_filter( - &p, - if let Some(ref ua) = user { - Some(&ua.settings.muted) - } else { - None - }, - ), + p, if let Some(ref ua) = user { ua.id } else { 0 }, &ignore_users, &user, ) .await { - Ok(p) => p, + Ok(p) => data.0.posts_muted_phrase_filter( + &p, + if let Some(ref ua) = user { + Some(&ua.settings.muted) + } else { + None + }, + ), Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), }, Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), @@ -273,21 +273,21 @@ pub async fn posts_request( Ok(p) => match data .0 .fill_posts_with_community( - data.0.posts_muted_phrase_filter( - &p, - if let Some(ref ua) = user { - Some(&ua.settings.muted) - } else { - None - }, - ), + p, if let Some(ref ua) = user { ua.id } else { 0 }, &ignore_users, &user, ) .await { - Ok(p) => p, + Ok(p) => data.0.posts_muted_phrase_filter( + &p, + if let Some(ref ua) = user { + Some(&ua.settings.muted) + } else { + None + }, + ), Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), }, Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), @@ -299,21 +299,21 @@ pub async fn posts_request( Ok(p) => match data .0 .fill_posts_with_community( - data.0.posts_muted_phrase_filter( - &p, - if let Some(ref ua) = user { - Some(&ua.settings.muted) - } else { - None - }, - ), + p, if let Some(ref ua) = user { ua.id } else { 0 }, &ignore_users, &user, ) .await { - Ok(p) => Some(p), + Ok(p) => Some(data.0.posts_muted_phrase_filter( + &p, + if let Some(ref ua) = user { + Some(&ua.settings.muted) + } else { + None + }, + )), Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), }, Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), @@ -415,21 +415,21 @@ pub async fn replies_request( Ok(p) => match data .0 .fill_posts_with_community( - data.0.posts_muted_phrase_filter( - &p, - if let Some(ref ua) = user { - Some(&ua.settings.muted) - } else { - None - }, - ), + p, if let Some(ref ua) = user { ua.id } else { 0 }, &ignore_users, &user, ) .await { - Ok(p) => p, + Ok(p) => data.0.posts_muted_phrase_filter( + &p, + if let Some(ref ua) = user { + Some(&ua.settings.muted) + } else { + None + }, + ), Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), }, Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), @@ -528,21 +528,21 @@ pub async fn media_request( Ok(p) => match data .0 .fill_posts_with_community( - data.0.posts_muted_phrase_filter( - &p, - if let Some(ref ua) = user { - Some(&ua.settings.muted) - } else { - None - }, - ), + p, if let Some(ref ua) = user { ua.id } else { 0 }, &ignore_users, &user, ) .await { - Ok(p) => p, + Ok(p) => data.0.posts_muted_phrase_filter( + &p, + if let Some(ref ua) = user { + Some(&ua.settings.muted) + } else { + None + }, + ), Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), }, Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), diff --git a/crates/core/src/database/posts.rs b/crates/core/src/database/posts.rs index 082bddc..0f4d73c 100644 --- a/crates/core/src/database/posts.rs +++ b/crates/core/src/database/posts.rs @@ -470,15 +470,17 @@ impl DataManager { /// Update posts which contain a muted phrase. pub fn posts_muted_phrase_filter( &self, - posts: &Vec, + posts: &Vec, muted: Option<&Vec>, - ) -> Vec { + ) -> Vec { + // this shit is actually ass bro it has to clone + // very useless let muted = match muted { Some(m) => m, None => return posts.to_owned(), }; - let mut out: Vec = Vec::new(); + let mut out: Vec = Vec::new(); for mut post in posts.clone() { for phrase in muted { @@ -486,10 +488,27 @@ impl DataManager { continue; } - if post.content.to_lowercase().contains(&phrase.to_lowercase()) { - post.context.content_warning = "Contains muted phrase".to_string(); + if post + .0 + .content + .to_lowercase() + .contains(&phrase.to_lowercase()) + { + post.0.context.content_warning = "Contains muted phrase".to_string(); break; } + + if let Some(ref mut reposting) = post.3 { + if reposting + .1 + .content + .to_lowercase() + .contains(&phrase.to_lowercase()) + { + reposting.1.context.content_warning = "Contains muted phrase".to_string(); + break; + } + } } out.push(post);