diff --git a/bookwyrm/incoming.py b/bookwyrm/incoming.py index 5d93756f5..3581ed87b 100644 --- a/bookwyrm/incoming.py +++ b/bookwyrm/incoming.py @@ -186,16 +186,7 @@ def handle_block(activity): ''' blocking a user ''' # create "block" databse entry block = activitypub.Block(**activity).to_model(models.UserBlocks) - - # remove follow relationships - models.UserFollows.objects.filter( - Q(user_subject=block.user_subject, user_object=block.user_object) | \ - Q(user_subject=block.user_object, user_object=block.user_subject) - ).delete() - models.UserFollowRequest.objects.filter( - Q(user_subject=block.user_subject, user_object=block.user_object) | \ - Q(user_subject=block.user_object, user_object=block.user_subject) - ).delete() + # the removing relationships is handled in post-save hook in model @app.task diff --git a/bookwyrm/models/relationship.py b/bookwyrm/models/relationship.py index 9ea75a8f7..ec84d44f0 100644 --- a/bookwyrm/models/relationship.py +++ b/bookwyrm/models/relationship.py @@ -1,5 +1,7 @@ ''' defines relationships between users ''' from django.db import models +from django.db.models import Q +from django.dispatch import receiver from bookwyrm import activitypub from .base_model import ActivitypubMixin, BookWyrmModel @@ -96,3 +98,21 @@ class UserBlocks(UserRelationship): ''' prevent another user from following you and seeing your posts ''' status = 'blocks' activity_serializer = activitypub.Block + + +@receiver(models.signals.post_save, sender=UserBlocks) +#pylint: disable=unused-argument +def execute_after_save(sender, instance, created, *args, **kwargs): + ''' remove follow or follow request rels after a block is created ''' + UserFollows.objects.filter( + Q(user_subject=instance.user_subject, + user_object=instance.user_object) | \ + Q(user_subject=instance.user_object, + user_object=instance.user_subject) + ).delete() + UserFollowRequest.objects.filter( + Q(user_subject=instance.user_subject, + user_object=instance.user_object) | \ + Q(user_subject=instance.user_object, + user_object=instance.user_subject) + ).delete() diff --git a/bookwyrm/templates/snippets/user_header.html b/bookwyrm/templates/snippets/user_header.html index a528bb1ce..14216d4be 100644 --- a/bookwyrm/templates/snippets/user_header.html +++ b/bookwyrm/templates/snippets/user_header.html @@ -36,6 +36,10 @@ {% if not is_self %} {% include 'snippets/follow_button.html' with user=user %} +
{% endif %} {% if is_self and user.follower_requests.all %} diff --git a/bookwyrm/urls.py b/bookwyrm/urls.py index 4da0c0c17..bfd57d0ad 100644 --- a/bookwyrm/urls.py +++ b/bookwyrm/urls.py @@ -136,4 +136,6 @@ urlpatterns = [ re_path(r'^unfollow/?$', views.unfollow), re_path(r'^accept-follow-request/?$', views.accept_follow_request), re_path(r'^delete-follow-request/?$', views.delete_follow_request), + + re_path(r'^block/(?P