From c7e45ac3ec308a642e835d26842cca8a082b79f3 Mon Sep 17 00:00:00 2001 From: Petitminion Date: Sun, 5 Oct 2025 16:41:17 +0200 Subject: [PATCH] centralized follow library fetch --- api/funkwhale_api/federation/models.py | 33 +++++++++++++++++---- api/funkwhale_api/federation/serializers.py | 12 +------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/api/funkwhale_api/federation/models.py b/api/funkwhale_api/federation/models.py index 48ded6cad..429cc964f 100644 --- a/api/funkwhale_api/federation/models.py +++ b/api/funkwhale_api/federation/models.py @@ -624,17 +624,40 @@ def set_approved_updated(sender, instance, update_fields, **kwargs): @receiver(post_save, sender=LibraryFollow) +@receiver(post_save, sender=Follow) def update_denormalization_follow_approved(sender, instance, created, **kwargs): from funkwhale_api.music import models as music_models updated = getattr(instance, "_approved_updated", False) if (created or updated) and instance.actor.is_local: - music_models.TrackActor.create_entries( - instance.target, - actor_ids=[instance.actor.pk], - delete_existing=not instance.approved, - ) + if isinstance(instance, LibraryFollow): + music_models.TrackActor.create_entries( + instance.target, + actor_ids=[instance.actor.pk], + delete_existing=not instance.approved, + ) + elif isinstance(instance, Follow): + # we fetch the remote actor's libraries to make the uploads available locally + + builtin_lib = federation_utils.get_or_create_builtin_actor_library( + instance.target, privacy_level="everyone" + ) + followers_builtin_lib = ( + federation_utils.get_or_create_builtin_actor_library( + instance.target, privacy_level="followers" + ) + ) + music_models.TrackActor.create_entries( + builtin_lib, + actor_ids=[instance.actor.pk], + delete_existing=not instance.approved, + ) + music_models.TrackActor.create_entries( + followers_builtin_lib, + actor_ids=[instance.actor.pk], + delete_existing=not instance.approved, + ) @receiver(post_delete, sender=LibraryFollow) diff --git a/api/funkwhale_api/federation/serializers.py b/api/funkwhale_api/federation/serializers.py index 63bc222ee..1287217b8 100644 --- a/api/funkwhale_api/federation/serializers.py +++ b/api/funkwhale_api/federation/serializers.py @@ -774,17 +774,7 @@ class AcceptFollowSerializer(FollowActionSerializer): follow.save() if follow.target._meta.label == "music.Library": follow.target.schedule_scan(actor=follow.actor) - if ( - follow.target._meta.label == "federation.Actor" - and not follow.target.is_local - ): - # we fetch the remote actor's libraries to make the uploads available locally - utils.get_or_create_builtin_actor_library( - follow.target, privacy_level="everyone" - ) - utils.get_or_create_builtin_actor_library( - follow.target, privacy_level="followers" - ) + return follow