diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py index 318640c884486cd7179326213d8bc3e47ccc10f9..6d3c0dffdc21c7f42e95deb1faf14e1d72d74eff 100644 --- a/api/funkwhale_api/music/models.py +++ b/api/funkwhale_api/music/models.py @@ -135,9 +135,9 @@ class ArtistQuerySet(models.QuerySet): def playable_by(self, actor, include=True): tracks = Track.objects.playable_by(actor, include) if include: - return self.filter(tracks__in=tracks) + return self.filter(tracks__in=tracks).distinct() else: - return self.exclude(tracks__in=tracks) + return self.exclude(tracks__in=tracks).distinct() class Artist(APIModelMixin): @@ -203,9 +203,9 @@ class AlbumQuerySet(models.QuerySet): def playable_by(self, actor, include=True): tracks = Track.objects.playable_by(actor, include) if include: - return self.filter(tracks__in=tracks) + return self.filter(tracks__in=tracks).distinct() else: - return self.exclude(tracks__in=tracks) + return self.exclude(tracks__in=tracks).distinct() class Album(APIModelMixin): @@ -399,9 +399,9 @@ class TrackQuerySet(models.QuerySet): def playable_by(self, actor, include=True): files = Upload.objects.playable_by(actor, include) if include: - return self.filter(uploads__in=files) + return self.filter(uploads__in=files).distinct() else: - return self.exclude(uploads__in=files) + return self.exclude(uploads__in=files).distinct() def annotate_duration(self): first_upload = Upload.objects.filter(track=models.OuterRef("pk")).order_by("pk") @@ -557,8 +557,8 @@ class UploadQuerySet(models.QuerySet): libraries = Library.objects.viewable_by(actor) if include: - return self.filter(library__in=libraries, import_status="finished") - return self.exclude(library__in=libraries, import_status="finished") + return self.filter(library__in=libraries, import_status="finished").distinct() + return self.exclude(library__in=libraries, import_status="finished").distinct() def local(self, include=True): return self.exclude(library__actor__user__isnull=include) diff --git a/api/funkwhale_api/playlists/models.py b/api/funkwhale_api/playlists/models.py index ac86b97a00848a97718db737ed6bab1be796c02b..e1895137d3630ec9970862ce3c85bbfc0472a0ee 100644 --- a/api/funkwhale_api/playlists/models.py +++ b/api/funkwhale_api/playlists/models.py @@ -51,9 +51,9 @@ class PlaylistQuerySet(models.QuerySet): def playable_by(self, actor, include=True): plts = PlaylistTrack.objects.playable_by(actor, include) if include: - return self.filter(playlist_tracks__in=plts) + return self.filter(playlist_tracks__in=plts).distinct() else: - return self.exclude(playlist_tracks__in=plts) + return self.exclude(playlist_tracks__in=plts).distinct() class Playlist(models.Model): @@ -167,9 +167,9 @@ class PlaylistTrackQuerySet(models.QuerySet): def playable_by(self, actor, include=True): tracks = music_models.Track.objects.playable_by(actor, include) if include: - return self.filter(track__pk__in=tracks) + return self.filter(track__pk__in=tracks).distinct() else: - return self.exclude(track__pk__in=tracks) + return self.exclude(track__pk__in=tracks).distinct() class PlaylistTrack(models.Model):