centralized follow library fetch

environments/review-docs-2422-qjbh7w/deployments/21465
Petitminion 2025-10-05 16:41:17 +02:00
rodzic 43c3b6815e
commit c7e45ac3ec
2 zmienionych plików z 29 dodań i 16 usunięć

Wyświetl plik

@ -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)

Wyświetl plik

@ -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