Sort followers/following lists by if you follow the user

This commit is contained in:
Mouse Reeve 2021-11-15 11:27:27 -08:00
parent 054a85b0dd
commit bcfe13bb4e
1 changed files with 15 additions and 6 deletions

View File

@ -1,6 +1,7 @@
""" non-interactive pages """ """ non-interactive pages """
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.db.models import Q, Count
from django.http import Http404 from django.http import Http404
from django.shortcuts import redirect from django.shortcuts import redirect
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
@ -105,9 +106,8 @@ class Followers(View):
if is_api_request(request): if is_api_request(request):
return ActivitypubResponse(user.to_followers_activity(**request.GET)) return ActivitypubResponse(user.to_followers_activity(**request.GET))
paginated = Paginator( followers = annotate_if_follows(request.user, user.followers)
user.followers.order_by("-created_date").all(), PAGE_LENGTH paginated = Paginator(followers.all(), PAGE_LENGTH)
)
data = { data = {
"user": user, "user": user,
"is_self": request.user.id == user.id, "is_self": request.user.id == user.id,
@ -126,9 +126,8 @@ class Following(View):
if is_api_request(request): if is_api_request(request):
return ActivitypubResponse(user.to_following_activity(**request.GET)) return ActivitypubResponse(user.to_following_activity(**request.GET))
paginated = Paginator( following = annotate_if_follows(request.user, user.following)
user.following.order_by("-created_date").all(), PAGE_LENGTH paginated = Paginator(following.all(), PAGE_LENGTH)
)
data = { data = {
"user": user, "user": user,
"is_self": request.user.id == user.id, "is_self": request.user.id == user.id,
@ -137,6 +136,16 @@ class Following(View):
return TemplateResponse(request, "user/relationships/following.html", data) return TemplateResponse(request, "user/relationships/following.html", data)
def annotate_if_follows(user, queryset):
"""Sort a list of users by if you follow them"""
if not user.is_authenticated:
return queryset.order_by("-created_date")
return queryset.annotate(
request_user_follows=Count("followers", filter=Q(followers=user))
).order_by("-request_user_follows", "-created_date")
class Groups(View): class Groups(View):
"""list of user's groups view""" """list of user's groups view"""