forked from MarseyWorld/MarseyWorld
refactor sorting comments
parent
e1d0269a81
commit
8ecb4582d0
|
@ -54,7 +54,7 @@ class OauthApp(Base):
|
||||||
|
|
||||||
posts = g.db.query(Comment.id).filter_by(app_id=self.id)
|
posts = g.db.query(Comment.id).filter_by(app_id=self.id)
|
||||||
|
|
||||||
posts=posts.order_by(Comment.created_utc.desc())
|
posts=posts.order_by(Comment.id.desc())
|
||||||
|
|
||||||
posts=posts.offset(100*(page-1)).limit(101)
|
posts=posts.offset(100*(page-1)).limit(101)
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,22 @@ from random import randint
|
||||||
from .votes import CommentVote
|
from .votes import CommentVote
|
||||||
from math import floor
|
from math import floor
|
||||||
|
|
||||||
|
|
||||||
|
def sort_comments(sort, comments):
|
||||||
|
|
||||||
|
if sort == 'new':
|
||||||
|
order = Comment.id.desc()
|
||||||
|
elif sort == 'old':
|
||||||
|
order = comment.id
|
||||||
|
elif sort == 'controversial':
|
||||||
|
order = (Comment.upvotes+1)/(Comment.downvotes+1) + (Comment.downvotes+1)/(Comment.upvotes+1), Comment.downvotes.desc()
|
||||||
|
elif sort == "bottom":
|
||||||
|
order = Comment.realupvotes
|
||||||
|
else:
|
||||||
|
order = Comment.realupvotes.desc()
|
||||||
|
|
||||||
|
return comments.order_by(order)
|
||||||
|
|
||||||
class Comment(Base):
|
class Comment(Base):
|
||||||
|
|
||||||
__tablename__ = "comments"
|
__tablename__ = "comments"
|
||||||
|
@ -208,26 +224,30 @@ class Comment(Base):
|
||||||
|
|
||||||
else: return g.db.get(Comment, self.parent_comment_id)
|
else: return g.db.get(Comment, self.parent_comment_id)
|
||||||
|
|
||||||
@property
|
|
||||||
@lazy
|
@lazy
|
||||||
def parent_fullname(self):
|
def parent_fullname(self):
|
||||||
if self.parent_comment_id: return f"t3_{self.parent_comment_id}"
|
if self.parent_comment_id: return f"t3_{self.parent_comment_id}"
|
||||||
elif self.parent_submission: return f"t2_{self.parent_submission}"
|
elif self.parent_submission: return f"t2_{self.parent_submission}"
|
||||||
|
|
||||||
@property
|
@lazy
|
||||||
def replies(self):
|
def replies(self, sort):
|
||||||
if self.replies2 != None: return [x for x in self.replies2 if not x.author.shadowbanned]
|
if self.replies2 != None: return [x for x in self.replies2 if not x.author.shadowbanned]
|
||||||
if not self.parent_submission:
|
if not self.parent_submission:
|
||||||
return [x for x in self.child_comments.order_by(Comment.id) if not x.author.shadowbanned]
|
return [x for x in self.child_comments.order_by(Comment.id) if not x.author.shadowbanned]
|
||||||
return [x for x in self.child_comments.filter(Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID))).order_by(Comment.realupvotes.desc()) if not x.author.shadowbanned]
|
|
||||||
|
comments = self.child_comments.filter(Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)))
|
||||||
|
comments = sort_comments(sort, comments)
|
||||||
|
return [x for x in comments if not x.author.shadowbanned]
|
||||||
|
|
||||||
|
|
||||||
@property
|
@lazy
|
||||||
def replies3(self):
|
def replies3(self, sort):
|
||||||
if self.replies2 != None: return self.replies2
|
if self.replies2 != None: return self.replies2
|
||||||
if not self.parent_submission:
|
if not self.parent_submission:
|
||||||
return self.child_comments.order_by(Comment.id).all()
|
return self.child_comments.order_by(Comment.id).all()
|
||||||
return self.child_comments.filter(Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID))).order_by(Comment.realupvotes.desc()).all()
|
|
||||||
|
comments = self.child_comments.filter(Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)))
|
||||||
|
return sort_comments(sort, comments)
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -718,7 +718,7 @@ class User(Base):
|
||||||
if self.admin_level < 2:
|
if self.admin_level < 2:
|
||||||
comments = comments.filter(Comment.author_id.notin_(self.userblocks))
|
comments = comments.filter(Comment.author_id.notin_(self.userblocks))
|
||||||
|
|
||||||
return [x[0] for x in comments.order_by(Comment.created_utc.desc()).offset(25 * (page - 1)).all()]
|
return [x[0] for x in comments.order_by(Comment.id.desc()).offset(25 * (page - 1)).all()]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@lazy
|
@lazy
|
||||||
|
|
|
@ -519,16 +519,7 @@ def comment_idlist(page=1, v=None, nsfw=False, sort="new", t="all", gt=0, lt=0,
|
||||||
cutoff = 0
|
cutoff = 0
|
||||||
comments = comments.filter(Comment.created_utc >= cutoff)
|
comments = comments.filter(Comment.created_utc >= cutoff)
|
||||||
|
|
||||||
if sort == "new":
|
comments = sort_comments(sort, comments)
|
||||||
comments = comments.order_by(Comment.created_utc.desc())
|
|
||||||
elif sort == "old":
|
|
||||||
comments = comments.order_by(Comment.created_utc)
|
|
||||||
elif sort == "controversial":
|
|
||||||
comments = comments.order_by((Comment.upvotes+1)/(Comment.downvotes+1) + (Comment.downvotes+1)/(Comment.upvotes+1), Comment.downvotes.desc())
|
|
||||||
elif sort == "top":
|
|
||||||
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
|
||||||
elif sort == "bottom":
|
|
||||||
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
|
|
||||||
|
|
||||||
comments = comments.offset(25 * (page - 1)).limit(26).all()
|
comments = comments.offset(25 * (page - 1)).limit(26).all()
|
||||||
return [x[0] for x in comments]
|
return [x[0] for x in comments]
|
||||||
|
|
|
@ -195,16 +195,7 @@ def post_id(pid, anything=None, v=None, sub=None):
|
||||||
|
|
||||||
comments = comments.filter(Comment.level == 1, Comment.stickied == None)
|
comments = comments.filter(Comment.level == 1, Comment.stickied == None)
|
||||||
|
|
||||||
if sort == "new":
|
comments = sort_comments(sort, comments)
|
||||||
comments = comments.order_by(Comment.created_utc.desc())
|
|
||||||
elif sort == "old":
|
|
||||||
comments = comments.order_by(Comment.created_utc)
|
|
||||||
elif sort == "controversial":
|
|
||||||
comments = comments.order_by((Comment.upvotes+1)/(Comment.downvotes+1) + (Comment.downvotes+1)/(Comment.upvotes+1), Comment.downvotes.desc())
|
|
||||||
elif sort == "top":
|
|
||||||
comments = comments.order_by(Comment.realupvotes.desc())
|
|
||||||
elif sort == "bottom":
|
|
||||||
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
|
|
||||||
|
|
||||||
first = [c[0] for c in comments.filter(or_(and_(Comment.slots_result == None, Comment.blackjack_result == None, Comment.wordle_result == None), func.length(Comment.body_html) > 100)).all()]
|
first = [c[0] for c in comments.filter(or_(and_(Comment.slots_result == None, Comment.blackjack_result == None, Comment.wordle_result == None), func.length(Comment.body_html) > 100)).all()]
|
||||||
second = [c[0] for c in comments.filter(or_(Comment.slots_result != None, Comment.blackjack_result != None, Comment.wordle_result != None), func.length(Comment.body_html) <= 100).all()]
|
second = [c[0] for c in comments.filter(or_(Comment.slots_result != None, Comment.blackjack_result != None, Comment.wordle_result != None), func.length(Comment.body_html) <= 100).all()]
|
||||||
|
@ -214,16 +205,7 @@ def post_id(pid, anything=None, v=None, sub=None):
|
||||||
|
|
||||||
comments = g.db.query(Comment).join(User, User.id == Comment.author_id).filter(User.shadowbanned == None, Comment.parent_submission == post.id, Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)), Comment.level == 1, Comment.stickied == None)
|
comments = g.db.query(Comment).join(User, User.id == Comment.author_id).filter(User.shadowbanned == None, Comment.parent_submission == post.id, Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)), Comment.level == 1, Comment.stickied == None)
|
||||||
|
|
||||||
if sort == "new":
|
comments = sort_comments(sort, comments)
|
||||||
comments = comments.order_by(Comment.created_utc.desc())
|
|
||||||
elif sort == "old":
|
|
||||||
comments = comments.order_by(Comment.created_utc)
|
|
||||||
elif sort == "controversial":
|
|
||||||
comments = comments.order_by((Comment.upvotes+1)/(Comment.downvotes+1) + (Comment.downvotes+1)/(Comment.upvotes+1), Comment.downvotes.desc())
|
|
||||||
elif sort == "top":
|
|
||||||
comments = comments.order_by(Comment.realupvotes.desc())
|
|
||||||
elif sort == "bottom":
|
|
||||||
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
|
|
||||||
|
|
||||||
first = comments.filter(or_(and_(Comment.slots_result == None, Comment.blackjack_result == None, Comment.wordle_result == None), func.length(Comment.body_html) > 100)).all()
|
first = comments.filter(or_(and_(Comment.slots_result == None, Comment.blackjack_result == None, Comment.wordle_result == None), func.length(Comment.body_html) > 100)).all()
|
||||||
second = comments.filter(or_(Comment.slots_result != None, Comment.blackjack_result != None, Comment.wordle_result != None), func.length(Comment.body_html) <= 100).all()
|
second = comments.filter(or_(Comment.slots_result != None, Comment.blackjack_result != None, Comment.wordle_result != None), func.length(Comment.body_html) <= 100).all()
|
||||||
|
@ -324,16 +306,7 @@ def viewmore(v, pid, sort, offset):
|
||||||
|
|
||||||
comments = comments.filter(Comment.level == 1)
|
comments = comments.filter(Comment.level == 1)
|
||||||
|
|
||||||
if sort == "new":
|
comments = sort_comments(sort, comments)
|
||||||
comments = comments.order_by(Comment.created_utc.desc())
|
|
||||||
elif sort == "old":
|
|
||||||
comments = comments.order_by(Comment.created_utc)
|
|
||||||
elif sort == "controversial":
|
|
||||||
comments = comments.order_by((Comment.upvotes+1)/(Comment.downvotes+1) + (Comment.downvotes+1)/(Comment.upvotes+1), Comment.downvotes.desc())
|
|
||||||
elif sort == "top":
|
|
||||||
comments = comments.order_by(Comment.realupvotes.desc())
|
|
||||||
elif sort == "bottom":
|
|
||||||
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
|
|
||||||
|
|
||||||
first = [c[0] for c in comments.filter(or_(and_(Comment.slots_result == None, Comment.blackjack_result == None, Comment.wordle_result == None), func.length(Comment.body_html) > 100)).all()]
|
first = [c[0] for c in comments.filter(or_(and_(Comment.slots_result == None, Comment.blackjack_result == None, Comment.wordle_result == None), func.length(Comment.body_html) > 100)).all()]
|
||||||
second = [c[0] for c in comments.filter(or_(Comment.slots_result != None, Comment.blackjack_result != None, Comment.wordle_result != None), func.length(Comment.body_html) <= 100).all()]
|
second = [c[0] for c in comments.filter(or_(Comment.slots_result != None, Comment.blackjack_result != None, Comment.wordle_result != None), func.length(Comment.body_html) <= 100).all()]
|
||||||
|
@ -341,16 +314,7 @@ def viewmore(v, pid, sort, offset):
|
||||||
else:
|
else:
|
||||||
comments = g.db.query(Comment).join(User, User.id == Comment.author_id).filter(User.shadowbanned == None, Comment.parent_submission == pid, Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)), Comment.level == 1, Comment.stickied == None, Comment.id.notin_(ids))
|
comments = g.db.query(Comment).join(User, User.id == Comment.author_id).filter(User.shadowbanned == None, Comment.parent_submission == pid, Comment.author_id.notin_((AUTOPOLLER_ID, AUTOBETTER_ID, AUTOCHOICE_ID)), Comment.level == 1, Comment.stickied == None, Comment.id.notin_(ids))
|
||||||
|
|
||||||
if sort == "new":
|
comments = sort_comments(sort, comments)
|
||||||
comments = comments.order_by(Comment.created_utc.desc())
|
|
||||||
elif sort == "old":
|
|
||||||
comments = comments.order_by(Comment.created_utc)
|
|
||||||
elif sort == "controversial":
|
|
||||||
comments = comments.order_by((Comment.upvotes+1)/(Comment.downvotes+1) + (Comment.downvotes+1)/(Comment.upvotes+1), Comment.downvotes.desc())
|
|
||||||
elif sort == "top":
|
|
||||||
comments = comments.order_by(Comment.realupvotes.desc())
|
|
||||||
elif sort == "bottom":
|
|
||||||
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
|
|
||||||
|
|
||||||
first = comments.filter(or_(and_(Comment.slots_result == None, Comment.blackjack_result == None, Comment.wordle_result == None), func.length(Comment.body_html) > 100)).all()
|
first = comments.filter(or_(and_(Comment.slots_result == None, Comment.blackjack_result == None, Comment.wordle_result == None), func.length(Comment.body_html) > 100)).all()
|
||||||
second = comments.filter(or_(Comment.slots_result != None, Comment.blackjack_result != None, Comment.wordle_result != None), func.length(Comment.body_html) <= 100).all()
|
second = comments.filter(or_(Comment.slots_result != None, Comment.blackjack_result != None, Comment.wordle_result != None), func.length(Comment.body_html) <= 100).all()
|
||||||
|
|
|
@ -240,16 +240,7 @@ def searchcomments(v):
|
||||||
comments = comments.filter(Comment.parent_submission.notin_(club))
|
comments = comments.filter(Comment.parent_submission.notin_(club))
|
||||||
|
|
||||||
|
|
||||||
if sort == "new":
|
comments = sort_comments(sort, comments)
|
||||||
comments = comments.order_by(Comment.created_utc.desc())
|
|
||||||
elif sort == "old":
|
|
||||||
comments = comments.order_by(Comment.created_utc)
|
|
||||||
elif sort == "controversial":
|
|
||||||
comments = comments.order_by((Comment.upvotes+1)/(Comment.downvotes+1) + (Comment.downvotes+1)/(Comment.upvotes+1), Comment.downvotes.desc())
|
|
||||||
elif sort == "top":
|
|
||||||
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
|
||||||
elif sort == "bottom":
|
|
||||||
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
|
|
||||||
|
|
||||||
total = comments.count()
|
total = comments.count()
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ def upvoters_comments(v, username, uid):
|
||||||
|
|
||||||
page = max(1, int(request.values.get("page", 1)))
|
page = max(1, int(request.values.get("page", 1)))
|
||||||
|
|
||||||
listing = g.db.query(Comment).join(CommentVote, CommentVote.comment_id==Comment.id).filter(Comment.ghost == False, Comment.is_banned == False, Comment.deleted_utc == 0, CommentVote.vote_type==1, Comment.author_id==id, CommentVote.user_id==uid).order_by(Comment.created_utc.desc()).offset(25 * (page - 1)).limit(26).all()
|
listing = g.db.query(Comment).join(CommentVote, CommentVote.comment_id==Comment.id).filter(Comment.ghost == False, Comment.is_banned == False, Comment.deleted_utc == 0, CommentVote.vote_type==1, Comment.author_id==id, CommentVote.user_id==uid).order_by(Comment.id.desc()).offset(25 * (page - 1)).limit(26).all()
|
||||||
|
|
||||||
listing = [c.id for c in listing]
|
listing = [c.id for c in listing]
|
||||||
next_exists = len(listing) > 25
|
next_exists = len(listing) > 25
|
||||||
|
@ -157,7 +157,7 @@ def downvoters_comments(v, username, uid):
|
||||||
|
|
||||||
page = max(1, int(request.values.get("page", 1)))
|
page = max(1, int(request.values.get("page", 1)))
|
||||||
|
|
||||||
listing = g.db.query(Comment).join(CommentVote, CommentVote.comment_id==Comment.id).filter(Comment.ghost == False, Comment.is_banned == False, Comment.deleted_utc == 0, CommentVote.vote_type==-1, Comment.author_id==id, CommentVote.user_id==uid).order_by(Comment.created_utc.desc()).offset(25 * (page - 1)).limit(26).all()
|
listing = g.db.query(Comment).join(CommentVote, CommentVote.comment_id==Comment.id).filter(Comment.ghost == False, Comment.is_banned == False, Comment.deleted_utc == 0, CommentVote.vote_type==-1, Comment.author_id==id, CommentVote.user_id==uid).order_by(Comment.id.desc()).offset(25 * (page - 1)).limit(26).all()
|
||||||
|
|
||||||
listing = [c.id for c in listing]
|
listing = [c.id for c in listing]
|
||||||
next_exists = len(listing) > 25
|
next_exists = len(listing) > 25
|
||||||
|
@ -202,7 +202,7 @@ def upvoting_comments(v, username, uid):
|
||||||
|
|
||||||
page = max(1, int(request.values.get("page", 1)))
|
page = max(1, int(request.values.get("page", 1)))
|
||||||
|
|
||||||
listing = g.db.query(Comment).join(CommentVote, CommentVote.comment_id==Comment.id).filter(Comment.ghost == False, Comment.is_banned == False, Comment.deleted_utc == 0, CommentVote.vote_type==1, CommentVote.user_id==id, Comment.author_id==uid).order_by(Comment.created_utc.desc()).offset(25 * (page - 1)).limit(26).all()
|
listing = g.db.query(Comment).join(CommentVote, CommentVote.comment_id==Comment.id).filter(Comment.ghost == False, Comment.is_banned == False, Comment.deleted_utc == 0, CommentVote.vote_type==1, CommentVote.user_id==id, Comment.author_id==uid).order_by(Comment.id.desc()).offset(25 * (page - 1)).limit(26).all()
|
||||||
|
|
||||||
listing = [c.id for c in listing]
|
listing = [c.id for c in listing]
|
||||||
next_exists = len(listing) > 25
|
next_exists = len(listing) > 25
|
||||||
|
@ -244,7 +244,7 @@ def downvoting_comments(v, username, uid):
|
||||||
|
|
||||||
page = max(1, int(request.values.get("page", 1)))
|
page = max(1, int(request.values.get("page", 1)))
|
||||||
|
|
||||||
listing = g.db.query(Comment).join(CommentVote, CommentVote.comment_id==Comment.id).filter(Comment.ghost == False, Comment.is_banned == False, Comment.deleted_utc == 0, CommentVote.vote_type==-1, CommentVote.user_id==id, Comment.author_id==uid).order_by(Comment.created_utc.desc()).offset(25 * (page - 1)).limit(26).all()
|
listing = g.db.query(Comment).join(CommentVote, CommentVote.comment_id==Comment.id).filter(Comment.ghost == False, Comment.is_banned == False, Comment.deleted_utc == 0, CommentVote.vote_type==-1, CommentVote.user_id==id, Comment.author_id==uid).order_by(Comment.id.desc()).offset(25 * (page - 1)).limit(26).all()
|
||||||
|
|
||||||
listing = [c.id for c in listing]
|
listing = [c.id for c in listing]
|
||||||
next_exists = len(listing) > 25
|
next_exists = len(listing) > 25
|
||||||
|
@ -1041,16 +1041,7 @@ def u_username_comments(username, v=None):
|
||||||
cutoff = 0
|
cutoff = 0
|
||||||
comments = comments.filter(Comment.created_utc >= cutoff)
|
comments = comments.filter(Comment.created_utc >= cutoff)
|
||||||
|
|
||||||
if sort == "new":
|
comments = sort_comments(sort, comments)
|
||||||
comments = comments.order_by(Comment.created_utc.desc())
|
|
||||||
elif sort == "old":
|
|
||||||
comments = comments.order_by(Comment.created_utc)
|
|
||||||
elif sort == "controversial":
|
|
||||||
comments = comments.order_by((Comment.upvotes+1)/(Comment.downvotes+1) + (Comment.downvotes+1)/(Comment.upvotes+1), Comment.downvotes.desc())
|
|
||||||
elif sort == "top":
|
|
||||||
comments = comments.order_by(Comment.downvotes - Comment.upvotes)
|
|
||||||
elif sort == "bottom":
|
|
||||||
comments = comments.order_by(Comment.upvotes - Comment.downvotes)
|
|
||||||
|
|
||||||
comments = comments.offset(25 * (page - 1)).limit(26).all()
|
comments = comments.offset(25 * (page - 1)).limit(26).all()
|
||||||
ids = [x.id for x in comments]
|
ids = [x.id for x in comments]
|
||||||
|
|
|
@ -58,9 +58,9 @@
|
||||||
{% set score=ups-downs %}
|
{% set score=ups-downs %}
|
||||||
|
|
||||||
{% if v and (v.shadowbanned or v.admin_level >= 2) %}
|
{% if v and (v.shadowbanned or v.admin_level >= 2) %}
|
||||||
{% set replies=c.replies3 %}
|
{% set replies=c.replies3(sort) %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% set replies=c.replies %}
|
{% set replies=c.replies(sort) %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if c.is_blocking or (c.is_banned or c.deleted_utc) and not (v and v.admin_level > 1) and not (v and v.id==c.author_id) %}
|
{% if c.is_blocking or (c.is_banned or c.deleted_utc) and not (v and v.admin_level > 1) and not (v and v.id==c.author_id) %}
|
||||||
|
|
Loading…
Reference in New Issue