Show hidden comments if the logged in user replied to it in the chain

This commit is contained in:
David Hoppenbrouwers
2022-10-12 22:16:08 +02:00
parent 8e54c95c40
commit e066a7c91e

19
main.py
View File

@@ -656,15 +656,28 @@ def create_comment_tree(comments, user):
# Collect comments first, then build the tree in case we encounter a child before a parent # Collect comments first, then build the tree in case we encounter a child before a parent
comment_map = { v[0]: Comment(*v) for v in comments } comment_map = { v[0]: Comment(*v) for v in comments }
root = [] root = []
# We should keep showing hidden comments if the user replied to them, directly or indirectly.
# To do that, keep track of user comments, then walk up the tree and insert hidden comments.
user_comments = []
# Build tree # Build tree
for comment in comment_map.values(): def insert(comment):
if comment.hidden and not user.is_moderator():
continue
parent = comment_map.get(comment.parent_id) parent = comment_map.get(comment.parent_id)
if parent is not None: if parent is not None:
parent.children.append(comment) parent.children.append(comment)
else: else:
root.append(comment) root.append(comment)
for comment in comment_map.values():
if comment.hidden and (not user or not user.is_moderator()):
continue
insert(comment)
if user and (comment.author_id == user.id and not user.is_moderator()):
user_comments.append(comment)
# Insert replied-to hidden comments
for c in user_comments:
while c is not None:
if c.hidden:
insert(c)
c = comment_map.get(c.parent_id)
# Sort each comment based on create time # Sort each comment based on create time
def sort_time(l): def sort_time(l):
l.sort(key=lambda c: c.modify_time, reverse=True) l.sort(key=lambda c: c.modify_time, reverse=True)