diff --git a/bookwyrm/suggested_users.py b/bookwyrm/suggested_users.py index 2f2b750a2..ec6e5caa8 100644 --- a/bookwyrm/suggested_users.py +++ b/bookwyrm/suggested_users.py @@ -48,7 +48,7 @@ class SuggestedUsers(RedisStore): local=True, ).exclude(following=obj) - def rerank_obj(self, obj): + def rerank_obj(self, obj, update_only=True): """ update all the instances of this user with new ranks """ pipeline = r.pipeline() for store_user in self.get_users_for_object(obj): @@ -60,7 +60,7 @@ class SuggestedUsers(RedisStore): pipeline.zadd( self.store_id(store_user), self.get_value(annotated_user), - xx=True + xx=update_only ) pipeline.execute() @@ -146,13 +146,14 @@ def add_or_remove_on_discoverability_change( sender, instance, created, raw, using, update_fields, **kwargs ): """ make a user (un)discoverable """ - if not update_fields or not "discoverable" in update_fields: - return - if created: suggested_users.rerank_user_suggestions(instance) + if not created and (not update_fields or not "discoverable" in update_fields): + return + if instance.discoverable: - suggested_users.rerank_obj(instance) + suggested_users.rerank_obj(instance, update_only=False) + elif not created and not instance.discoverable: suggested_users.remove_object_from_related_stores(instance) diff --git a/bookwyrm/views/user.py b/bookwyrm/views/user.py index aba804d8b..6cbb82ef5 100644 --- a/bookwyrm/views/user.py +++ b/bookwyrm/views/user.py @@ -181,7 +181,11 @@ def save_user_form(form): extension = form.files["avatar"].name.split(".")[-1] filename = "%s.%s" % (uuid4(), extension) user.avatar.save(filename, image, save=False) - user.save() + + updated_fields = None + if form.initial["discoverable"] != form.cleaned_data["discoverable"]: + updated_fields = ["discoverable"] + user.save(updated_fields=updated_fields) return user