From 157c9c825b03a7c27c053fa47c34a16f715deeb1 Mon Sep 17 00:00:00 2001
From: Mouse Reeve <mousereeve@riseup.net>
Date: Mon, 19 Dec 2022 14:07:44 -0800
Subject: [PATCH] Increase priority for follow activities and lower for shelve

---
 bookwyrm/models/relationship.py | 9 ++++++---
 bookwyrm/models/shelf.py        | 9 +++++----
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/bookwyrm/models/relationship.py b/bookwyrm/models/relationship.py
index 082294c0e..c8a508117 100644
--- a/bookwyrm/models/relationship.py
+++ b/bookwyrm/models/relationship.py
@@ -4,6 +4,7 @@ from django.db import models, transaction, IntegrityError
 from django.db.models import Q
 
 from bookwyrm import activitypub
+from bookwyrm.tasks import HIGH
 from .activitypub_mixin import ActivitypubMixin, ActivityMixin
 from .activitypub_mixin import generate_activity
 from .base_model import BookWyrmModel
@@ -139,8 +140,9 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship):
             )
         super().save(*args, **kwargs)
 
+        # a local user is following a remote user
         if broadcast and self.user_subject.local and not self.user_object.local:
-            self.broadcast(self.to_activity(), self.user_subject)
+            self.broadcast(self.to_activity(), self.user_subject, queue=HIGH)
 
         if self.user_object.local:
             manually_approves = self.user_object.manually_approves_followers
@@ -157,13 +159,14 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship):
     def accept(self, broadcast_only=False):
         """turn this request into the real deal"""
         user = self.user_object
+        # broadcast when accepting a remote request
         if not self.user_subject.local:
             activity = activitypub.Accept(
                 id=self.get_accept_reject_id(status="accepts"),
                 actor=self.user_object.remote_id,
                 object=self.to_activity(),
             ).serialize()
-            self.broadcast(activity, user)
+            self.broadcast(activity, user, queue=HIGH)
         if broadcast_only:
             return
 
@@ -180,7 +183,7 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship):
                 actor=self.user_object.remote_id,
                 object=self.to_activity(),
             ).serialize()
-            self.broadcast(activity, self.user_object)
+            self.broadcast(activity, self.user_object, queue=HIGH)
 
         self.delete()
 
diff --git a/bookwyrm/models/shelf.py b/bookwyrm/models/shelf.py
index d955e8d07..026571f62 100644
--- a/bookwyrm/models/shelf.py
+++ b/bookwyrm/models/shelf.py
@@ -7,6 +7,7 @@ from django.utils import timezone
 
 from bookwyrm import activitypub
 from bookwyrm.settings import DOMAIN
+from bookwyrm.tasks import LOW
 from .activitypub_mixin import CollectionItemMixin, OrderedCollectionMixin
 from .base_model import BookWyrmModel
 from . import fields
@@ -39,9 +40,9 @@ class Shelf(OrderedCollectionMixin, BookWyrmModel):
 
     activity_serializer = activitypub.Shelf
 
-    def save(self, *args, **kwargs):
+    def save(self, *args, priority=LOW, **kwargs):
         """set the identifier"""
-        super().save(*args, **kwargs)
+        super().save(*args, priority=priority, **kwargs)
         if not self.identifier:
             self.identifier = self.get_identifier()
             super().save(*args, **kwargs, broadcast=False)
@@ -99,7 +100,7 @@ class ShelfBook(CollectionItemMixin, BookWyrmModel):
     activity_serializer = activitypub.ShelfItem
     collection_field = "shelf"
 
-    def save(self, *args, **kwargs):
+    def save(self, *args, priority=LOW, **kwargs):
         if not self.user:
             self.user = self.shelf.user
         if self.id and self.user.local:
@@ -110,7 +111,7 @@ class ShelfBook(CollectionItemMixin, BookWyrmModel):
                     for book in self.book.parent_work.editions.all()
                 ]
             )
-        super().save(*args, **kwargs)
+        super().save(*args, priority=priority, **kwargs)
 
     def delete(self, *args, **kwargs):
         if self.id and self.user.local: