Implement 'posts hidden because of NSFW'. (Resolves #159) (#619)

This commit is contained in:
Daniel Valentine 2022-11-07 20:54:49 -07:00 committed by GitHub
parent 5c366e14a3
commit 465d9b7ba7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 30 additions and 9 deletions

View File

@ -46,11 +46,7 @@ pub async fn canonical_path(path: String) -> Result<Option<String>, String> {
res res
.headers() .headers()
.get(header::LOCATION) .get(header::LOCATION)
.map(|val| percent_encode(val.as_bytes(), CONTROLS) .map(|val| percent_encode(val.as_bytes(), CONTROLS).to_string().trim_start_matches(REDDIT_URL_BASE).to_string()),
.to_string()
.trim_start_matches(REDDIT_URL_BASE)
.to_string()
),
) )
} }

View File

@ -42,6 +42,8 @@ struct SearchTemplate {
/// Whether all fetched posts are filtered (to differentiate between no posts fetched in the first place, /// Whether all fetched posts are filtered (to differentiate between no posts fetched in the first place,
/// and all fetched posts being filtered). /// and all fetched posts being filtered).
all_posts_filtered: bool, all_posts_filtered: bool,
/// Whether all posts were hidden because they are NSFW (and user has disabled show NSFW)
all_posts_hidden_nsfw: bool,
} }
// SERVICES // SERVICES
@ -100,12 +102,13 @@ pub async fn find(req: Request<Body>) -> Result<Response<Body>, String> {
url, url,
is_filtered: true, is_filtered: true,
all_posts_filtered: false, all_posts_filtered: false,
all_posts_hidden_nsfw: false,
}) })
} else { } else {
match Post::fetch(&path, quarantined).await { match Post::fetch(&path, quarantined).await {
Ok((mut posts, after)) => { Ok((mut posts, after)) => {
let all_posts_filtered = filter_posts(&mut posts, &filters); let all_posts_filtered = filter_posts(&mut posts, &filters);
let all_posts_hidden_nsfw = posts.iter().all(|p| p.flags.nsfw) && setting(&req, "show_nsfw") != "on";
template(SearchTemplate { template(SearchTemplate {
posts, posts,
subreddits, subreddits,
@ -123,6 +126,7 @@ pub async fn find(req: Request<Body>) -> Result<Response<Body>, String> {
url, url,
is_filtered: false, is_filtered: false,
all_posts_filtered, all_posts_filtered,
all_posts_hidden_nsfw,
}) })
} }
Err(msg) => { Err(msg) => {

View File

@ -24,6 +24,8 @@ struct SubredditTemplate {
/// Whether all fetched posts are filtered (to differentiate between no posts fetched in the first place, /// Whether all fetched posts are filtered (to differentiate between no posts fetched in the first place,
/// and all fetched posts being filtered). /// and all fetched posts being filtered).
all_posts_filtered: bool, all_posts_filtered: bool,
/// Whether all posts were hidden because they are NSFW (and user has disabled show NSFW)
all_posts_hidden_nsfw: bool,
} }
#[derive(Template)] #[derive(Template)]
@ -111,12 +113,13 @@ pub async fn community(req: Request<Body>) -> Result<Response<Body>, String> {
redirect_url, redirect_url,
is_filtered: true, is_filtered: true,
all_posts_filtered: false, all_posts_filtered: false,
all_posts_hidden_nsfw: false,
}) })
} else { } else {
match Post::fetch(&path, quarantined).await { match Post::fetch(&path, quarantined).await {
Ok((mut posts, after)) => { Ok((mut posts, after)) => {
let all_posts_filtered = filter_posts(&mut posts, &filters); let all_posts_filtered = filter_posts(&mut posts, &filters);
let all_posts_hidden_nsfw = posts.iter().all(|p| p.flags.nsfw) && setting(&req, "show_nsfw") != "on";
template(SubredditTemplate { template(SubredditTemplate {
sub, sub,
posts, posts,
@ -127,6 +130,7 @@ pub async fn community(req: Request<Body>) -> Result<Response<Body>, String> {
redirect_url, redirect_url,
is_filtered: false, is_filtered: false,
all_posts_filtered, all_posts_filtered,
all_posts_hidden_nsfw,
}) })
} }
Err(msg) => match msg.as_str() { Err(msg) => match msg.as_str() {

View File

@ -1,7 +1,7 @@
// CRATES // CRATES
use crate::client::json; use crate::client::json;
use crate::server::RequestExt; use crate::server::RequestExt;
use crate::utils::{error, filter_posts, format_url, get_filters, param, template, Post, Preferences, User}; use crate::utils::{error, filter_posts, format_url, get_filters, param, setting, template, Post, Preferences, User};
use askama::Template; use askama::Template;
use hyper::{Body, Request, Response}; use hyper::{Body, Request, Response};
use time::{macros::format_description, OffsetDateTime}; use time::{macros::format_description, OffsetDateTime};
@ -24,6 +24,8 @@ struct UserTemplate {
/// Whether all fetched posts are filtered (to differentiate between no posts fetched in the first place, /// Whether all fetched posts are filtered (to differentiate between no posts fetched in the first place,
/// and all fetched posts being filtered). /// and all fetched posts being filtered).
all_posts_filtered: bool, all_posts_filtered: bool,
/// Whether all posts were hidden because they are NSFW (and user has disabled show NSFW)
all_posts_hidden_nsfw: bool,
} }
// FUNCTIONS // FUNCTIONS
@ -58,13 +60,14 @@ pub async fn profile(req: Request<Body>) -> Result<Response<Body>, String> {
redirect_url, redirect_url,
is_filtered: true, is_filtered: true,
all_posts_filtered: false, all_posts_filtered: false,
all_posts_hidden_nsfw: false,
}) })
} else { } else {
// Request user posts/comments from Reddit // Request user posts/comments from Reddit
match Post::fetch(&path, false).await { match Post::fetch(&path, false).await {
Ok((mut posts, after)) => { Ok((mut posts, after)) => {
let all_posts_filtered = filter_posts(&mut posts, &filters); let all_posts_filtered = filter_posts(&mut posts, &filters);
let all_posts_hidden_nsfw = posts.iter().all(|p| p.flags.nsfw) && setting(&req, "show_nsfw") != "on";
template(UserTemplate { template(UserTemplate {
user, user,
posts, posts,
@ -76,6 +79,7 @@ pub async fn profile(req: Request<Body>) -> Result<Response<Body>, String> {
redirect_url, redirect_url,
is_filtered: false, is_filtered: false,
all_posts_filtered, all_posts_filtered,
all_posts_hidden_nsfw,
}) })
} }
// If there is an error show error page // If there is an error show error page

View File

@ -56,6 +56,11 @@
</div> </div>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if all_posts_hidden_nsfw %}
<center>All posts are hidden because they are NSFW. Enable "Show NSFW posts" in settings to view.</center>
{% endif %}
{% if all_posts_filtered %} {% if all_posts_filtered %}
<center>(All content on this page has been filtered)</center> <center>(All content on this page has been filtered)</center>
{% else if is_filtered %} {% else if is_filtered %}

View File

@ -46,6 +46,10 @@
</form> </form>
{% endif %} {% endif %}
{% if all_posts_hidden_nsfw %}
<center>All posts are hidden because they are NSFW. Enable "Show NSFW posts" in settings to view.</center>
{% endif %}
{% if all_posts_filtered %} {% if all_posts_filtered %}
<center>(All content on this page has been filtered)</center> <center>(All content on this page has been filtered)</center>
{% else %} {% else %}

View File

@ -32,6 +32,10 @@
</button> </button>
</form> </form>
{% if all_posts_hidden_nsfw %}
<center>All posts are hidden because they are NSFW. Enable "Show NSFW posts" in settings to view.</center>
{% endif %}
{% if all_posts_filtered %} {% if all_posts_filtered %}
<center>(All content on this page has been filtered)</center> <center>(All content on this page has been filtered)</center>
{% else %} {% else %}