From 1bb8a88b8cf05bf51682ff1c63444ceb8daa3555 Mon Sep 17 00:00:00 2001 From: Aevann Date: Mon, 2 Oct 2023 16:52:13 +0300 Subject: [PATCH] show nsfw emojis to ppl who disabled nsfw warnings --- files/classes/user.py | 2 +- files/routes/asset_submissions.py | 10 ++++------ files/routes/static.py | 25 +++++++++++++++++-------- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/files/classes/user.py b/files/classes/user.py index 6914a696f..d80cd2e53 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -283,7 +283,7 @@ class User(Base): @property @lazy def over_18(self): - return session.get('over_18', False) + return bool(session.get('over_18')) @property @lazy diff --git a/files/routes/asset_submissions.py b/files/routes/asset_submissions.py index 60cfd6b5a..df283c3ba 100644 --- a/files/routes/asset_submissions.py +++ b/files/routes/asset_submissions.py @@ -188,9 +188,8 @@ def approve_emoji(v, name): badge_grant(badge_id=113, user=author) badge_grant(badge_id=112, user=author) - if not Emoji.over_18: - cache.delete("emojis") - cache.delete(f"emoji_list_{emoji.kind}") + cache.delete(f"emojis_{emoji.over_18}") + cache.delete(f"emoji_list_{emoji.kind}_{emoji.over_18}") purge_files_in_cloudflare_cache(f"{SITE_FULL_IMAGES}/e/{emoji.name}/webp") @@ -513,9 +512,8 @@ def update_emoji(v): ) g.db.add(ma) - if not Emoji.over_18: - cache.delete("emojis") - cache.delete(f"emoji_list_{existing.kind}") + cache.delete(f"emojis_{existing.over_18}") + cache.delete(f"emoji_list_{existing.kind}_{existing.over_18}") return {"message": f"'{name}' updated successfully!"} diff --git a/files/routes/static.py b/files/routes/static.py index de5666019..504acbe00 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -42,10 +42,15 @@ def reddit_post(subreddit, v, path): return redirect(f'https://{reddit}/{post_id}') -@cache.cached(make_cache_key=lambda kind:f"emoji_list_{kind}") -def get_emoji_list(kind): +@cache.cached(make_cache_key=lambda kind, over_18:f"emoji_list_{kind}_{over_18}") +def get_emoji_list(kind, over_18): + li = g.db.query(Emoji, User).join(User, Emoji.author_id == User.id).filter(Emoji.submitter_id == None, Emoji.kind == kind) + if not over_18: + li = li.filter(Emoji.over_18 == False) + li = li.order_by(Emoji.count.desc()) + emojis = [] - for emoji, author in g.db.query(Emoji, User).join(User, Emoji.author_id == User.id).filter(Emoji.submitter_id == None, Emoji.kind == kind, Emoji.over_18 == False).order_by(Emoji.count.desc()): + for emoji, author in li: emoji.author = author.username if FEATURES['ASSET_SUBMISSIONS'] else None emojis.append(emoji) return emojis @@ -60,7 +65,7 @@ def marseys_redirect(): @limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID) @auth_required def emoji_list(v, kind): - emojis = get_emoji_list(kind) + emojis = get_emoji_list(kind, v.over_18) authors = get_accounts_dict([e.author_id for e in emojis], v=v, graceful=True) if FEATURES['ASSET_SUBMISSIONS']: @@ -81,9 +86,13 @@ def emoji_list(v, kind): -@cache.cached(make_cache_key=lambda:"emojis") -def get_emojis(): - emojis = g.db.query(Emoji, User).join(User, Emoji.author_id == User.id).filter(Emoji.submitter_id == None, Emoji.over_18 == False) +@cache.cached(make_cache_key=lambda over_18:f"emojis_{over_18}") +def get_emojis(over_18): + emojis = g.db.query(Emoji, User).join(User, Emoji.author_id == User.id).filter(Emoji.submitter_id == None) + + if not over_18: + emojis = emojis.filter(Emoji.over_18 == False) + emojis1 = emojis.filter(Emoji.kind != 'Marsey Alphabet').order_by(Emoji.count.desc()).all() emojis2 = emojis.filter(Emoji.kind == 'Marsey Alphabet').order_by(func.length(Emoji.name), Emoji.name).all() emojis = emojis1 + emojis2 @@ -102,7 +111,7 @@ def get_emojis(): @limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID) @auth_required def emojis(v): - return get_emojis() + return get_emojis(v.over_18)