fix: respect muted phrases in reposts

This commit is contained in:
trisua 2025-06-12 23:07:24 -04:00
parent 6fcbb1fe00
commit 5844d23399
3 changed files with 103 additions and 100 deletions

View file

@ -71,16 +71,12 @@ pub async fn index_request(
{ {
Ok(l) => match data Ok(l) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone()))
data.0
.posts_muted_phrase_filter(&l, Some(&user.settings.muted)),
user.id,
&ignore_users,
&Some(user.clone()),
)
.await .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),
}, },
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 Ok(l) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(
data.0.posts_muted_phrase_filter( l,
&l,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 }, if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users, &ignore_users,
&user, &user,
) )
.await .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),
}, },
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 Ok(l) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone()))
data.0
.posts_muted_phrase_filter(&l, Some(&user.settings.muted)),
user.id,
&ignore_users,
&Some(user.clone()),
)
.await .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)),
}, },
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 Ok(l) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(
data.0.posts_muted_phrase_filter( l,
&l,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 }, if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users, &ignore_users,
&user, &user,
) )
.await .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),
}, },
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 Ok(l) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone()))
data.0
.posts_muted_phrase_filter(&l, Some(&user.settings.muted)),
user.id,
&ignore_users,
&Some(user.clone()),
)
.await .await
{ {
Ok(l) => l, Ok(l) => data
.0
.posts_muted_phrase_filter(&l, Some(&user.settings.muted)),
Err(_) => Vec::new(), Err(_) => Vec::new(),
}, },
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)),
@ -624,16 +612,12 @@ pub async fn search_request(
match data.0.get_posts_searched(12, req.page, &req.query).await { match data.0.get_posts_searched(12, req.page, &req.query).await {
Ok(l) => match data Ok(l) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(l, user.id, &ignore_users, &Some(user.clone()))
data.0
.posts_muted_phrase_filter(&l, Some(&user.settings.muted)),
user.id,
&ignore_users,
&Some(user.clone()),
)
.await .await
{ {
Ok(l) => l, Ok(l) => data
.0
.posts_muted_phrase_filter(&l, Some(&user.settings.muted)),
Err(_) => Vec::new(), Err(_) => Vec::new(),
}, },
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)),

View file

@ -245,21 +245,21 @@ pub async fn posts_request(
Ok(p) => match data Ok(p) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(
data.0.posts_muted_phrase_filter( p,
&p,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 }, if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users, &ignore_users,
&user, &user,
) )
.await .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)),
}, },
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 Ok(p) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(
data.0.posts_muted_phrase_filter( p,
&p,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 }, if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users, &ignore_users,
&user, &user,
) )
.await .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)),
}, },
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 Ok(p) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(
data.0.posts_muted_phrase_filter( p,
&p,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 }, if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users, &ignore_users,
&user, &user,
) )
.await .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)),
}, },
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 Ok(p) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(
data.0.posts_muted_phrase_filter( p,
&p,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 }, if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users, &ignore_users,
&user, &user,
) )
.await .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)),
}, },
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 Ok(p) => match data
.0 .0
.fill_posts_with_community( .fill_posts_with_community(
data.0.posts_muted_phrase_filter( p,
&p,
if let Some(ref ua) = user {
Some(&ua.settings.muted)
} else {
None
},
),
if let Some(ref ua) = user { ua.id } else { 0 }, if let Some(ref ua) = user { ua.id } else { 0 },
&ignore_users, &ignore_users,
&user, &user,
) )
.await .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)),
}, },
Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)), Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)),

View file

@ -470,15 +470,17 @@ impl DataManager {
/// Update posts which contain a muted phrase. /// Update posts which contain a muted phrase.
pub fn posts_muted_phrase_filter( pub fn posts_muted_phrase_filter(
&self, &self,
posts: &Vec<Post>, posts: &Vec<FullPost>,
muted: Option<&Vec<String>>, muted: Option<&Vec<String>>,
) -> Vec<Post> { ) -> Vec<FullPost> {
// this shit is actually ass bro it has to clone
// very useless
let muted = match muted { let muted = match muted {
Some(m) => m, Some(m) => m,
None => return posts.to_owned(), None => return posts.to_owned(),
}; };
let mut out: Vec<Post> = Vec::new(); let mut out: Vec<FullPost> = Vec::new();
for mut post in posts.clone() { for mut post in posts.clone() {
for phrase in muted { for phrase in muted {
@ -486,10 +488,27 @@ impl DataManager {
continue; continue;
} }
if post.content.to_lowercase().contains(&phrase.to_lowercase()) { if post
post.context.content_warning = "Contains muted phrase".to_string(); .0
.content
.to_lowercase()
.contains(&phrase.to_lowercase())
{
post.0.context.content_warning = "Contains muted phrase".to_string();
break; 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); out.push(post);