diff --git a/files/routes/front.py b/files/routes/front.py index b134d52a5..a39cc4917 100644 --- a/files/routes/front.py +++ b/files/routes/front.py @@ -1,9 +1,13 @@ +from sqlalchemy.orm import Query + from files.helpers.wrappers import * from files.helpers.get import * from files.helpers.strings import sql_ilike_clean from files.__main__ import app, cache, limiter from files.classes.submission import Submission -from files.helpers.contentsorting import apply_time_filter, sort_objects +from files.helpers.comments import comment_filter_moderated +from files.helpers.contentsorting import \ + apply_time_filter, sort_objects, sort_comment_results defaulttimefilter = environ.get("DEFAULT_TIME_FILTER", "all").strip() @@ -384,27 +388,31 @@ def random_user(v): @app.get("/comments") @auth_required def all_comments(v): - try: page = max(int(request.values.get("page", 1)), 1) - except: page = 1 - - sort=request.values.get("sort", "new") - t=request.values.get("t", defaulttimefilter) - - try: gt=int(request.values.get("after", 0)) - except: gt=0 - - try: lt=int(request.values.get("before", 0)) - except: lt=0 - - idlist = get_comments_idlist(v=v, page=page, sort=sort, t=t, gt=gt, lt=lt) - comments = get_comments(idlist, v=v) + page = max(request.values.get("page", 1, int), 1) + sort = request.values.get("sort", "new") + time_filter = request.values.get("t", defaulttimefilter) + time_gt = request.values.get("after", 0, int) + time_lt = request.values.get("before", 0, int) + idlist = get_comments_idlist(v=v, + page=page, sort=sort, t=time_filter, gt=time_gt, lt=time_lt) next_exists = len(idlist) > 25 - idlist = idlist[:25] - if request.headers.get("Authorization"): return {"data": [x.json for x in comments]} - return render_template("home_comments.html", v=v, sort=sort, t=t, page=page, comments=comments, standalone=True, next_exists=next_exists) + def comment_tree_filter(q: Query) -> Query: + q = q.filter(Comment.id.in_(idlist)) + q = comment_filter_moderated(q, v) + q = q.options(selectinload(Comment.post)) # used for post titles + return q + + comments, _ = get_comment_trees_eager(comment_tree_filter, sort=sort, v=v) + comments = sort_comment_results(comments, sort=sort) + + if request.headers.get("Authorization"): + return {"data": [x.json for x in comments]} + return render_template("home_comments.html", v=v, + sort=sort, t=time_filter, page=page, next_exists=next_exists, + comments=comments, standalone=True) def get_comments_idlist(page=1, v=None, sort="new", t="all", gt=0, lt=0): diff --git a/files/templates/comments.html b/files/templates/comments.html index 04287175c..1ddcbd545 100644 --- a/files/templates/comments.html +++ b/files/templates/comments.html @@ -152,7 +152,7 @@ {% endif %} -{% if c.parent_comment and c.parent_comment.sentto %} +{% if not standalone and c.parent_comment and c.parent_comment.sentto %} {% set isreply = True %} {% else %} {% set isreply = False %}