1
0
Fork 0

Removes get activity feed function

This commit is contained in:
Mouse Reeve 2021-03-22 19:17:46 -07:00
parent 0caea7e9ff
commit 7eb494b4ab
8 changed files with 27 additions and 174 deletions

View file

@ -19,8 +19,7 @@ from bookwyrm.activitypub import ActivitypubResponse
from bookwyrm.connectors import connector_manager
from bookwyrm.connectors.abstract_connector import get_image
from bookwyrm.settings import PAGE_LENGTH
from .helpers import is_api_request, get_activity_feed, get_edition
from .helpers import privacy_filter
from .helpers import is_api_request, get_edition, privacy_filter
# pylint: disable= no-self-use
@ -53,7 +52,7 @@ class Book(View):
# all reviews for the book
reviews = models.Review.objects.filter(book__in=work.editions.all())
reviews = get_activity_feed(request.user, queryset=reviews)
reviews = privacy_filter(request.user, reviews)
# the reviews to show
paginated = Paginator(

View file

@ -11,7 +11,7 @@ from django.views import View
from bookwyrm import activitystreams, forms, models
from bookwyrm.activitypub import ActivitypubResponse
from bookwyrm.settings import PAGE_LENGTH, STREAMS
from .helpers import get_activity_feed, get_user_from_username
from .helpers import get_user_from_username, privacy_filter
from .helpers import is_api_request, is_bookwyrm_request, object_visible_to_user
@ -58,7 +58,13 @@ class DirectMessage(View):
except ValueError:
page = 1
queryset = models.Status.objects
# remove fancy subclasses of status, keep just good ol' notes
queryset = models.Status.objects.filter(
review__isnull=True,
comment__isnull=True,
quotation__isnull=True,
generatednote__isnull=True,
)
user = None
if username:
@ -69,8 +75,8 @@ class DirectMessage(View):
if user:
queryset = queryset.filter(Q(user=user) | Q(mention_users=user))
activities = get_activity_feed(
request.user, privacy=["direct"], queryset=queryset
activities = privacy_filter(
request.user, queryset, privacy_levels=["direct"]
)
paginated = Paginator(activities, PAGE_LENGTH)

View file

@ -59,6 +59,11 @@ def object_visible_to_user(viewer, obj):
def privacy_filter(viewer, queryset, privacy_levels=None, following_only=False):
""" filter objects that have "user" and "privacy" fields """
privacy_levels = privacy_levels or ["public", "unlisted", "followers", "direct"]
# if there'd a deleted field, exclude deleted items
try:
queryset = queryset.filter(deleted=False)
except FieldError:
pass
# exclude blocks from both directions
if not viewer.is_anonymous:
@ -102,54 +107,6 @@ def privacy_filter(viewer, queryset, privacy_levels=None, following_only=False):
return queryset
def get_activity_feed(
user, privacy=None, local_only=False, following_only=False, queryset=None
):
""" get a filtered queryset of statuses """
if queryset is None:
queryset = models.Status.objects.select_subclasses()
# exclude deleted
queryset = queryset.exclude(deleted=True).order_by("-published_date")
# apply privacy filters
queryset = privacy_filter(user, queryset, privacy, following_only=following_only)
# only show dms if we only want dms
if privacy == ["direct"]:
# dms are direct statuses not related to books
queryset = queryset.filter(
review__isnull=True,
comment__isnull=True,
quotation__isnull=True,
generatednote__isnull=True,
)
else:
try:
queryset = queryset.exclude(
review__isnull=True,
comment__isnull=True,
quotation__isnull=True,
generatednote__isnull=True,
privacy="direct",
)
except FieldError:
# if we're looking at a subtype of Status (like Review)
pass
# filter for only local status
if local_only:
queryset = queryset.filter(user__local=True)
# remove statuses that have boosts in the same queryset
try:
queryset = queryset.filter(~Q(boosters__in=queryset))
except ValueError:
pass
return queryset
def handle_remote_webfinger(query):
""" webfingerin' other servers """
user = None

View file

@ -1,7 +1,7 @@
""" serialize user's posts in rss feed """
from django.contrib.syndication.views import Feed
from .helpers import get_activity_feed, get_user_from_username
from .helpers import get_user_from_username, privacy_filter
# pylint: disable=no-self-use, unused-argument
class RssFeed(Feed):
@ -24,10 +24,10 @@ class RssFeed(Feed):
def items(self, obj):
""" the user's activity feed """
return get_activity_feed(
return privacy_filter(
obj,
privacy=["public", "unlisted"],
queryset=obj.status_set.select_subclasses(),
obj.status_set.select_subclasses(),
privacy_levels=["public", "unlisted"],
)
def item_link(self, item):

View file

@ -16,8 +16,8 @@ from django.views import View
from bookwyrm import forms, models
from bookwyrm.activitypub import ActivitypubResponse
from bookwyrm.settings import PAGE_LENGTH
from .helpers import get_activity_feed, get_user_from_username, is_api_request
from .helpers import is_blocked, object_visible_to_user
from .helpers import get_user_from_username, is_api_request
from .helpers import is_blocked, privacy_filter, object_visible_to_user
# pylint: disable= no-self-use
@ -72,9 +72,9 @@ class User(View):
break
# user's posts
activities = get_activity_feed(
activities = privacy_filter(
request.user,
queryset=user.status_set.select_subclasses(),
user.status_set.select_subclasses(),
)
paginated = Paginator(activities, PAGE_LENGTH)
goal = models.AnnualGoal.objects.filter(