Merge pull request #1613 from bookwyrm-social/list-not-loading

Use a redis cache to store lists for user
This commit is contained in:
Mouse Reeve
2022-01-08 13:38:20 -08:00
committed by GitHub
108 changed files with 1044 additions and 204 deletions

View File

@ -29,7 +29,9 @@ class Feed(View):
filters_applied = False
form = forms.FeedStatusTypesForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
# workaround to avoid broadcasting this change
user = form.save(commit=False)
user.save(broadcast=False, update_fields=["feed_status_types"])
filters_applied = True
return self.get(request, tab, filters_applied)

View File

@ -5,7 +5,7 @@ from urllib.parse import urlencode
from django.contrib.auth.decorators import login_required
from django.core.paginator import Paginator
from django.db import IntegrityError, transaction
from django.db.models import Avg, Count, DecimalField, Q, Max
from django.db.models import Avg, DecimalField, Q, Max
from django.db.models.functions import Coalesce
from django.http import HttpResponseBadRequest, HttpResponse, Http404
from django.shortcuts import get_object_or_404, redirect
@ -18,6 +18,7 @@ from django.views.decorators.clickjacking import xframe_options_exempt
from bookwyrm import book_search, forms, models
from bookwyrm.activitypub import ActivitypubResponse
from bookwyrm.lists_stream import ListsStream
from bookwyrm.settings import PAGE_LENGTH
from .helpers import is_api_request
from .helpers import get_user_from_username
@ -29,18 +30,7 @@ class Lists(View):
def get(self, request):
"""display a book list"""
# hide lists with no approved books
lists = (
models.List.privacy_filter(
request.user, privacy_levels=["public", "followers"]
)
.annotate(item_count=Count("listitem", filter=Q(listitem__approved=True)))
.filter(item_count__gt=0)
.select_related("user")
.prefetch_related("listitem_set")
.order_by("-updated_date")
.distinct()
)
lists = ListsStream().get_list_stream(request.user)
paginated = Paginator(lists, 12)
data = {
"lists": paginated.get_page(request.GET.get("page")),

View File

@ -1,6 +1,6 @@
""" endpoints for getting updates about activity """
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.http import Http404, JsonResponse
from bookwyrm import activitystreams
@ -21,7 +21,7 @@ def get_unread_status_count(request, stream="home"):
"""any unread statuses for this feed?"""
stream = activitystreams.streams.get(stream)
if not stream:
return JsonResponse({})
raise Http404
return JsonResponse(
{
"count": stream.get_unread_count(request.user),